Difference between revisions of "Barrel Detection"
Jump to navigation
Jump to search
(→'''Image Acquisition & Color Identification (#2)''': progress update: initial implementation of algorithm is complete) |
Joldenburg6 (talk | contribs) m (Categorize) |
||
(19 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:IGVC]][[Category:2005-2006]] | ||
+ | [[Image:IdentifiedBarrel.png|thumb|right|A barrel, and its bounding box, as identified by '''BarrelBlobFinder''']] | ||
+ | |||
+ | '''Objective:''' Determine bounding boxes for the barrels visible in a camera image. | ||
+ | |||
+ | Jump to the [[#Image Acquisition & Color Identification (#2)|most promising approach]] for detecting barrels. | ||
+ | |||
== Approaches == | == Approaches == | ||
The following approaches have been considered: | The following approaches have been considered: | ||
Line 9: | Line 16: | ||
* <tt>(Orange pixels) => [[Blob Detection|Blob seperation]] => White stripes (Bounding Boxes)</tt> | * <tt>(Orange pixels) => [[Blob Detection|Blob seperation]] => White stripes (Bounding Boxes)</tt> | ||
* <tt>{Orange stripes (Bounding Boxes), White stripes (Bounding Boxes)} => [[Blob Detection|Blob merging]] => Barrels (Bounding Boxes)</tt> | * <tt>{Orange stripes (Bounding Boxes), White stripes (Bounding Boxes)} => [[Blob Detection|Blob merging]] => Barrels (Bounding Boxes)</tt> | ||
+ | |||
+ | ==== Progress ==== | ||
+ | * ''none so far'' | ||
=== '''Image Acquisition & Color Identification (#2)''' === | === '''Image Acquisition & Color Identification (#2)''' === | ||
==== Strategy ==== | ==== Strategy ==== | ||
− | * Find orange pixels (on barrel) with <tt>(Pixels) => Red - Green => High-Pass Threshold => (Orange pixels)</tt> | + | * '''Preprocessing''' |
− | * Scan horizontal lines of image, starting from the bottom, and moving up. When | + | ** Find orange pixels (on barrel) with <tt>(Pixels) => Red - Green => High-Pass Threshold => (Orange pixels)</tt> |
+ | ** Find white pixels (on barrel) with <tt>(Pixels) => {Saturation, Brightness} => {Low-Pass Threshold, High-Pass Threshold} => (White pixels)</tt> | ||
+ | |||
+ | * '''Algorithm''' | ||
+ | ** Scan horizontal lines of image, starting from the bottom, and moving up. When current scan line intersects a sufficient number of orange pixels, mark the scan line as containing the bottom edge of one or more barrels. | ||
+ | ** Find the interval of orange pixels on the scan line within the X% and (100-X)% quartiles (where X is a parameter - typically 5%). Mark this interval as being the bottom edge of a barrel. (The usage of quartiles is to ensure robustness in the prescense of orange pixel noise.) | ||
+ | *** '''Note:''' This step assumes that the bottom edges of more than one barrel will not occur in the same scan line. | ||
+ | ** Once the bottom edge of a barrel is identified, scan horizontal line-segments above the bottom edge, starting from the bottom and moving up. When an insufficient percentage of the current scan line-segment contains orange/white pixels, mark the line-segment as being the top edge of the barrel. | ||
+ | ** Once the top and bottom edges of a barrel have been identified, record the bounding box of the barrel and delete the barrel from the image (clear all of the pixels within the bounding box). Continue scanning. | ||
+ | |||
+ | ==== Implementations ==== | ||
+ | * [[Barrel Blob Finder]] | ||
==== Progress ==== | ==== Progress ==== | ||
− | * I have written an experimental image filter called '''BarrelBlobFinder''', included in [[ImageFilterDemo]] [[:Image:ImageFilterDemo v1 2 3.zip|v1.2.3]], that implements this algorithm. It works quite well, although it could benefit from some more calibration. --[[User:DavidF|David]] 23:22, 19 Oct 2005 (EDT) | + | * I have written an experimental image filter called '''BarrelBlobFinder''', included in [[ImageFilterDemo]] [[:Image:ImageFilterDemo v1 2 3.zip|v1.2.3]], that implements a more complex version of this algorithm. It works quite well, although it could benefit from some more calibration. --[[User:DavidF|David]] 23:22, 19 Oct 2005 (EDT) |
+ | * I have enhanced '''BarrelBlobFinder''' to determine the width of barrels a ''lot'' more accurately. Check it out in [[ImageFilterDemo]] [[:Image:ImageFilterDemo_v1_2_5.zip|v1.2.5]]. --[[User:DavidF|David]] 21:38, 5 Nov 2005 (EST) | ||
+ | * I am investigating the usage of [[Adaptive Thresholding|adaptive thresholding]] to dynamically determine appropriate values for the threshold-style parameters of the '''BarrelBlobFinder''' filter. --[[User:DavidF|David]] 20:48, 20 Oct 2005 (EDT) | ||
+ | ** My experiments with adaptive thresholding have been quite successful in detecting barrels when they are present in an image. In images that contain no barrels, however, the adaptive thresholding algorithm performs very poorly. Until this issue is resolved, '''BarrelBlobFinder''' will continue to use static thresholds by default. --[[User:DavidF|David]] 15:46, 10 Nov 2005 (EST). | ||
=== '''Distance-Map Acquistion & Shape Identification''' === | === '''Distance-Map Acquistion & Shape Identification''' === | ||
Line 24: | Line 48: | ||
==== Methods to Obtain a Distance Map ==== | ==== Methods to Obtain a Distance Map ==== | ||
− | # SICK | + | # [[SICK]] |
#* Obtains a distance-map along a ''line'' projected away from the robot. | #* Obtains a distance-map along a ''line'' projected away from the robot. | ||
− | #* Easy to implement programmatically. | + | #* ''Pros'' |
− | #* Expensive hardware. May be able to get from the CS department | + | #** Easy to implement programmatically. |
+ | #* ''Cons'' | ||
+ | #** Expensive hardware. May be able to get from the CS department | ||
# Stereoscopic Imaging | # Stereoscopic Imaging | ||
#* Obtains a distance-map along a ''plane'' projected away from the robot. | #* Obtains a distance-map along a ''plane'' projected away from the robot. | ||
− | #* Difficult to implement programmatically. | + | #* ''Pros'' |
− | #* Requires two camcorders. Currently, we only have one. | + | #** none significant |
+ | #* ''Cons'' | ||
+ | #** Difficult to implement programmatically. | ||
+ | #** Requires two camcorders. Currently, we only have one. | ||
+ | |||
+ | ==== Implementations ==== | ||
+ | * [[User:SpencerC|Spencer]] already has a rudimentary implementation of a steroscopic imaging algorithm. It is not posted, however. Contact him for details. | ||
+ | |||
+ | ==== Progress ==== | ||
+ | * ''no further progress'' | ||
== A Note on Notation == | == A Note on Notation == | ||
In the above steps, items surrounded with parentheses are ''data''. Other items are ''analyses'' or ''filters''. | In the above steps, items surrounded with parentheses are ''data''. Other items are ''analyses'' or ''filters''. |
Latest revision as of 21:07, 13 June 2018
Objective: Determine bounding boxes for the barrels visible in a camera image.
Jump to the most promising approach for detecting barrels.
Contents
Approaches
The following approaches have been considered:
Image Acquisition & Color Identification (#1)
Strategy
- Find orange pixels (on barrel) with (Pixels) => Red - Green => High-Pass Threshold => (Orange pixels)
- Find while pixels (on barrel) with (Pixels) => Saturation => Low-Pass Threshold => (White pixels)
- (Orange pixels) => Blob seperation => Orange stripes (Bounding Boxes)
- (Orange pixels) => Blob seperation => White stripes (Bounding Boxes)
- {Orange stripes (Bounding Boxes), White stripes (Bounding Boxes)} => Blob merging => Barrels (Bounding Boxes)
Progress
- none so far
Image Acquisition & Color Identification (#2)
Strategy
- Preprocessing
- Find orange pixels (on barrel) with (Pixels) => Red - Green => High-Pass Threshold => (Orange pixels)
- Find white pixels (on barrel) with (Pixels) => {Saturation, Brightness} => {Low-Pass Threshold, High-Pass Threshold} => (White pixels)
- Algorithm
- Scan horizontal lines of image, starting from the bottom, and moving up. When current scan line intersects a sufficient number of orange pixels, mark the scan line as containing the bottom edge of one or more barrels.
- Find the interval of orange pixels on the scan line within the X% and (100-X)% quartiles (where X is a parameter - typically 5%). Mark this interval as being the bottom edge of a barrel. (The usage of quartiles is to ensure robustness in the prescense of orange pixel noise.)
- Note: This step assumes that the bottom edges of more than one barrel will not occur in the same scan line.
- Once the bottom edge of a barrel is identified, scan horizontal line-segments above the bottom edge, starting from the bottom and moving up. When an insufficient percentage of the current scan line-segment contains orange/white pixels, mark the line-segment as being the top edge of the barrel.
- Once the top and bottom edges of a barrel have been identified, record the bounding box of the barrel and delete the barrel from the image (clear all of the pixels within the bounding box). Continue scanning.
Implementations
Progress
- I have written an experimental image filter called BarrelBlobFinder, included in ImageFilterDemo v1.2.3, that implements a more complex version of this algorithm. It works quite well, although it could benefit from some more calibration. --David 23:22, 19 Oct 2005 (EDT)
- I have enhanced BarrelBlobFinder to determine the width of barrels a lot more accurately. Check it out in ImageFilterDemo v1.2.5. --David 21:38, 5 Nov 2005 (EST)
- I am investigating the usage of adaptive thresholding to dynamically determine appropriate values for the threshold-style parameters of the BarrelBlobFinder filter. --David 20:48, 20 Oct 2005 (EDT)
- My experiments with adaptive thresholding have been quite successful in detecting barrels when they are present in an image. In images that contain no barrels, however, the adaptive thresholding algorithm performs very poorly. Until this issue is resolved, BarrelBlobFinder will continue to use static thresholds by default. --David 15:46, 10 Nov 2005 (EST).
Distance-Map Acquistion & Shape Identification
Strategy
- Scan distances in front of robot by some method, obtaining a distance-map.
- Find/distinguish the "plateaus" of the graph. Mark each "plateau" as the near-edge/near-face of a barrel.
Methods to Obtain a Distance Map
- SICK
- Obtains a distance-map along a line projected away from the robot.
- Pros
- Easy to implement programmatically.
- Cons
- Expensive hardware. May be able to get from the CS department
- Stereoscopic Imaging
- Obtains a distance-map along a plane projected away from the robot.
- Pros
- none significant
- Cons
- Difficult to implement programmatically.
- Requires two camcorders. Currently, we only have one.
Implementations
- Spencer already has a rudimentary implementation of a steroscopic imaging algorithm. It is not posted, however. Contact him for details.
Progress
- no further progress
A Note on Notation
In the above steps, items surrounded with parentheses are data. Other items are analyses or filters.