[GRASS-SVN] r55017 - grass-addons/grass7/imagery/i.segment.gsoc

svn_grass at osgeo.org svn_grass at osgeo.org
Tue Feb 12 08:43:22 PST 2013


Author: mmetz
Date: 2013-02-12 08:43:22 -0800 (Tue, 12 Feb 2013)
New Revision: 55017

Added:
   grass-addons/grass7/imagery/i.segment.gsoc/i.segment.gsoc.html
Removed:
   grass-addons/grass7/imagery/i.segment.gsoc/i.segment.html
Modified:
   grass-addons/grass7/imagery/i.segment.gsoc/Makefile
Log:
i.segment.gsoc: rename cmd to i.segment.gsoc

Modified: grass-addons/grass7/imagery/i.segment.gsoc/Makefile
===================================================================
--- grass-addons/grass7/imagery/i.segment.gsoc/Makefile	2013-02-12 12:40:13 UTC (rev 55016)
+++ grass-addons/grass7/imagery/i.segment.gsoc/Makefile	2013-02-12 16:43:22 UTC (rev 55017)
@@ -1,6 +1,6 @@
 MODULE_TOPDIR = ../..
 
-PGM = i.segment
+PGM = i.segment.gsoc
 
 LIBES = $(IMAGERYLIB) $(RASTERLIB) $(SEGMENTLIB) $(GISLIB) $(LINKMLIB) $(BTREE2LIB)
 DEPENDENCIES = $(IMAGERYDEP) $(RASTERDEP) $(SEGMENTDEP) $(GISDEP) $(LINKMDEP)

