Edge๋ ๊ฒฝ๊ณ์ , ์ค๊ณฝ์ ์ ์๋ฏธํ๋ฉฐ ์์์ฒ๋ฆฌ์์๋ ๋ฐ๊ธฐ๊ฐ ๊ธ๊ฒฉํ๊ฒ ๋ณํ๋ ๋ถ๋ถ์ ๋งํ๋ค.
ํฝ์ ๊ฐ์ด ๊ธ๊ฒฉํ๊ฒ ๋ณํ๋ ์ง์ ์ด Edge๋ถ๋ถ์ด๋ฉฐ Edge๋ฅผ ๊ฒ์ถํจ์ผ๋ก์จ ๋ฌผ์ฒด์ ์์น, ๋ชจ์, ํฌ๊ธฐ, ๋ฐฉํฅ์ฑ ๋ฑ์ ๋ํ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
ํฝ์ ์ ๊ณก์ ๊ทธ๋ํ์ฒ๋ผ ์ฐ์ ๊ณต๊ฐ์ ์๋ ๊ฒ์ด ์๋๊ธฐ์ ๋ฏธ๋ถ ๊ทผ์ฟ๊ฐ์ผ๋ก Edge์ ์ฐพ์ ์ ์๋ค. ์ด ๋ง์ ์๋ก ๋ถ์ด ์๋ ํฝ์ ๊ฐ์ ์ฐจ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค๋ ๊ฒ์ด๋ค.

๐ก Sobel Filter
Sobel์ด ๊ณ ์ํด๋ธ ๊ฐ์ฅ์๋ฆฌ ๊ฒ์ถ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก 3X3 ํฌ๊ธฐ์ ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ฐ์ฐํ์์ ๋ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ๊ฐ ๋ฐฉํฅ ๊ฐ์ ๋น๊ตํ์ฌ ํฝ์ ๊ฐ์ ๋ณํ๋์ ๊ฒ์ถํ๋ค.

X์ถ ํํฐ๋ ์ธ๋ก ์ฑ๋ถ์ ๊ฒ์ถํ๊ณ Y์ถ ํํฐ๋ ๊ฐ๋ก ์ฑ๋ถ์ ๊ฒ์ถํ๋ค.
๋๊ฐ์ ์ ๊ฒ์ถํ๋ Sobel filter๋ ๋ค์๊ณผ ๊ฐ๋ค.

Sobel Filter๋ ๋ชจ๋ ๋ฐฉํฅ์ Edge ์ถ์ถ์ด ๊ฐ๋ฅํ์ง๋ง ๋๊ฐ์ ๋ฐฉํฅ Edge์ ๋์ฑ ๋ฏผ๊ฐํ๊ฒ ๋ฐ์ํ๋ค. ๋ํ ๋์ถํ ํ์ ๊ฐ์ ํ๊ท ํํ๋ฏ๋ก ์ก์์ ๊ฐํ๋ค.

