[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