์๋ ํ์ธ์ AI์ผ์๋ฌ ์ค๋์ ๋๋ค ๐ค
์ค๋์ Canny edge detection์ ๋ํ ๊ธ์ ์์ฑํด๋ณด์์ต๋๋ค ๐
๊ทธ๋ผ Canny edge detection์ ๋ํด ์์๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๊ฒ ์ต๋๋ค ๐๐ป
The Canny edge detector is a popular algorithm for detecting edges in an image.
It is known for its ability to accurately detect edges while minimizing false detections.
- Computer Vision: Algorithms and Applications by Richard Szeliski

โ ๋ค์ด๊ฐ๋ฉฐ
์ปดํจํฐ ๋น์ ์ ๊ด์ฌ์ด ์๊ฑฐ๋ ๋จธ์ ๋ฌ๋ ์ค๋ฌด์๋ผ๋ฉด Canny edge detection ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๋ค์ด๋ณด์
จ์ ๊ฒ์
๋๋ค. ์ด๋ฏธ์ง์ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ์ ํํ๊ฒ ๊ฐ์งํ๊ธฐ ์ํด ๋ค์ํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ์ค๋์ Canny edge detection์ ์ ์, ์๋ ๋ฐฉ์, ์ ํ๋ฆฌ์ผ์ด์
๋ฑ Canny edge detection์ ๋ํด ์์์ผ ํ ๋ด์ฉ์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
โ Canny edge detection์ด๋ ๋ฌด์์ธ๊ฐ์?
Canny edge detection์ ์ด๋ฏธ์ง์ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ edge detection ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ 1986๋
์กด F. ์บ๋๊ฐ ๊ฐ๋ฐํ์ผ๋ฉฐ ์ค๋๋ ์๋ ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์บ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ํ์ ์ค๋ฅ๋ก ์ ํํ ์์ง ๋งต์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์์ง ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
โ Canny edge detection์ ์ด๋ป๊ฒ ์๋ํ๋์?
Canny edge detection ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ฒ ๋ค์ฏ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
1๏ธโฃ ๊ฐ์ฐ์์ smoothing: ์บ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ด๋ฏธ์ง์ ๊ฐ์ฐ์์ ํํฐ๋ฅผ ์ ์ฉํ์ฌ ๋
ธ์ด์ฆ๋ฅผ ํํํํ๋ ๊ฒ์
๋๋ค.
2๏ธโฃ ๊ทธ๋ผ๋ฐ์ด์
๊ณ์ฐ: ์ด ๋จ๊ณ์์๋ ์๋ฒจ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ๊ทธ๋ผ๋ฐ์ด์
์ ๊ณ์ฐํฉ๋๋ค. ์๋ฒจ ์ฐ์ฐ์๋ ๊ฐ๋จํ ๊ฐ์ฅ์๋ฆฌ ๊ฐ์ง ํํฐ๋ก ์ด๋ฏธ์ง์ x ๋ฐ y ๋ฐฉํฅ์ ๊ทธ๋ผ๋ฐ์ด์
์ ๊ณ์ฐํฉ๋๋ค.
3๏ธโฃ ๋น์ต๋ ์ต์ : ์ด ๋จ๊ณ์์๋ ์ต๋ ์์ง ์๋ต์ ํฌํจ๋์ง ์๋ ํฝ์
์ ์ ๊ฑฐํ์ฌ ์์ง๋ฅผ ์๊ฒ ๋ง๋ญ๋๋ค.
4๏ธโฃ ์ด์ค ์๊ณ๊ฐ: ์ด ๋จ๊ณ์์๋ ์์ง ์๋ต ๊ฐ์ ๋ฐ๋ผ ์์ง๋ฅผ ๊ฐํ ์์ง์ ์ฝํ ์์ง๋ก ๋ถ๋ฅํฉ๋๋ค. ๊ฐํ ์์ง๋ ์ ์ง๋๊ณ ์ฝํ ์์ง๋ ์ญ์ ๋ฉ๋๋ค.
5๏ธโฃ hysteresis๋ฅผ ํตํ ์์ง ์ถ์ : ๋ง์ง๋ง์ผ๋ก ๊ฐํ ์ฃ์ง์ ์ฐ๊ฒฐ๋ ์ฝํ ์ฃ์ง๋ ์ ์งํ๊ณ ๋๋จธ์ง ์ฝํ ์ฃ์ง๋ ์ญ์ ํฉ๋๋ค.
โ Canny edge detection์ ํ์ฉ ๋ถ์ผ
Canny edge detection๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ์ปดํจํฐ ๋น์ , ๋จธ์ ๋ฌ๋ ๋ถ์ผ์์ ๋ค์ํ๊ฒ ํ์ฉ๋๊ณ ์์ต๋๋ค. ๋ค์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์์ฉ ๋ถ์ผ ์ค ์ผ๋ถ์
๋๋ค:
1๏ธโฃ ๋ฌผ์ฒด ๊ฐ์ง: ์ด๋ฏธ์ง์์ ๋ฌผ์ฒด์ edge๋ฅผ ๊ฐ์งํ๊ธฐ ์ํ ๋ฌผ์ฒด ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ์ฐจ์ ๊ฐ์ง: Canny edge detection์ ์ฐจ์ ๊ฐ์ง ์์คํ
์์ ๋๋ก์ ์ฐจ์ edge๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
3๏ธโฃ ์๋ฃ ์ด๋ฏธ์ง ๋ถ์: ์๋ฃ ์ด๋ฏธ์ง ๋ถ์์์ ์ ์ฒด์ ์ฅ๊ธฐ ๋ฐ ๊ธฐํ ๊ตฌ์กฐ์ edge๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
4๏ธโฃ ๊ดํ ๋ฌธ์ ์ธ์: ๊ดํ ๋ฌธ์ ์ธ์ ์์คํ
์์ ํ
์คํธ์ ๋ฌธ์ edge๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
โ Canny edge detection์ ์ฅ๋จ์
๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Canny edge detection์๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
โผ ์ฅ์
โช ์ต์ํ์ ์ค๋ฅ๋ก ์ ํํ ์์ง ๋งต์ ์์ฑํฉ๋๋ค.
โช ๋ค์ํ ๊ฐ๋์ ์์ง๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค.
โช ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๋ค์ํ ์ด๋ฏธ์ง ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โผ ๋จ์
โช ์๊ณ ๋ฆฌ์ฆ์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ํฐ ์ด๋ฏธ์ง์์๋ ์๋๊ฐ ๋๋ฆด ์ ์์ต๋๋ค.
โช ์๊ณ ๋ฆฌ์ฆ์ ๋ ธ์ด์ฆ์ ๋ฏผ๊ฐํ๋ฉฐ ์๋ชป๋ edge๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
โช ์ด๋ฏธ์ง๋ง๋ค ์๊ณ๊ฐ์ ์กฐ์ ํด์ผ ํ๋ฏ๋ก ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์ต๋๋ค.
โ ๋ง์น๋ฉฐ
Canny edge detection์ ๋ค์ํ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์์ง ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ต์ํ์ ์ค๋ฅ๋ก ์ ํํ ์์ง ๋งต์ ์์ฑํ๋ฉฐ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ๋
ธ์ด์ฆ์ ๋ฏผ๊ฐํ ์ ์์ต๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์บ๋ ์์ง ๊ฐ์ง๋ ์ปดํจํฐ ๋น์ ๋ฐ ๋จธ์ ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์ฉํ ๋๊ตฌ์
๋๋ค.
โ FAQ
1๏ธโฃ Canny edge detection์ ์ด๋ค ์ฉ๋๋ก ์ฌ์ฉ๋๋์?
โช ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ์ปดํจํฐ ๋น์ , ๋จธ์ ๋ฌ๋ ๋ถ์ผ์์ ๋ค์ํ๊ฒ ํ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฌผ์ฒด ๊ฐ์ง, ์ฐจ์ ๊ฐ์ง, ์๋ฃ ์ด๋ฏธ์ง ๋ถ์ ๋ฐ ๊ดํ ๋ฌธ์ ์ธ์์ ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ Canny edge detection์ ๋ค๋ฅธ ์์ง ๋ํ
์
์๊ณ ๋ฆฌ์ฆ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฆ
๋๊น?
โช ์ต์ํ์ ์ค๋ฅ๋ก ์ ํํ ์์ง ๋งต์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ์์ง ๋ํ
์
์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ํ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๋นํด ๊ณ์ฐ ๋น์ฉ์ด ๋ ๋ง์ด ๋ญ๋๋ค.
3๏ธโฃ Canny edge detection์ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉํ ์ ์๋์?
โช ํน์ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ฌ์ฉ๋๋ ํ๋์จ์ด์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ์บ๋ ์ฃ์ง ๊ฐ์ง๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ผ๋ฏ๋ก ์ ์ ๋ ฅ ๋๋ฐ์ด์ค์ ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
4๏ธโฃ ๋ค๋ฅธ ์ด๋ฏธ์ง์ ์๊ณ๊ฐ์ ์กฐ์ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋์?
โช ์๊ณ๊ฐ์ ๋ค์ํ ๊ฐ์ผ๋ก ์คํํ๊ณ ์ถ๋ ฅ์ ๊ด์ฐฐํ์ฌ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ํ ์ ์ํ ์๊ณ๊ฐ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์๊ณ๊ฐ์ ์๋์ผ๋ก ์กฐ์ ํ ์๋ ์์ต๋๋ค.
5๏ธโฃ Canny edge detection์ ๋น๋์ค ์ฒ๋ฆฌ์ ์ฌ์ฉํ ์ ์๋์?
โช ๋ค, ์บ๋ ์์ง ๊ฐ์ง๋ฅผ ๋์์ ์ฒ๋ฆฌ์ ์ฌ์ฉํ ์ ์์ง๋ง ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. ์ค์๊ฐ ๋น๋์ค ์ฒ๋ฆฌ์๋ ๋ณด๋ค ํจ์จ์ ์ธ ์์ง ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ ์ ์์ต๋๋ค.
๐ป Code Example
import cv2
import numpy as np
# Load image and convert to grayscale
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Apply Gaussian blur to reduce noise
blur = cv2.GaussianBlur(gray, (3,3), 0)
# Compute gradients using Sobel operator
gx = cv2.Sobel(blur, cv2.CV_64F, 1, 0, ksize=3)
gy = cv2.Sobel(blur, cv2.CV_64F, 0, 1, ksize=3)
# Compute gradient magnitude and direction
mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)
# Apply non-maximum suppression to thin edges
mag_max = np.max(mag)
mag[mag < 0.1 * mag_max] = 0
mag[mag > 0.3 * mag_max] = 255
# Apply hysteresis thresholding to connect edges
edges = cv2.Canny(mag, 50, 150)
# Display original image and edges
cv2.imshow("Original Image", img)
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
'๐ค AI์ผ์๋ฌ ์ค๋์ AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋จธ์ ๋น์ (Machine Vision)์ด๋? (0) | 2023.03.25 |
---|---|
Gradient Descent(๊ฒฝ์ฌํ๊ฐ๋ฒ)์ด๋? (0) | 2023.03.24 |
์ด๋ฏธ์ง๋ท(ImageNet) ์ด๋? (0) | 2023.03.23 |
๋ฅ ๋ฌ๋(Deep Learning) ์ด๋ (0) | 2023.03.21 |
๋ก์ง์คํฑ ํ๊ท(Logistic Regression) (0) | 2023.03.18 |
๋๊ธ