In the second part of this chapter, a region finding procedure is described which takes a list of ranges and labels each pixel of an image according to which of the ranges the corresponding grey-level is contained within or 0 if it is not contained within any of the ranges.
The following procedure performs this labelling for a given image and list of ranges:
define findregions(image, ranges) -> regionmap; vars a, b, table, i, label, xsize, ysize, x, y; /* build a table mapping grey-levels to labels */ /* (2nd arg. to newarray initializes cells to 0) */ newarray([0 99],0) -> table; 0 -> label; foreach [?a ?b] in ranges do label + 1 -> label; for i from a to b do label -> table(i) endfor endforeach; /* construct a region map from image by assigning label from table to each pixel according to grey-level */ boundslist(image) --> [1 ?xsize 1 ?ysize]; newarray([1 ^xsize 1 ^ysize]) -> regionmap; for y from 1 to ysize do for x from 1 to xsize do table(image(x,y)) -> regionmap(x,y) endfor endfor; enddefine;