๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[v0.22]์์์ฒ๋ฆฌ_๋ชจํด๋ก์ง(Morphology) ์ฐ์ฐ ๋ณธ๋ฌธ
[v0.22]์์์ฒ๋ฆฌ_๋ชจํด๋ก์ง(Morphology) ์ฐ์ฐ
์ง์ง์ํ์นด 2022. 1. 12. 00:34220112 ์์ฑ
<๋ณธ ๋ธ๋ก๊ทธ๋ ๊ทํ์ด ์์ฌ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค>
OpenCV - 20. ์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋(Image Pyramid)
์ด๋ฒ ํฌ์คํ ์์๋ ์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์ญ์ 'ํ์ด์ฌ์ผ๋ก ๋ง๋๋ OpenCV ํ๋ก์ ํธ(์ด์ธ์ฐ ์ )'๋ฅผ ์ ๋ฆฌํ ๊ฒ์์ ๋ฐํ๋๋ค. ์ฝ๋: github.com/BaekKyunShin/OpenCV_Project_P
bkshin.tistory.com
์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋(image pyramid)
: ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ํผ๋ผ๋ฏธ๋์ฒ๋ผ ๋จ๊ณ์ ์ผ๋ก ํ๋ํ๊ฑฐ๋ ์ถ์ํ๋ ์์
1. ๊ฐ์ฐ์์ ํผ๋ผ๋ฏธ๋ (gaussian pyramid)
: ๊ฐ์ฐ์์ ํํฐ๋ฅผ ์ ์ฉํ ๋ค ์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋๋ฅผ ๊ตฌ์ฑ
dst = cv2.pyrDown(src, dst, dstsize, borderType)
: ๊ฐ์ฐ์์ ํํฐ๋ฅผ ์ ์ฉํ ๋ค ๋ชจ๋ ์ง์ ํ๊ณผ ์ด์ ์ญ์ ํด ์ ๋ ฅ ์์์ 1/4 ํฌ๊ธฐ๋ก ์ถ์
dst = cv2.pyrUp(src, dst, dstsize, borderType)
: 0์ผ๋ก ์ฑ์์ง ์ง์ ํ๊ณผ ์ด์ ์๋กญ๊ฒ ์ฝ์ ํ๊ณ ๊ฐ์ฐ์์ ํํฐ๋ฅผ ์ ์ฉํด
์ฃผ๋ณ ํฝ์ ๊ณผ ๋น์ทํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ (ํฌ๊ธฐ๋ 4๋ฐฐ ํ๋)
- src : ์ ๋ ฅ ์์
- dst : ๊ฒฐ๊ณผ ์์
- distsize : ๊ฒฐ๊ณผ ์์ ํฌ๊ธฐ
- borderType : ์ธ๊ณฝ ๋ณด์ ๋ฐฉ์
# ๊ฐ์ฐ์์ ์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋
import cv2
img = cv2.imread('img/night.jpg')
# ๊ฐ์ฐ์์ ์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋ ์ถ์
smaller = cv2.pyrDown(img) # img x 1/4
# ๊ฐ์ฐ์์ ์ด๋ฏธ์ง ํผ๋ผ๋ฏธ๋ ํ๋
bigger = cv2.pyrUp(img) # img x 4
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
cv2.imshow('img', img)
cv2.imshow('pyrDown', smaller)
cv2.imshow('pyrUp', bigger)
cv2.waitKey(0)
cv2.destroyAllWindows()
- ํ๋, ์ถ์ ์ด๋ฏธ์ง์ ํ์ง์ด ๊ตฌ์ง๊ตฌ์ง~
2. ๋ผํ๋ผ์์ ํผ๋ผ๋ฏธ๋ (laplacian pyramid)
: cv2.pyUp(), cv2.pyDown() ์ ํ์ง ๋จ์ด์ง๋ ๋ฌธ์ ์ ์ ๊ฐ์ ํ ๋ฐฉ์
# ๋ผํ๋ผ์์ ํผ๋ผ๋ฏธ๋๋ก ์์ ๋ณต์
import cv2
import numpy as np
img = cv2.imread('img/taekwonv1.jpg')
# ์๋ณธ ์์์ ๊ฐ์ฐ์์ ํผ๋ผ๋ฏธ๋๋ก ์ถ์
smaller = cv2.pyrDown(img)
# ์ถ์ํ ์์์ ๊ฐ์ฐ์์ ํผ๋ผ๋ฏธ๋๋ก ํ๋
bigger = cv2.pyrUp(smaller)
# ์๋ณธ์์ ํ๋ํ ์์ ๋นผ๊ธฐ
laplacian = cv2.subtract(img, bigger)
# ํ๋ ํ ์์์ ๋ผํ๋ผ์์ ์์ ๋ํด์ ๋ณต์
restored = bigger + laplacian
# ๊ฒฐ๊ณผ ์ถ๋ ฅ (์๋ณธ ์์, ๋ผํ๋ผ์์, ํ๋ ์์, ๋ณต์ ์์)
merged = np.hstack((img, laplacian, bigger, restored))
cv2.imshow('Laplacian Pyramid', merged)
cv2.waitKey(0)
cv2.destroyAllWindows()
- ๋ผํ๋ผ์์ ํผ๋ผ๋ฏธ๋ = ( cv2.pyUp() ์ด๋ฏธ์ง - ์๋ณธ ์ด๋ฏธ์ง ) + bigger ์ด๋ฏธ์ง (cv2.pyUp())
- ๋ผํ๋ผ์์ ์ด๋ฏธ์ง ํฌ๋ฏธํ์ง๋ง ๊ฒฝ๊ณ ์ฝ๊ฐ ๋ณด์ ๋๋,,
- ํ๋(cv2.pyUp()) ์์์ ํ์ง ๋จ์ด์ง๊ณ
- ๋ณต์(๋ผํ๋ผ์์) ์์์ ํ์ง ๋ณต๊ตฌ!
'๐ฉโ๐ป IoT (Embedded) > Image Processing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[v0.24]์์์ฒ๋ฆฌ_์ปจํฌ์ด (์์๋ถํ ๋ฐฉ๋ฒ) (0) | 2022.01.12 |
---|---|
[v0.23]์์์ฒ๋ฆฌ_ ๋ธ๋ฌ๋งํ์ฉ & ๋ชจ์์ดํฌ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ์ค์ผ์น ํจ๊ณผ (0) | 2022.01.12 |
[v0.21]์์์ฒ๋ฆฌ_๋ชจํด๋ก์ง(Morphology) ์ฐ์ฐ (0) | 2022.01.11 |
[v0.20]์์์ฒ๋ฆฌ_๊ฒฝ๊ณ ๊ฒ์ถ (0) | 2022.01.11 |
[v0.19]์์์ฒ๋ฆฌ_ ํํฐ์ ์ปจ๋ณผ๋ฃจ์ ์ฐ์ฐ, ๋ธ๋ฌ๋ง (0) | 2022.01.08 |