Re: Extracting pixel values from an image under a polygon (region of interest)

*To*: mathgroup at smc.vnet.net*Subject*: [mg115337] Re: Extracting pixel values from an image under a polygon (region of interest)*From*: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>*Date*: Sat, 8 Jan 2011 03:37:30 -0500 (EST)

Hi, a fast, although not pixel-exact, way is to render the polygon as an image and use this mask to extract you pixels: img = ImageResize[ExampleData[{"TestImage", "Lena"}], 128]; {nx, ny} = ImageDimensions[img]; poly = Polygon[{{10, 10}, {20, 100}, {120, 40}, {80, 10}}]; Show[Graphics[{Inset[img, {0, 0}, {0, 0}, {nx, ny}], Red, Opacity[0.5], poly}, PlotRange -> {{0, nx}, {0, ny}}, ImageSize -> {nx, ny}]] mask = Binarize@ Image[Graphics[{White, poly}, Background -> Black, ImageSize -> {nx, ny}, PlotRange -> {{0, nx}, {0, ny}}], ColorSpace -> "Grayscale"] ImageMultiply[img, mask] You have to take care that the rendered polygon graphics has the same coordinate system that your image has. If you only want the (rgb) pixel values which are inside, you can select them out in various ways. One way is to use Cases: pixel = Last /@ Cases[Transpose[ Flatten[#, 1] & /@ {ImageData[mask, "Bit"], ImageData[img, "Real"]}], {1, rgb_}]; Graphics3D[{RGBColor @@ #, Point[#]} & /@ pixel] Hope this helps for a start. Cheers Patrick On Fri, 2011-01-07 at 04:10 -0500, Mac wrote: > I've tried solving this general scientific image processing problem > for some time, alas without success. Given an image and a polygon with > coordinates describing a region of interest, I would like to extract > all the image pixels falling completely within the boundaries of the > polygon (not necessarily a square). > > As an illustrative example consider the following synthetic image + > region of interest marked in red > > img = Graphics[{Raster[RandomReal[{0, 1}, {10, 10}]], Red, > Opacity[0.5], Polygon[{{0.9, 0.9}, {4, 4.1}, {7, 4.1}, {8, 1}}]}, > Frame -> True] > > I would like to extract all the values of img falling within the > boundary of the red polygon. The real world problem I face is that I > have a radar map of the earth's surface with the pixel values > representing the radar intensity and would like to extract and analyse > all pixels falling within a specific region (say for instance > Greenland). Despite the advances in image processing in Mathematica 8 > I still do not see a solution. There is no PixelTake function or > similar.... > > Anway, any help would be much appreciated. > > Mac >