hough_line
-
skimage.transform.hough_line(img, theta=None)
[source] -
Perform a straight line Hough transform.
Parameters: img : (M, N) ndarray
Input image with nonzero values representing edges.
theta : 1D ndarray of double
Angles at which to compute the transform, in radians. Defaults to -pi/2 .. pi/2
Returns: H : 2-D ndarray of uint64
Hough transform accumulator.
theta : ndarray
Angles at which the transform was computed, in radians.
distances : ndarray
Distance values.
Notes
The origin is the top left corner of the original image. X and Y axis are horizontal and vertical edges respectively. The distance is the minimal algebraic distance from the origin to the detected line.
Examples
Generate a test image:
1234567>>> img
=
np.zeros((
100
,
150
), dtype
=
bool
)
>>> img[
30
, :]
=
1
>>> img[:,
65
]
=
1
>>> img[
35
:
45
,
35
:
50
]
=
1
>>>
for
i
in
range
(
90
):
... img[i, i]
=
1
>>> img
+
=
np.random.random(img.shape) >
0.95
Apply the Hough transform:
1>>> out, angles, d
=
hough_line(img)
12345678910111213141516171819202122232425262728293031import
numpy as np
import
matplotlib.pyplot as plt
from
skimage.transform
import
hough_line
from
skimage.draw
import
line
img
=
np.zeros((
100
,
150
), dtype
=
bool
)
img[
30
, :]
=
1
img[:,
65
]
=
1
img[
35
:
45
,
35
:
50
]
=
1
rr, cc
=
line(
60
,
130
,
80
,
10
)
img[rr, cc]
=
1
img
+
=
np.random.random(img.shape) >
0.95
out, angles, d
=
hough_line(img)
plt.subplot(
1
,
2
,
1
)
plt.imshow(img, cmap
=
plt.cm.gray)
plt.title(
'Input image'
)
plt.subplot(
1
,
2
,
2
)
plt.imshow(out, cmap
=
plt.cm.bone,
extent
=
(np.rad2deg(angles[
-
1
]), np.rad2deg(angles[
0
]),
d[
-
1
], d[
0
]))
plt.title(
'Hough transform'
)
plt.xlabel(
'Angle (degree)'
)
plt.ylabel(
'Distance (pixel)'
)
plt.subplots_adjust(wspace
=
0.4
)
plt.show()
(Source code, png, pdf)
Please login to continue.