Image Filtering
고주파를 제거하면 Blur처리가 되며, 저주파를 제거하면 대상의 영역을 확인할 수 있습니다.
Low-pass filter(LPF)와 High-pass filter(HPF)를 이용하여, LPF를 적용하면 노이즈제거나 blur처리를 할 수 있으며, HPF를 적용하면 경계선을 찾을 수 있습니다.
OpenCV에서는 cv2.filter2D()
함수를 이용하여 이미지에 kernel(filter)를 적용하여 이미지를 Filtering할 수 있습니다. kernel은 행렬을 의미하는데 kernel의 크기가 크면 이미지 전체가 blur처리가 많이 됩니다.
Filter가 적용되는 방법은
- 이미지의 각 pixel에 kernel을 적용합니다.
- 위 kernel을 예로들면 각 pixel에 5X5윈도우를 올려 놓고, 그 영역안에 포함되는 값의 Sum을 한 후에 25로 나눕니다.
- 그 결과는 해당 윈도우 영역안의 평균값이 되고, 그 값을 해당 pixel에 적용하는 방식입니다.
Image Blurring
Averaging
cv2.blur()
또는 cv2.boxFilter()
함수로 적용할 수 있습니다.
cv2.blur(src, ksize)
Gaussian Filtering
kernel의 사이즈는 양수이면서 홀수로 지정을 해야 합니다. 이미지의 Gaussian Noise (전체적으로 밀도가 동일한 노이즈, 백색노이즈)를 제거하는 데 가장 효과적입니다.
cv2.GaussianBlur(img, ksize, sigmaX)
- img – Chennel수는 상관없으나, depth(Data Type)은 CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.
- ksize – (width, height) 형태의 kernel size. width와 height는 서로 다를 수 있지만, 양수의 홀수로 지정해야 함.
- sigmaX – Gaussian kernel standard deviation in X direction.
Median Filtering
중간값을 선택하여 적용합니다. salt-and-pepper noise 제거에 가장 효과적입니다.
cv2.medianBlur(src, ksize)
Bilateral Filtering
Bilateral Filtering(양방향 필터)은 경계선을 유지하면서 Gaussian Blur처리를 해주는 방법입니다.
Gaussian 필터를 적용하고, 또 하나의 Gaussian 필터를 주변 pixel까지 고려하여 적용하는 방식입니다.
Gaussian 필터를 이용하지만 픽셀의 intensity 차이를 고려한 또 하나의 Gaussian 필터를 적용합니다. -> edge가 보존
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
- src – 8-bit, 1 or 3 Channel image
- d – filtering시 고려할 주변 pixel 지름
- sigmaColor – Color를 고려할 공간. 숫자가 크면 멀리 있는 색도 고려함.
- sigmaSpace – 숫자가 크면 멀리 있는 pixel도 고려함.
- 예제
dst1 = cv2.blur(img,(7,7))
dst2 = cv2.GaussianBlur(img,(5,5),0)
dst3 = cv2.medianBlur(img,9)
dst4 = cv2.bilateralFilter(img,9,75,75)
'Python > Image vision' 카테고리의 다른 글
Contour Feature (0) | 2020.01.20 |
---|---|
Image Contours (0) | 2020.01.20 |
이미지 임계처리 (Thresholding) (0) | 2020.01.20 |
이미지 Processing (0) | 2020.01.20 |
도형 그리기 (0) | 2020.01.20 |