Copied: grass-addons/grass7/imagery/i.segment.gsoc/i.segment.gsoc.html (from rev 55016, grass-addons/grass7/imagery/i.segment.gsoc/i.segment.html)
===================================================================
--- grass-addons/grass7/imagery/i.segment.gsoc/i.segment.gsoc.html	                        (rev 0)
+++ grass-addons/grass7/imagery/i.segment.gsoc/i.segment.gsoc.html	2013-02-12 16:43:22 UTC (rev 55017)
@@ -0,0 +1,226 @@
+<h2>DESCRIPTION</h2>
+Image segmentation is the process of grouping similar pixels into 
+unique segments. Boundary and region based algorithms are described 
+in the literature, currently a region growing and merging algorithm 
+is implemented.  Each grouping (usually refered to as objects or 
+segments) found during the segmentation process is given a unique ID 
+and is a collection of contiguous pixels meeting some criteria.  
+(Note the contrast with image classification, where continuity and 
+spatial characteristics are not important, but rather only the 
+spectral similarity.)  The results can be useful on their own, or 
+used as a preprocessing step for image classification.  The 
+segmentation preprocessing step can reduce noise and speed up the 
+classification.
+
+<H2>NOTES</h2>
+
+<h3>Region Growing and Merging</h3>
+This segmentation algorithm sequentially examines all current 
+segments in the map.  The similarity between the current segment and 
+each of its neighbors is calculated according to the given distance 
+formula. Segments will be merged if they meet a number of criteria, 
+including: 1.  The pair is mutually most similar to each other (the 
+similarity distance will be smaller then all other neighbors), and 
+2. The similarity must be lower then the input threshold.  All 
+segments are checked once per pass.  The process is repeated until 
+no merges are made during a complete pass.
+
+<h3>Similarity and Threshold</h3>
+The similarity between segments and unmerged pixels is used to 
+determine which are merged.  The Euclidean version uses the 
+radiometric distance between the two segments and also the shape 
+characteristics. The Manhatten calculations currently only uses only 
+the radiometric distance between the two segments, but eventually 
+shape characteristics will be included as well.  NOTE: 
+Closer/smaller distances mean a lower value for the similarity 
+indicates a closer match, with a similarity score of zero for 
+identical pixels.
+<p>
+During normal processing, merges are only allowed when the 
+similarity between two segments is lower then the calculated 
+threshold value. During the final pass, however, if a minimum 
+segment size of 2 or larger is given with the <em>minsize</em> 
+parameter, segments with a smaller pixel count will be merged with 
+their most similar neighbor even if the similarity is greater then 
+the threshold.
+<p>
+Unless the <em>-w</em> flag for weighted data is used, the threshold 
+should be set by the user between 0 and 1.0. A threshold of 0 would 
+allow only identical valued pixels to be merged, while a threshold 
+of 1 would allow everything to be merged.
+<p>
+The threshold will be multiplied by the number of rasters included 
+in the image group.  This will allow the same threshold to achieve 
+similar segmentation results when the number of rasters in the image 
+group varies.
+<p>
+The -t flag will estimate the threshold, it is calculated at 3% of 
+the range of data in the imagery group.  Initial empirical tests 
+indicate threshold values of 1% to 5% are reasonable places to start.
+
+<h4>Calculation Formulas</h4>
+Both Euclidean and Manhattan distances use the normal definition, 
+considering each raster in the image group as a dimension.
+
+Furthermore, the Euclidean calculation also takes into account the 
+shape characteristics of the segments.  The normal distances are 
+multiplied by the input radiometric weight.  Next an additional 
+contribution is added: (1-radioweight) * {smoothness * smoothness 
+weight + compactness * (1-smoothness weight)}, where compactness = 
+the Perimeter Length / sqrt( Area ) and smoothness = Perimeter 
+Length / the Bounding Box.  The perimeter length is estimated as the 
+number of pixel sides the segment has.
+
+<h3>Seeds</h3>
+The seeds map can be used to provide either seed pixels (random or 
+selected points from which to start the segmentation process) or 
+seed segments (results of previous segmentations or 
+classifications).  The different approaches are automatically 
+detected by the program: any pixels that have identical seed values 
+and are contiguous will be lumped into a single segment ID.
+<p>
+It is expected that the <em>minsize</em> will be set to 1 if a seed 
+map is used, but the program will allow other values to be used.  If 
+both options are used, the final iteration that ignores the 
+threshold also will ignore the seed map and force merges for all 
+pixels (not just segments that have grown/merged from the seeds).
+
+<h3>Maximum number of starting segments</h3>
+For the region growing algorithm without starting seeds, each pixel 
+is sequentially numbered.  The current limit with CELL storage is 2 
+billion starting segment ID's.  If the initial map has a larger 
+number of non-null pixels, there are two workarounds:
+<p>
+1.  Use starting seed pixels.  (Maximum 2 billion pixels can be 
+labeled with positive integers.)
+<p>
+2.  Use starting seed segments.  (By initial classification or other 
+methods.)
+
+<h3>Boundary Constraints</h3>
+Boundary constraints limit the adjacency of pixels and segments.  
+Each unique value present in the <em>bounds</em> raster are 
+considered as a MASK.  Thus no segments in the final segmentated map 
+will cross a boundary, even if their spectral data is very similar.
+
+<h3>Minimum Segment Size</h3>
+To reduce the salt and pepper affect, a <em>minsize</em> greater 
+than 1 will add one additional pass to the processing.  During the 
+final pass, the threshold is ignored for any segments smaller then 
+the set size, thus forcing very small segments to merge with their 
+most similar neighbor.
+
+<h2>EXAMPLES</h2>
+This example uses the ortho photograph included in the NC Sample 
+Dataset.  Set up an imagery group:<br>
+<div class="code"><pre>
+i.group group=ortho_group input=ortho_2001_t792_1m at PERMANENT
+</pre></div>
+
+<p>Because the segmentation process is computationally expensive, 
+start with a small processing area to confirm if the segmentation 
+results meet your requirements.  Some manual adjustment of the 
+threshold may be required. <br>
+
+<div class="code"><pre>
+g.region rast=ortho_2001_t792_1m at PERMANENT n=220400 s=220200 e=639000 w=638800
+</pre></div>
+
+Try out a first threshold and check the results.<br>
+<div class="code"><pre>
+i.segment -w -l group=ortho_group output=ortho_segs threshold=4 \
+          method=region_growing 
+</pre></div>
+<p></p>
+From a visual inspection, it seems this results in oversegmentation.  
+Increasing the threshold: <br>
+<div class="code"><pre>
+i.segment -w -l --overwrite group=ortho_group output=ortho_segs \
+          threshold=10 method=region_growing
+</pre></div>
+<p></p>
+This looks better.  There is some noise in the image, lets next force 
+all segments smaller then 5 pixels to be merged into their most similar 
+neighbor (even if they are less similar then required by our 
+threshold):<br>
+<div class="code"><pre>
+i.segment -w -l --overwrite group=ortho_group output=ortho_segs \
+          threshold=10 method=region_growing minsize=5
+</pre></div>
+<p></p>
+Each of these segmentation steps took less then 1 minute on a decent 
+machine.  Now that we are satisfied with the settings, we'll process 
+the entire image:
+<div class="code"><pre>
+g.region rast=ortho_2001_t792_1m at PERMANENT<br>
+i.segment -w -l --overwrite group=ortho_group output=ortho_segs \
+          threshold=10 method=region_growing minsize=5 endt=5000
+</pre></div>
+<p>
+Processing the entire ortho image (over 9 million pixels) took about 
+a day.
+
+<h2>TODO</h2>
+<h3>Functionality</h3>
+<ul>
+<li>Further testing of the shape characteristics (smoothness, 
+compactness), if it looks good it should be added to the Manhatten 
+option.
+<b>in progress</b></li>
+<li>Malahanobis distance for the similarity calculation.</li>
+</ul>
+<h3>Use of Segmentation Results</h3>
+<ul>
+<li>Improve the optional output from this module, or better yet, add a 
+module for <em>i.segment.metrics</em>.</li>
+<li>Providing updates to i.maxlik to ensure the segmentation output can 
+be used as input for the existing classification functionality.</li>
+<li>Integration/workflow for <em>r.fuzzy</em>.</li>
+</ul>
+<h3>Speed</h3>
+<ul>
+<li>See create_isegs.c</li>
+</ul>
+<h3>Memory</h3>
+<ul>
+<li>User input for how much RAM can be used.</li>
+<li>Check input map type(s), currently storing in DCELL sized SEG file, 
+could reduce this dynamically depending on input map time. (Could only 
+reduce to FCELL, since will be storing mean we can't use CELL. Might 
+not be worth the added code complexity.)</li>
+</ul>
+<h2>BUGS</h2>
+If the seeds map is used to give starting seed segments, the segments 
+are renumbered starting from 1.  There is a chance a segment could be 
+renumbered to a seed value that has not yet been processed.  If they 
+happen to be adjacent, they would be merged.  (Possible fixes: a.  use 
+a processing flag to make sure the pixels hasn't been previously used, 
+or b. use negative segment ID's as a placeholder and negate all values 
+after the seed map has been processed.)
+<H2>REFERENCES</h2>
+This project was first developed during GSoC 2012.  Project 
+documentation, Image Segmentation references, and other information 
+is at the <a href=
+"http://grass.osgeo.org/wiki/GRASS_GSoC_2012_Image_Segmentation">
+project wiki</a>.
+<p>
+Information about <a href=
+"http://grass.osgeo.org/wiki/Image_classification">classification in 
+GRASS GIS</a> is also available on the wiki.
+
+<h2>SEE ALSO</h2>
+<em>
+<a href="i.group.html">i.group</a>, 
+<a href="i.maxlik.html">i.maxlik</a>, 
+<a href="r.fuzzy">r.fuzzy</a>, 
+<a href="i.smap.html">i.smap</a>, 
+<a href="r.seg.html">r.seg</a> (Addon)
+</em>
+
+<h2>AUTHORS</h2>
+Eric Momsen - North Dakota State University
+<p>
+GSoC mentor: Markus Metz
+
+<p>
+<i>Last changed: $Date$