์๋ณธ ์์์ ๊ฐ๊ฐ Sobel ํํฐ๋ฅผ ์ ์ฉํด์ Edge์ ๊ฒ์ถํ ๊ฒ์ด๋ค. ์์์๋ถํฐ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์์ง์ ๊ฒ์ถํ๋ X์ถ ํํฐ, ์ํ์ ๊ฒ์ถํ๋ Y์ถ ํํฐ, ๊ฐ๊ฐ ๋๊ฐ์ ์ ๊ฒ์ถํ๋ ํํฐ์ด๋ค.
๐ก Canny Edge
Edge ๊ฒ์ถ ์๊ณ ๋ฆฌ์ฆ์์ ๊ฐ์ฅ ์ ๋ขฐ์ฑ์ด ๋๊ณ ๊ฐํธํ์ฌ ๋ณดํธํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ํ์ ์ค๊ณฝ์ ํ๋์ ์ ์ผ๋ก ์ป์ ์ ์์ผ๋ฉฐ ์ด๋ฏธ์ง์ ํน์ง ์ถ์ถ์ ์ํ ์ ์ฒ๋ฆฌ๋ก ๋ง์ด ํ์ฉํ๋ค.
โ Canny Edge Detection
1๏ธโฃ ๋ ธ์ด์ฆ ์ ๊ฑฐ : ๊ฐ์ฐ์์ ํํฐ ์ฌ์ฉ
2๏ธโฃ Edge Gradient(๊ธฐ์ธ๊ธฐ) ๊ณ์ฐํ์ฌ Gradient๊ฐ์ด ๋์ ๋ถ๋ถ์ ์ฐพ๊ธฐ(=Sobel filter ์ฌ์ฉ)
ํจ์์ ์ ์์ ๋ฏธ๋ถ์ ํ๋ฉด ์ ์ ์ ๊ธฐ์ธ๊ธฐ๊ฐ ๋์ค๋ฉฐ ๊ธฐ์ธ๊ธฐ๋ ์ฐ์๋ ํฝ์ ๊ฐ์ ์ฐจ์ด ์ฆ Edge๊ฐ ๋๋ค.
๋ฐ๋ผ์ ํจ์์ ๊ทธ๋ํ๋ฅผ ๋ฏธ๋ถํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ํฝ์ ์ Sobel Filter๋ก Convolution ์ฐ์ฐํ๋ ๊ฒ์ด๋ค.
3๏ธโฃ ์ต๋๊ฐ์ด ์๋ ํฝ์ ์ ๊ฐ์ 0์ผ๋ก ๋ง๋ค๊ธฐ
Edge์ ๊ธฐ์ฌ๋๊ฐ ์ ์ ํฝ์ ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ด๋ฏธ์ง๋ฅผ ์ ์ฒด ์ค์บํฉ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ์ค์บํ๋ฉด์ ๊ธฐ์ธ๊ธฐ ๋ฐฉํฅ์ผ๋ก ๊ธฐ์ธ๊ธฐ ๊ฐ์ด ์ต๋๊ฐ์ ๊ฐ์ง ํฝ์ ์ ์ฐพ๋๋ค.

A๋ ์์ง ๋ฐฉํฅ ์์ ์์ง ์์ ์๋ ํฝ์ ์ด๋ค. ๊ธฐ์ธ๊ธฐ ๋ฐฉํฅ์ ์ํ์ด๊ณ B์ C๋ ๊ธฐ์ธ๊ธฐ ๋ฐฉํฅ์ ๋์ธ ํฝ์ ์ด๋ค. A์ง์ ์์ ๊ธฐ์ธ๊ธฐ ๊ฐ์ด B, C๋ณด๋ค ํฐ์ง ํ์ธํ๋ฉฐ A๊ฐ์ด ํฌ๋ค๋ฉด ๋์ด๊ฐ๊ณ ์๋ ๊ฒฝ์ฐ 0์ผ๋ก ๋ง๋ค์ด ํฝ์ ์ ์ต์ ํ๋ค.
4๏ธโฃ Hyteresis Thresholding
๊ธฐ์ธ๊ธฐ ๊ฐ๋๊ฐ maxVal๋ณด๋ค ํฌ๋ฉด Edge, minVal๋ณด๋ค ์์ผ๋ฉด Edge๊ฐ ์๋๋ผ๊ณ ํ๋จํ์ฌ ์ ๊ฑฐํ๋ค.

A๋ maxVal๋ณด๋ค ์์ ์์ผ๋ฏ๋ก ํ์คํ ์์ง์ด๊ณ B๋ A(ํ์คํ ์์ง)์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฏ๋ก ์ ๊ฑฐํ๋ค. C๋ A์ ์ฐ๊ฒฐ๋์ด ์๊ธฐ์ A์ C๋ง ๋จ๊ฒจ๋๊ณ B๋ ์ ๊ฑฐํ๋ค.
์์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ํจ์๊ฐ cv2.Canny() ํจ์์ด๋ค.
cv2.Canny(img, minimum thresholding value, maximum thresholding value)
ํจ์์ ์ธ์๋ ์ด๋ฏธ์ง์ minVal, maxVal๋ง ์ค์ ํ์ฌ์ฃผ๋ฉด ๋๋ค.


