Hough transform: Difference between revisions
Content deleted Content added
→{{header|Tcl}}: remove unnecessary debugging bits |
Convert to a task |
||
Line 1:
{{
Implement the [[wp:Hough transform|Hough transform]], which is used as part of feature extraction with digital images. It is a tool that makes it far easier to identify straight lines in the source image, whatever their orientation.
The transform maps each point in the target image, <math>(\rho,\theta)</math>, to the average color of the pixels on the corresponding line of the source image (in <math>(x,y)</math>-space, where the line corresponds to points of the form <math>x\cos\theta + y\sin\theta = \rho</math>). The idea is that where there is a straight line in the original image, it corresponds to a bright (or dark, depending on the color of the background field) spot; by applying a suitable filter to the results of the transform, it is possible to extract the locations of the lines in the original image.
[[Image:Pentagon.png|thumb|Sample PNG image to use for the Hough transform.]]
The target space actually uses polar coordinates, but is conventionally plotted on rectangular coordinates for display. There's no specification of exactly how to map polar coordinates to a flat surface for display, but a convenient method is to use one axis for <math>\theta</math> and the other for <math>\rho</math>, with the center of the source image being the origin.
There is also a spherical Hough transform, which is more suited to identifying planes in 3D data.
=={{header|Tcl}}==
{{libheader|Tk}}
{{works with|Tk|8.6}}▼
or {{libheader|TkImg}}▼
<lang tcl>package require Tk
if {[catch {▼
package require Tk 8.6; # Just for PNG format handler▼
}] == 1} then {catch {▼
package require Img▼
}}▼
# If neither Tk8.6 nor Img, then only GIF and PPM images can be loaded▼
set PI 3.1415927
Line 45 ⟶ 37:
set totalPix 0
# Sum the colors of the line with equation x*cos(
if {$theta<45 || ($theta>135 && $theta<225) || $theta>315} {
# For these half-quadrants, it's better to iterate by 'y'
Line 82 ⟶ 74:
if {$totalPix > 0} {
set totalPix [expr {double($totalPix)}]
set col [format "#%02x%02x%02x" \
[expr {round($totalRed/$totalPix)}] \
[expr {round($totalGreen/$totalPix)}] \
Line 93 ⟶ 85:
$trg put [list $row] -to 0 $rho
}
}</lang>
Takes the name of the image to apply the transform to as an argument. If using PNG images,
▲{{works with|Tk|8.6}}
▲or {{libheader|TkImg}}
<lang tcl># Demonstration code
▲if {[catch {
▲ package require Tk 8.6; # Just for PNG format handler
▲}] == 1} then {catch {
▲ package require Img
▲}}
▲# If neither Tk8.6 nor Img, then only GIF and PPM images can be loaded
▲# Demonstration code
set f [lindex $argv 0]
image create photo srcImg -file $f
|