이미지 블러링은 이미지를 로우 패스 필터 커널로 컨벌루션하는 것입니다.
이미지에서 고주파인 노이즈가 흐려지게 됩니다. 이때 같은 고주파인 선도 같이 흐려지게 됩니다.
마지막 업데이트 - 2018. 10. 11
다음 OpenCV Python 튜토리얼을 참고하여 강좌를 비정기적로 포스팅하고 있습니다. https://docs.opencv.org/3.4.3/d6/d00/tutorial_py_root.html |
컨볼루션(Convolution)
이미지에 커널(마스크)을 컨볼루션하여 블러닝(흐리게), 샤프닝(선명하게) 등의 처리를 할 수 있습니다.
컨볼루션 계산은 커널과 이미지 상에 대응되는 값끼리 곱한 후, 모두 더하여 구해집니다. 이 결과값을 결과 영상의 현재 위치에 기록하면 됩니다.
img_output(1,1) = img_input(0,0) x mask(0,0) + img_input(0,1) x mask(0,1)
+ img_input(0,2) x mask(0,2) + img_input(1,0) x mask(1,0)
+ img_input(1,1) x mask(1,1) + img_input(1,2) x mask(1,2)
+ img_input(2,0) x mask(2,0) + img_input(2,1) x mask(2,1)
+ img_input(2,2) x mask(2,2)
OpenCV에서는 컨볼루션을 쉽게 할 수 있도록 filter2D 함수를 제공합니다. 커널만 아래처럼 정의해주면 쉽게 계산을 할 수 있습니다.
다음 커널은 입력이미지의 현재 위치에서 5 x 5 범위의 주변 픽셀 평균을 해서 결과 이미지의 같은 위치의 값으로 합니다.
실행 결과 다음처럼 이미지가 흐려지게 됩니다.
테스트에 사용한 이미지와 전체 소스 코드입니다.
import numpy as np |
평균 블러링(Averaging Blurring)
커널을 만들어서 컨볼루션하는 번거로움을 줄이기 위해 OpenCV에서는 블러링하는 함수를 제공합니다.
앞에서 살펴본 5 x 5 범위내 이웃 픽셀의 평균을 결과 이미지의 픽셀값으로하는 평균 블러링을 하는 blur함수가 있습니다.
blur = cv2.blur(img,(5,5)) |
결과는 앞에서 살펴본 것과 동일합니다.
테스트에 사용한 전체 소스 코드입니다.
import cv2 |
가우시안 블러링(Gaussian Blurring)
모든 픽셀에 똑같은 가중치를 부여했던 평균 블러링과 달리 가우시안 블러링은 중심에 있는 픽셀에 높은 가중치를 부여합니다.
세번째 아규먼트를 0으로 하면 지정한 커널 크기(5 x 5)에 맞추어 시그마를 계산해서 사용합니다.
blur = cv2.GaussianBlur(img, (5,5), 0) |
평균 블러링(왼쪽)은 에지 포함해서 전체적으로 블러링된 반면 가우시안 블러링(오른쪽)은 에지가 남아있는 상태에서 블러링이 이루어졌습니다.
캐니(Canny)로 에지를 검출하기전에 노이즈를 제거하기 위해 사용됩니다.
테스트에 사용한 전체 소스코드입니다.
import cv2 |
미디안 블러링(Median Blurring)
관심화소 주변으로 지정한 커널 크기( 5 x 5) 내의 픽셀을 크기순으로 정렬한 후 중간값을 뽑아서 픽셀값으로 사용합니다.
median = cv2.medianBlur(img, 5) |
무작위 노이즈를 제거하는데 효과적입니다. 하지만 에지가 있는 이미지의 경우에는 결과 이미지에서 에지가 사라질 수 있습니다.
테스트에 사용한 이미지와 전체 코드입니다.
import cv2 |
Bilateral Filtering
에지를 보존하면서 노이즈를 감소시킬수 있는 방법입니다.
결과 이미지에서 질감있는 부분만 블러링 되고 에지 부분은 보존되었습니다.
테스트에 사용한 이미지와 전체 소스 코드입니다.
import cv2 |
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV Python 강좌 - 에지 검출( Edge detection ) (3) | 2018.10.16 |
---|---|
OpenCV Python 강좌 - 모폴로지 연산 (Morphological Operations) (0) | 2018.10.14 |
OpenCV Python 강좌 - 영상 이진화(binarization, thresholding) (2) | 2018.10.05 |
OpenCV Python 강좌 - Perspective Transformation (23) | 2018.10.05 |
OpenCV Python 강좌 - Affine Transformation (0) | 2018.10.05 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!