Region Growing for Image Segmentatio

The basic idea behind region growing is quite simple. Start with a pixel, or a group of pixels, and examine the neighboring pixels. If a neighboring pixel meets a certain criteria, it is added to the group, and if it does not meet the criteria, it is not added. This process is continued until no more neighboring pixels can be added to the group. Thus, a region is defined.

The criteria depends on how you wish to segment the region. It can be a limit on the derivative between pixels, a change in color, or any other criteria you wish to differentiate between pixels.

Method One - Recursive Region Growing

The idea behind recursive region growing is as follows: start with a pixel, and examine the eight pixels bordering it. If a pixel meets the criteria for addition to the group, you recursively call the function on that pixel. This process continues until all possible pixels have been examined.

The problem with this recursive segmentation routine is processing power, because for a large region many, many pixels will be admissable to the region, and thus there will be many, many recursions before the recursion sequence will terminate. In fact, with our implementation of the recursive region growing routine, we had the problem that matlab would crash with a segmentation fault. The code of this routine is available here. Since this routine was only able to work on small regions in which the number of recursions was extremely limited, we have no useful images to show for this algorithm.

Method Two - Square Division In order to avoid the perils of mass recursion, we attempted to figure out a new routine. In this routine, the image is divided into rectangular regions. Each region starts as a single pixel, and it grows until a certain difference between the minimum and maximum is exceeded. After a rectangular region is defined, that area is set to a value corresponding to the mean of the pixels contained within.

Since this algorithm was able to run and segment an image in a reasonable amount of time, we have two results to show, one of the image "Buck" with the tolerance set to 10%, and another with the tolerance set to 5%.


Buck segmented at 10%


Buck segmented at 5%

The code for this algorithm is available here.

Region Growing - Thoughts and conclusions.

Although region growing is simple in theory, effective implementation proves to be a rather tricky business. Many algorithms that we found in our research depended on the use of paralell processing, which we were not able to implement in the time alloted to us. Paralell processing would allow you to run recursive region growing in paralell, greatly speeding up the process, as well as lowering the number of recursions necessary.