์ด์ ์ ์์ฑํ ์ด์ง ๋ชจํด๋ก์ง์ ๋ช ์ ๋ชจํด๋ก์ง์์ ์ฌ์ฉํ๋ ํฝ์ฐฝ, ์นจ์, ์ด๊ธฐ, ๋ซ๊ธฐ ์ ๋ํ ์ฝ๋์ด๋ค.
openCV๋ฅผ ์ฌ์ฉํ๋ค.
Code
img = cv2.imread('roopy.jpg', cv2.IMREAD_GRAYSCALE)
ํ์ผ๋ก๋ถํฐ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , ๊ทธ๋ ์ด์ค์ผ์ผ๋ก ๋ณํํ์ฌ ์ฝ์ด์จ๋ค.
kernel = np.ones((5, 5), np.uint8)
5x5 ํฌ๊ธฐ์ 1๋ก ์ฑ์์ง ๋งคํธ๋ฆญ์ค๋ฅผ ์์ฑํ๋ค. ๋ชจํด๋ก์ง ์ฐ์ฐ์์ ์ฌ์ฉ๋๋ ๊ตฌ์กฐ ์์์ด๋ค.
erosion = cv2.erode(img, kernel, iterations=1)
cv2.erode() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ์์ถ ์ฐ์ฐ์ ์ ์ฉํ๋ค. ์ด๋ฏธ์ง์ ๋ฐ์ ์์ญ์ ์ถ์์ํค๋ ์ฐ์ฐ์ ์ํํ๋ค.
erode()ํจ์๋ erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])์ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.
dilates = cv2.dilate(img, kernel, iterations=1)
cv2.dilate() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์ ํฝ์ฐฝ ์ฐ์ฐ์ ์ ์ฉํ๋ค. ์ด๋ฏธ์ง์ ๋ฐ์ ์์ญ์ ํ์ฅ์ํค๋ ์ฐ์ฐ์ ์ํํ๋ค.
dilate() ํจ์๋ dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])์ ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.
ret, img_th = cv2.threshold(img, 110, 255, cv2.THRESH_BINARY)
img_res = cv2.morphologyEx(img_th, cv2.MORPH_CLOSE, kernel)
cv2.threshold() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ด์งํํ๋ค.
๊ทธ ๋ค์ cv2.morphologyEx() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆผ ์ฐ์ฐ์ ์ํํ๋ค.
plt.subplot(141),plt.imshow(img),plt.title('original')
plt.subplot(142),plt.imshow(erosion),plt.title('erosion')
plt.subplot(143),plt.imshow(dilates),plt.title('dilate')
plt.subplot(144),plt.imshow(img_res),plt.title('img_res')
plt.show()
Matplotlib์ plt.subplot()์ ์ฌ์ฉํ์ฌ ์๋ณธ ์ด๋ฏธ์ง, ์์ถ ์ฐ์ฐ, ํฝ์ฐฝ ์ฐ์ฐ, ๊ทธ๋ฆฌ๊ณ ๋ชจํด๋ก์ง ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํ๋ค.
์ ์ฒด ์ฝ๋ -> github
https://github.com/mcrkgus/Computer-Vision/blob/main/morphology.py