Gradient Filter (code)
๋ณธ ๊ธ์ 2020-2ํ๊ธฐ โ์ปดํจํฐ ๋น์ โ ์์ ์ ๋ฃ๊ณ , ์ค์ค๋ก ํ์ตํ๋ฉด์ ๊ฐ์ธ์ ์ธ ์ฉ๋๋ก ์ ๋ฆฌํ ๊ฒ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
์์ ๋ด์ฉ ์ค, Convolution filter๋ฅผ ์ด์ฉํด ์ด๋ฏธ์ง์ Edge๋ฅผ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก Gradient filter๊ฐ ์๊ฐ๋์๋ค.
์ค์ ๋ก ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ์๊ธฐ๋์ง ํฅ๋ฏธ๊ฐ ์๊ฒจ ์ง์ ์ฝ๋๋ก ํ์ธํด๋ณด์.
Gradient filter๋ openCV
์ ํจ์๋ค์ ์ด์ฉํด ์ ๋ง ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค!
๋จผ์ ์ ์ฒด ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
import cv2
IMG_PATH = "origin.png"
if __name__ == "__main__":
# load image
img = cv2.imread(IMG_PATH)
# make image gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# take gradient
## Gaussian blurring
blurred = cv2.GaussianBlur(img, (3, 3), 0)
## sobel filter
sobelX = cv2.Sobel(blurred, cv2.CV_8U, 1, 0, ksize=3)
sobelY = cv2.Sobel(blurred, cv2.CV_8U, 0, 1, ksize=3)
## merge two gradients
gradient = sobelX + sobelY
cv2.imshow("Gradient Image", gradient)
cv2.waitKey()
# cv2.imwrite("Gradient Image", gradient)
์ฝ๋์ ๋ก์ง์ ํ๋์ฉ ์ดํด๋ณด์.
์ด๋ฏธ์ง์ Edge๋ง ์ดํด๋ณผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ RGB ์ด๋ฏธ์ง๋ฅผ gray ์ด๋ฏธ์ง๋ก ๋ฐ๊ฟ์ค๋ค.
# make image gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
๋จผ์ ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ Gaussian ํํฐ๋ฅผ ์ ์ฉํด blurringํ๋ค. Gaussian ํํฐ๋ ์ ์ํ๋ฉด Noise๋ฅผ ์ ๊ฑฐํ ์ ์์ด, ๋ niceํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
## Gaussian blurring
blurred = cv2.GaussianBlur(img, (3, 3), 0)
์ด์ ์ด๋ฏธ์ง์ Gradient๋ฅผ ์ ์ฉํ๋ ๋ถ๋ถ์ด๋ค. Gradient filter๋ฅผ Sobel filter๋ผ๊ณ ๋ ํ๋๋ฐ, openCV
์ cv2.Sobel()
ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค!
## sobel filter
sobelX = cv2.Sobel(blurred, cv2.CV_8U, 1, 0, ksize=3)
sobelY = cv2.Sobel(blurred, cv2.CV_8U, 0, 1, ksize=3)
sobelX
๋ ์ํ ์ฑ๋ถ์ ์ ๊ฑฐํ ์ด๋ฏธ์ง๋ก, ์์ง Edge๋ฅผ ๊ฒ์ถํ๋ค. ๋ฐ๋๋ก sobelY
๋ ์์ง ์ฑ๋ถ์ ์ ๊ฑฐํ ์ด๋ฏธ์ง๋ก, ์ํ Edge๋ฅผ ๊ฒ์ถํ๋ค.
์ด์ ์์ง/์ํ Edge๋ฅผ ๊ฒ์ถํ ๊ฒ์ ํฉ์ณ์ฃผ๋ฉด ๋๋ค.
## merge two gradients
gradient = sobelX + sobelY
์ถ๋ ฅ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด cv2.Sobel()
๊ฐ์ openCV
์ ํจ์๋ค์ ์ ์ด์ฉํ๋ฉด ์ด๋ฏธ์ง์ Edge๋ฅผ ์ฝ๊ฒ ๊ฒ์ถํ ์ ์๋ค.
์์ PPT์ ์๋ ์ฌ์ง์ ๊ฒฐ๊ณผ๊ฐ ํ์ ๋ฐฐ๊ฒฝ์ด๋๋ฐ, ๋ณธ์ธ์ ๊ฒฐ๊ณผ๋ ๊ฒ์ ๋ฐฐ๊ฒฝ์ผ๋ก ์ถ๋ ฅ์ด ๋๋ค. ์๋ง ์ ์ฒ๋ฆฌ ๋ฐฉ์์ด ์กฐ๊ธ ๋ค๋ฅธ ๊ฒ ๊ฐ๋ค!
์ฌ์ฌํด์ ๋ณธ์ธ ๋ก๊ณ ์๋ ์ ์ฉํด๋ดค๋ค ใ ใ