-
νν λ³ν (Hough Transformation)AI\ML\DL/Computer Vision 2023. 8. 9. 23:07λ°μν
β£
νν λ³νμ λμμ μμ½νλ©΄ λ€μκ³Ό κ°λ€. μ λ ₯λ κ°κ°μ μ $(x_{i},y_{i})$ μ λν΄ $(a,b)$ 곡κ°μ μ§μ $b=-ax_{i}+y_{i}$λ₯Ό κ·Έλ¦° λ€μ μ΄λ€ μ§μ μ΄ λ§λλ μ $(a,b)$λ₯Ό μ°Ύμ $a$λ₯Ό κΈ°μΈκΈ°, $b$λ₯Ό $y$μ νΈμΌλ‘ μ·¨νλ€. λ§λλ μ μ ν¬νλ‘ μμλΈλ€.
"ν¬ν"μ μλ―Έ?
κ°κ°μ μ§μ μ μμ μ΄ μ§λλ μ μ 1λ§νΌμ© ν¬νλ₯Ό νλ€. κ²°κ΅ μ§μ μ΄ μ§λμ§ μλ κ³³μ 0, μ§μ μ΄ μ§λλ κ³³μ 1ν, λ μ§μ μ΄ λ§λλ κ³³μ 2νλ₯Ό λ°λλ€.
νν λ³νμ μ리 μμ μ€λͺ ν νν λ³νμ μ΄μμ μΈ μν©μ κ°μ νλ€. μ€μ μν©μμ ꡬνν λλ λͺ κ°μ§ μ¬νμ μ μ€ν κ³ λ €ν΄μΌ νλ€.
1) μ κ·Έλ¦Όμμλ λ μ λ§ κ³ λ €νλλ° νμ€μμλ λ§μ μ μ΄ μκ³ μ λ€μ΄ μλ²½ν μΌμ§μ μ μ΄λ£¨μ§ λͺ»ν¨
-> μ΄ λ¬Έμ λ (a,b)곡κ°μ μ΄μ°ννμ¬ ν΄κ²°νλ€. μλ₯Ό λ€μ΄ aμ bμ λ²μλ₯Ό -1000~1000μΌλ‘ μ€μ νκ³ κ°κ°μ ν¬κΈ°κ° 20μΈ κ΅¬κ° 50κ°λ‘ λλμ΄ μΉΈμ΄ 50x50=2500 κ°μΈ 2μ°¨μ λμ λ°°μ΄ vλ₯Ό λ§λ λ€. vλ₯Ό 0μΌλ‘ μ΄κΈ°νν λ€μ (a,b)곡κ°μμ κ°κ°μ μ§μ μ μμ μ΄ μ§λλ λͺ¨λ μΉΈμ 1λ§νΌμ© ν¬ννλ€.2) ν¬νκ° μ΄λ£¨μ΄μ§ λμ λ°°μ΄μ μ‘μμ΄ λ§λ€.
-> μ΄ λ¬Έμ λ λΉμ΅λ μ΅μ λ₯Ό μ¬μ©νλ€. μ§μ μ΅λμ (κ·Ήμ , extreme point)λ§ λ¨κΈ°κ³ μκ³κ°μ μ€μ νμ¬ μΉΈμ μ΅μ’ μ ννλ€.
λΉμ΅λ μ΅μ λ‘ μ°Ύμ κ·Ήμ 2κ°. κ·Έλ¦Όμμ λΉμ΅λ μ΅μ λ‘ μ μ΄ 3κ° λ¨μλλ° μκ³κ°μ 5λ‘ μ€μ νλ©΄ λ ΈλμμΌλ‘ μΉ ν μ 2κ°λ§ μ΅μ’ μ νλλ€. νν λ³νμ μ§μ λΏ μλλΌ μ΄λ‘ μ μΌλ‘λ μ΄λ€ λνμ΄λΌλ κ²μΆν μ μλ€. μλ₯Ό λ€μ΄ μμ κ²μΆνλ €λ©΄ μμ λ°©μ μμ μ΄μ©νλ€. μ΄ μμ aμ b,rμ ν¬ν¨νλ―λ‘ (a,b,r) 3μ°¨μ λμ λ°°μ΄μ μ¬μ©ν΄μΌ νλ€.
$$(x-a)^{2}+(y-b)^{2}=r^{2}$$
νν λ³ν νμ©
μμ κ²μΆνλ νν λ³νμΌλ‘ μ¬κ³Ό λ무 μμμμ μ¬κ³Όλ₯Ό κ²μΆνλ νλ‘κ·Έλ¨μ λ§λ€μ΄ 보μ.
cv.HougCircles ν¨μλ λͺ μ μμμμ μμ κ²μΆν΄ μ€μ¬κ³Ό λ°μ§λ¦μ μ μ₯ν 리μ€νΈλ₯Ό λ°νλ€.
λ λ²μ§Έ μΈμλ μ¬λ¬ λ³ν μκ³ λ¦¬μ¦ μ€μ νλλ₯Ό μ§μ νλλ° cv.HOUGH_GRADIENTλ μμ§ λ°©ν₯ μ 보λ₯Ό μΆκ°λ‘ μ¬μ©νλ λ°©λ²μ΄λ€.
μΈ λ²μ§Έ μΈμλ λμ λ°°μ΄μ ν¬κΈ°λ₯Ό μ§μ νλλ° 1λ‘ μ€μ νλ©΄ μ λ ₯ μμκ³Ό κ°μ ν¬κΈ°λ₯Ό μ¬μ©νλ€.
λ€ λ²μ§Έ μΈμλ μ μ¬μ΄μ μ΅μ 거리λ₯Ό μ§μ νλλ° μμμλ‘ λ§μ μμ΄ κ²μΆλλ€. λ€μ― λ²μ§Έ μΈμλ μΊλ μμ§ μκ³ λ¦¬μ¦μ΄ μ¬μ©νλ $T_{high}$λ€. μ¬μ― λ²μ§Έ μΈμλ λΉμ΅λ μ΅μ λ₯Ό μ μ©ν λ μ°λ μκ³κ°μ΄λ€. μΌκ³±λ²μ§Έμ μ¬λλ²μ§Έλ μμ μ΅μμ μ΅λ λ°μ§λ¦μ μ§μ νλ€.
import cv2 import cv2 as cv img = cv.imread('apples.jpg') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) apples = cv.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100, param1=100, param2=40, minRadius=15, maxRadius=60) for i in apples[0]: cv.circle(img, (int(i[0]), int(i[1])), int(i[2]), (255, 0, 0), 2) cv.imshow('Apple detection', img) cv.waitKey() cv.destroyAllWindows()
μ€ν κ²°κ³Ό μ¬κ³Όλ₯Ό μ λλ‘ μ°Ύμ κ²½μ°λ μμ§λ§, μλ κ³³μ κ²μΆν κ±°μ§ κΈμ κ³Ό, μλλ° λμΉ κ±°μ§ λΆμ λ μλ€.
λν μμΉκ° νμ΄μ§ κ²½μ°λ μλ€. HoughCircles ν¨μμ μΈμκ°μ μ΄λ¦¬μ 리 λ³κ²½νλ©° μ€νμ΄ νμνλ€.
'AI\ML\DL > Computer Vision' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
SLIC μκ³ λ¦¬μ¦, Superpixel segmentation (0) 2023.08.11 Line detection, findContours(), drawContours() (0) 2023.08.08 μμ§ κ²μΆ(2) - Canny edge detection (0) 2023.08.08 μμ§ κ²μΆ(1) - 1μ°¨Β·2μ°¨ λ―ΈλΆ, Prewitt, Sobel (0) 2023.08.06