Deleted: grass-addons/grass7/imagery/i.segment.gsoc/i.segment.html
===================================================================
--- grass-addons/grass7/imagery/i.segment.gsoc/i.segment.html	2013-02-12 12:40:13 UTC (rev 55016)
+++ grass-addons/grass7/imagery/i.segment.gsoc/i.segment.html	2013-02-12 16:43:22 UTC (rev 55017)
@@ -1,226 +0,0 @@
-<h2>DESCRIPTION</h2>
-Image segmentation is the process of grouping similar pixels into 
-unique segments. Boundary and region based algorithms are described 
-in the literature, currently a region growing and merging algorithm 
-is implemented.  Each grouping (usually refered to as objects or 
-segments) found during the segmentation process is given a unique ID 
-and is a collection of contiguous pixels meeting some criteria.  
-(Note the contrast with image classification, where continuity and 
-spatial characteristics are not important, but rather only the 
-spectral similarity.)  The results can be useful on their own, or 
-used as a preprocessing step for image classification.  The 
-segmentation preprocessing step can reduce noise and speed up the 
-classification.
-
-<H2>NOTES</h2>
-
-<h3>Region Growing and Merging</h3>
-This segmentation algorithm sequentially examines all current 
-segments in the map.  The similarity between the current segment and 
-each of its neighbors is calculated according to the given distance 
-formula. Segments will be merged if they meet a number of criteria, 
-including: 1.  The pair is mutually most similar to each other (the 
-similarity distance will be smaller then all other neighbors), and 
-2. The similarity must be lower then the input threshold.  All 
-segments are checked once per pass.  The process is repeated until 
-no merges are made during a complete pass.
-
-<h3>Similarity and Threshold</h3>
-The similarity between segments and unmerged pixels is used to 
-determine which are merged.  The Euclidean version uses the 
-radiometric distance between the two segments and also the shape 
-characteristics. The Manhatten calculations currently only uses only 
-the radiometric distance between the two segments, but eventually 
-shape characteristics will be included as well.  NOTE: 
-Closer/smaller distances mean a lower value for the similarity 
-indicates a closer match, with a similarity score of zero for 
-identical pixels.
-<p>
-During normal processing, merges are only allowed when the 
-similarity between two segments is lower then the calculated 
-threshold value. During the final pass, however, if a minimum 
-segment size of 2 or larger is given with the <em>minsize</em> 
-parameter, segments with a smaller pixel count will be merged with 
-their most similar neighbor even if the similarity is greater then 
-the threshold.
-<p>
-Unless the <em>-w</em> flag for weighted data is used, the threshold 
-should be set by the user between 0 and 1.0. A threshold of 0 would 
-allow only identical valued pixels to be merged, while a threshold 
-of 1 would allow everything to be merged.
-<p>
-The threshold will be multiplied by the number of rasters included 
-in the image group.  This will allow the same threshold to achieve 
-similar segmentation results when the number of rasters in the image 
-group varies.
-<p>
-The -t flag will estimate the threshold, it is calculated at 3% of 
-the range of data in the imagery group.  Initial empirical tests 
-indicate threshold values of 1% to 5% are reasonable places to start.
-
-<h4>Calculation Formulas</h4>
-Both Euclidean and Manhattan distances use the normal definition, 
-considering each raster in the image group as a dimension.
-
-Furthermore, the Euclidean calculation also takes into account the 
-shape characteristics of the segments.  The normal distances are 
-multiplied by the input radiometric weight.  Next an additional 
-contribution is added: (1-radioweight) * {smoothness * smoothness 
-weight + compactness * (1-smoothness weight)}, where compactness = 
-the Perimeter Length / sqrt( Area ) and smoothness = Perimeter 
-Length / the Bounding Box.  The perimeter length is estimated as the 
-number of pixel sides the segment has.
-
-<h3>Seeds</h3>
-The seeds map can be used to provide either seed pixels (random or 
-selected points from which to start the segmentation process) or 
-seed segments (results of previous segmentations or 
-classifications).  The different approaches are automatically 
-detected by the program: any pixels that have identical seed values 
-and are contiguous will be lumped into a single segment ID.
-<p>
-It is expected that the <em>minsize</em> will be set to 1 if a seed 
-map is used, but the program will allow other values to be used.  If 
-both options are used, the final iteration that ignores the 
-threshold also will ignore the seed map and force merges for all 
-pixels (not just segments that have grown/merged from the seeds).
-
-<h3>Maximum number of starting segments</h3>
-For the region growing algorithm without starting seeds, each pixel 
-is sequentially numbered.  The current limit with CELL storage is 2 
-billion starting segment ID's.  If the initial map has a larger 
-number of non-null pixels, there are two workarounds:
-<p>
-1.  Use starting seed pixels.  (Maximum 2 billion pixels can be 
-labeled with positive integers.)
-<p>
-2.  Use starting seed segments.  (By initial classification or other 
-methods.)
-
-<h3>Boundary Constraints</h3>
-Boundary constraints limit the adjacency of pixels and segments.  
-Each unique value present in the <em>bounds</em> raster are 
-considered as a MASK.  Thus no segments in the final segmentated map 
-will cross a boundary, even if their spectral data is very similar.
-
-<h3>Minimum Segment Size</h3>
-To reduce the salt and pepper affect, a <em>minsize</em> greater 
-than 1 will add one additional pass to the processing.  During the 
-final pass, the threshold is ignored for any segments smaller then 
-the set size, thus forcing very small segments to merge with their 
-most similar neighbor.
-
-<h2>EXAMPLES</h2>
-This example uses the ortho photograph included in the NC Sample 
-Dataset.  Set up an imagery group:<br>
-<div class="code"><pre>
-i.group group=ortho_group input=ortho_2001_t792_1m at PERMANENT
-</pre></div>
-
-<p>Because the segmentation process is computationally expensive, 
-start with a small processing area to confirm if the segmentation 
-results meet your requirements.  Some manual adjustment of the 
-threshold may be required. <br>
-
-<div class="code"><pre>
-g.region rast=ortho_2001_t792_1m at PERMANENT n=220400 s=220200 e=639000 w=638800
-</pre></div>
-
-Try out a first threshold and check the results.<br>
-<div class="code"><pre>
-i.segment -w -l group=ortho_group output=ortho_segs threshold=4 \
-          method=region_growing 
-</pre></div>
-<p></p>
-From a visual inspection, it seems this results in oversegmentation.  
-Increasing the threshold: <br>
-<div class="code"><pre>
-i.segment -w -l --overwrite group=ortho_group output=ortho_segs \
-          threshold=10 method=region_growing
-</pre></div>
-<p></p>
-This looks better.  There is some noise in the image, lets next force 
-all segments smaller then 5 pixels to be merged into their most similar 
-neighbor (even if they are less similar then required by our 
-threshold):<br>
-<div class="code"><pre>
-i.segment -w -l --overwrite group=ortho_group output=ortho_segs \
-          threshold=10 method=region_growing minsize=5
-</pre></div>
-<p></p>
-Each of these segmentation steps took less then 1 minute on a decent 
-machine.  Now that we are satisfied with the settings, we'll process 
-the entire image:
-<div class="code"><pre>
-g.region rast=ortho_2001_t792_1m at PERMANENT<br>
-i.segment -w -l --overwrite group=ortho_group output=ortho_segs \
-          threshold=10 method=region_growing minsize=5 endt=5000
-</pre></div>
-<p>
-Processing the entire ortho image (over 9 million pixels) took about 
-a day.
-
-<h2>TODO</h2>
-<h3>Functionality</h3>
-<ul>
-<li>Further testing of the shape characteristics (smoothness, 
-compactness), if it looks good it should be added to the Manhatten 
-option.
-<b>in progress</b></li>
-<li>Malahanobis distance for the similarity calculation.</li>
-</ul>
-<h3>Use of Segmentation Results</h3>
-<ul>
-<li>Improve the optional output from this module, or better yet, add a 
-module for <em>i.segment.metrics</em>.</li>
-<li>Providing updates to i.maxlik to ensure the segmentation output can 
-be used as input for the existing classification functionality.</li>
-<li>Integration/workflow for <em>r.fuzzy</em>.</li>
-</ul>
-<h3>Speed</h3>
-<ul>
-<li>See create_isegs.c</li>
-</ul>
-<h3>Memory</h3>
-<ul>
-<li>User input for how much RAM can be used.</li>
-<li>Check input map type(s), currently storing in DCELL sized SEG file, 
-could reduce this dynamically depending on input map time. (Could only 
-reduce to FCELL, since will be storing mean we can't use CELL. Might 
-not be worth the added code complexity.)</li>
-</ul>
-<h2>BUGS</h2>
-If the seeds map is used to give starting seed segments, the segments 
-are renumbered starting from 1.  There is a chance a segment could be 
-renumbered to a seed value that has not yet been processed.  If they 
-happen to be adjacent, they would be merged.  (Possible fixes: a.  use 
-a processing flag to make sure the pixels hasn't been previously used, 
-or b. use negative segment ID's as a placeholder and negate all values 
-after the seed map has been processed.)
-<H2>REFERENCES</h2>
-This project was first developed during GSoC 2012.  Project 
-documentation, Image Segmentation references, and other information 
-is at the <a href=
-"http://grass.osgeo.org/wiki/GRASS_GSoC_2012_Image_Segmentation">
-project wiki</a>.
-<p>
-Information about <a href=
-"http://grass.osgeo.org/wiki/Image_classification">classification in 
-GRASS GIS</a> is also available on the wiki.
-
-<h2>SEE ALSO</h2>
-<em>
-<a href="i.group.html">i.group</a>, 
-<a href="i.maxlik.html">i.maxlik</a>, 
-<a href="r.fuzzy">r.fuzzy</a>, 
-<a href="i.smap.html">i.smap</a>, 
-<a href="r.seg.html">r.seg</a> (Addon)
-</em>
-
-<h2>AUTHORS</h2>
-Eric Momsen - North Dakota State University
-<p>
-GSoC mentor: Markus Metz
-
-<p>
-<i>Last changed: $Date$



More information about the grass-commit mailing list