영상의 특정 좌표 값을 주변 픽셀 값들의 산술 평균으로 설정
픽셀들 간의 그레이스케일 값 변화가 줄어들어 날카로운 에지가 무뎌지고, 영상에 있는 잡음의 영향이 사라지는 효과
실제 영상에 평균 값 필터를 적용한 결과
마스크 크기가 커질수록 평균 값 필터 결과가 더욱 부드러워지나 TRADE OFF 관계로 더 많은 연산량이 필요하다.
#OpenCV 평균 값 필터링 함수
/*
src : 입력 영상
ksize : 평균값 필터 크기. (width, height) 형태의 튜플
dst : 결과 영상, 입력 영상과 같은 크기 & 같은 타입.
*/
cv2.blur(src. ksize, dst=None, anchor=None, borderType=None) -> dst
평균값 필터에 의한 블러링의 단점
필터링 대상 위치에서 가까있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치를 사용하여 평균을 계산 멀리 있는 픽셀의 영향을 많이 받을 수 있다.
(1차원) 가우시안 함수 (Gaussian function)
2차원 가우시안 함수
- 2차원 가우시안 필터마스크 (𝜎 = 1.0)
필터 마스크 크기: 8𝜎 + 1 또는 6𝜎 + 1
#OpenCV 가우시안 필터링 함수
/*
src : 입력 영상. 각 채널 별로 처리됨.
dst : 출력 영상. src와 같은 크기, 같은 타입.
ksize : 가우시안 커널 크기. (0, 0)을 지정하면 sigma 값에 의해 자동 결정됨.
sigmaX : x 방향 sigma
sigmaY : y 방향 sigma. 0 이면 sigmaX와 같게 설정
borderType: 가장 자리 픽셀 확장 방식.
*/
cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None) -> dst
다양한 크기의 sigma를 사용한 가우시안 필터링 실행 결과
날카롭지 않은(unsharp) 영상, 즉, 부드러워진 영상을 이용하여 날카로운 영상을 생성
#그레이 영상에 적용하기
import sys
import numpy as np
import cv2
src = cv2.imread('rose.bmp', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
blr = cv2.GaussianBlur(src, (0, 0), 2)
dst = np.clip(2.0*src - blr, 0, 255).astype(np.uint8)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
#컬러 영상에 적용하기
import sys
import numpy as np
import cv2
src = cv2.imread('rose.bmp')
if src is None:
print('Image load failed!')
sys.exit()
src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
src_f = src_ycrcb[:, :, 0].astype(np.float32)
blr = cv2.GaussianBlur(src_f, (0, 0), 2.0)
src_ycrcb[:, :, 0] = np.clip(2. * src_f - blr, 0, 255).astype(np.uint8)
dst = cv2.cvtColor(src_ycrcb, cv2.COLOR_YCrCb2BGR)
cv2.imshow('src', src)
cv2.imshow('dst', dst)
cv2.waitKey()
cv2.destroyAllWindows()
영상의 픽셀값에 추가되는 원치 않는 형태의 신호
잡음의 종의 종류 : 가우시안 잡음(Gaussian noise), 소금&후츠 잡음(Salt&Pepper)
주변 픽셀들의 값들을 정렬하여 그 중앙값(median)으로 픽셀 값을 대체 소금-후추 잡음 제거에 효과적dlek.
#OpenCV 미디언 필터링 함수
/*
src : 입력 영상. 각 채널 별로 처리됨
ksize : 커널 크기. 1보다 큰 홀수를 지정.
dst : 출력 영상. src와 같은 크기, 같은 타입.
*/
cv2.medianBlur(src, ksize, dst=None) -> dst
cv2.medianBlur(src, 3)
가우시안 잡음 제거에는 가우시간 필터가 효과적이다.
- 양방향 필터(Bilateral filter)
엣지 보존 잡음 제거 필터(edge-preserving noise removal filter)의 하나로 평균 값 필터 또는 가우시안 필터는 에지 부근에서도 픽셀 값을 평탄하게 만드는 단점이 있음 기준 픽셀과 이웃픽셀과의 거리, 그리고 픽셀 값의 차이를 함께 고려하여 블러링 정도를 조절한다.
(일반적인) 가우시간 필터링: 영상 전체에서 blurring을 적용한다.
양방향 필터 : 엣지가 아닌 부분에서만 blurring을 적용한다.
#OpenCV 양방향 필터링 함수
/*
src : 입력 영상. 8비트 또는 실수형, 1채널 또는 3채널.
d: 필터링에 사용될 이웃 픽셀의 거리(지름). 음수(-1)를 입력하면 sigmaSpace 값에 의해 자동 결정됨.
sigmaColor : 색 공간에서 필터의 표준 편차
sigmaSpace : 좌표 공간에서 필터의 표준 편차
dst : 출력 영상. src와 같은 크기, 같은 타입.
borderType : 가장자리 픽셀 처리 방식
*/
cv2.bilateralFilter(src, d sigmaColor, sigmaSpace, dst=None, borderType=None) -> dst
src = cv2.imread('lenna.bmp')
dst = cv2.bilateralFilter(src, -1, 10, 5)
영상의 이진화(Binarization) (0) | 2021.05.25 |
---|---|
영상의 필터링 (0) | 2021.05.25 |
히스토그램 역투영(Histogram backprojection) (0) | 2021.05.25 |
특정 색상 영역 추출 하기 (0) | 2021.05.25 |
히스토그램 평활화(Histogram equalization) (0) | 2021.05.25 |
댓글 영역