๐ก ํํ๋ณํ
์ฐ๊ฒฐ ๊ด๊ณ๊ฐ ๋ช ํํ์ง ์๊ฑฐ๋ ์ก์์ผ๋ก ์ธํด ์์ ์กฐ๊ฐ์ผ๋ก ๋์ด์ ธ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฐ๋ผ์ ํํ ๋ณํ์ ์ ์ฒด ๊ณต๊ฐ์ ์กฐ์ฌํด์ ์ฐ๊ฒฐ ๊ณผ์ ์์ด ๋ฐ๋ก ์ง์ ์ ๊ฒ์ถํ๋ค.
ํ ์ ์ด ๊ฐ์ง ์ ์๋ ์ง์ ์ ๋ง๊ธฐ์ ๊ธฐ์ธ๊ธฐ์ ์ ํธ์ ๊ณ ์ ์ํฌ ์ ์๋ค.
๋ฐ๋ผ์ [a-b] ๊ณต๊ฐ์ผ๋ก ๋ฐ๋๋ค๋ฉด ํ ์ ์ด ๊ฐ์ง ์ ์๋ ๋ชจ๋ ์ง์ ์ ํ๋์ ์ง์ ์ผ๋ก ํํํ ์ ์๋ค.

๊ทธ๋ฌ๋ ์ด๋ฅผ ๋ค์ [x-y] ๊ณต๊ฐ์ผ๋ก ๋ฐ๊ฟ ์ a, b์ ๋ฒ์๊ฐ ๋ฌดํ๋๊ฐ ๋ ์ ์๋ค. ์์์๋ ํ์๊ฐ ์กด์ฌํ๋ ๋์คํ๋ ์ด์ ์ธ๋ก, ๊ฐ๋ก ๋ฒ์๊ฐ ์ ํํ๊ธฐ์ ์์์๋ ๋ฒ์๊ฐ ์กด์ฌํ์ฌ ๋ฌดํ๋๊ฐ ๋๋ฉด ์ ๋๋ค. ๊ทธ๋์ ๋ฒ์๊ฐ ์ ํํ ๋ณ์๋ค์ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ์ ๋ณํํด์ผ ํ๋ค.

[x-y] ๊ณต๊ฐ์์ [θ-r] ๊ณต๊ฐ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ํํ ๊ณต๊ฐ์ผ๋ก์ ๋ณํ์ด๋ผ๊ณ ํ๋ค. ์ฆ ์ง์ ์์ ์๋ ์ ์ด ๊ณก์ ์ผ๋ก ๋ณํ๋ค.

ํํ ๋ณํ์ OpenCVํจ์๋ก๋ cv2.HoughLines๊ฐ ์๋ค.
cv2.HoughLines(img, rho, theta, threshold, lines, srn=0, stn=0, min_theta, max_theta)
์ธ์๋ ์๋์ ๊ฐ๋ค.
img: ์
๋ ฅ ์ด๋ฏธ์ง, 1 ์ฑ๋ ๋ฐ์ด๋๋ฆฌ ์ค์ผ์ผ
rho: ๊ฑฐ๋ฆฌ ์ธก์ ํด์๋, 0~1
theta: ๊ฐ๋, ๋ผ๋์ ๋จ์ (np.pi/0~180)
threshold: ์ง์ ์ผ๋ก ํ๋จํ ์ต์ํ์ ๋์ผ ๊ฐ์ (์์ ๊ฐ: ์ ํ๋ ๊ฐ์, ๊ฒ์ถ ๊ฐ์ ์ฆ๊ฐ / ํฐ ๊ฐ: ์ ํ๋ ์ฆ๊ฐ, ๊ฒ์ถ ๊ฐ์ ๊ฐ์)
lines: ๊ฒ์ถ ๊ฒฐ๊ณผ, N x 1 x 2 ๋ฐฐ์ด (r, Θ)
srn, stn: ๋ฉํฐ ์ค์ผ์ผ ํํ ๋ณํ์ ์ฌ์ฉ, ์ ๊ฒ์ถ์์๋ ์ฌ์ฉ ์ ํจ
min_theta, max_theta: ๊ฒ์ถ์ ์ํด ์ฌ์ฉํ ์ต๋, ์ต์ ๊ฐ๋
'Image processing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ด๋ฏธ์ง๋ฅผ ๋ถ๋๋ฝ๊ฒ ๊ทธ๋ฆฌ๊ณ ๋ ์นด๋กญ๊ฒ ๋ง๋ค์ด๋ณด๊ธฐ (0) | 2021.02.17 |
|---|---|
| ๊ทธ๋ ์ด ์ด๋ฏธ์ง๋ฅผ ๋ฐ๊ธฐ ์กฐ์ ํด๋ณด์ โ (0) | 2021.02.04 |
| ํ์์ ์๊ณต๊ฐ์ ๋ํด ์์๋ณด์ (0) | 2021.02.04 |