CV

이미지 블러링(Images Smoothing/Blurring)

Min Potato 2022. 10. 23. 03:52

 1. Image Filtering

- image smoothing은 이미지 처리나 컴퓨터 비전에 사용되는 기본적인 이미지 변형 방법이다.

- 이것은 이미지에 필터를 합성하는 것을 통해 이루어 진다.

- 즉 원본 이미지보다 크기가 작은 필터를 이미지 전체에 걸쳐 이동하며 원본 이미지의 픽셀값을 바꾼다.

- 블러링은 노이즈를 제거하는데 유용한 방법이며, 이미지를 좀 더 매끈하게 보이도록 만드는 효과를 낸다.

 

2D Convolution

- opencv에서는 cv2.filter2D() 함수를 이용하여 이미지에 kernel(filter)를 적용하여 이미지를 Filtering 할 수 있다.

- kernel은 행렬을 의미하는데 크기가 크면 이미지 전체가 blur처리가 많이 된다.(일반적으로 5*5 행렬을 사용하여 적용)

 

-  cv2.fliter2D 함수를 사용해서 평균 값 필터를 적용해보겠다.

-  평균값 필터는 영상의 특정 좌표 값을 주변 픽셀 값들의 산술 평균으로 설정하는 필터이다.

더보기

cv2.filter2D(src, ddepth, kernel, dst=None, anchor=None, delta=None, borderType=None) -> dst

• src : 입력 영상

• ddepth : 출력 영상 데이터 타입. (e.g) cv2.CV_8U, cv2.CV_32F, cv2.CV_64F, -1을 지정하면 src와 같은 타입의 dst 영상을 생성합니다.

• kernel: 필터 마스크 행렬. 실수형.

• anchor: 고정점 위치. (-1, -1)이면 필터 중앙을 고정점으로 사용

• delta: 추가적으로 더할 값

• borderType: 가장자리 픽셀 확장 방식

• dst: 출력 영상

import cv2
import numpy as np

img = cv2.imread('flower1.jpg')

kernel = np.ones((5,5), np.float32)/(25)
dst = cv2.filter2D(img,-1,kernel)

--------생략-----------------

 

 

 

2.Image Blurringe

 

- Image Blurring은 low-pass filter를 이미지에 적용하여 얻을 수 있다.

- 고주파 영역을 제거함으로써 노이즈를 제거하거나 경계선을 흐리게 할 수 있다.

- opencv에는 4가지 형태의 blurring 방법을 제공하고 있다.

 

Averaging

- Box 형태의 kernel을 이미지에 적용한 후 평균값을 box의 중심점에 적용하는 형태

- cv2.blur() 함수로 적용할 수 있다.

더보기

cv2.blur(src, ksize) → dst

  • src – Chennel수는 상관없으나
  • ksize – kernel 사이즈(ex; (3,3))

Gaussian Filtering

평균값 필터 블러링의 단점은 필터링 대상 위치에서 가까이 있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치를 사용하여 평균을 계산한다.

- 이렿게 될 경우  멀리 있는 픽셀의 영향을 많이 받아 필터 결과의 퀄리티가 낮아지게 된다.

- 이러한 단점을 보완하기 위해 가우시안 필터를 많이 사용하게 된다.

- 필터에 가우시안 함수를 사용하여 거리에 따른 가중치를 이용한다.

- 2차원 가우시안 필터 마스크의 크기는 표준편차에 따라 자동으로 설정된다.

- 즉, 박스 내에 픽셀값을 가우시안 분포의 가중치로 평균 내어 현재 픽셀값을 업데이트 해주는 방법이다.

- 이 가중치는 중심 픽셀에서 멀어질수록 급격하게 줄어든다. 따라서 중심 픽셀의 값은 그 바로 주변의 픽셀들의 영향을 가장 크게 받게 된다.

 

더보기
  • cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None) -> dst

    • src: 입력 영상. 각 채널 별로 처리됨.
    • dst: 출력 영상. src와 같은 크기, 같은 타입.
    • ksize: 가우시안 커널 크기. (0, 0)을 지정하면 sigma 값에 의해 자동 결정됨
    • sigmaX: x방향 sigma.
    • sigmaY: y방향 sigma. 0이면 sigmaX와 같게 설정.
    • borderType: 가장자리 픽셀 확장 방식.

 

영상의 잡음

- Median Filtering에 대해 알아보기 전 잡음에 대해 먼저 알아보도록 하겠다.

- 영상의 잡음은 영상의 픽셀 값에 추가되는 원치 않은 형태의 신호를 의미한다.

- 잡음의 종류로는 두가지가 존재한다.

 

  1) 가우시안 잡음(Gaussian noise)

    - 대부분의 잡음 형태는 가우시안 형태이다.

    - 잡음이 가우시안 형태로 추가되는데, 픽셀 값에서 조금 더 어두워지거나 밝아지게 된다.

2) Salt&Pepper Noise

  - 영상에 소금,후추를 뿌린것과 같이 점 이 있는 잡음

  - 요즘은 이런 잡음이 거의 없다

Median Filtering

- Median Filtering은 이러한 잡음 제거에 사용되는데, 특히 Salt&Pepper 잡음 제거에 효과적이다.

- Median Filter는 주변 픽셀들의 값들을 정리하여 그 중앙값으로 픽셀 값을 대체한다.

- OpenCV 에서는 미디언 필터링 함수로 cv2.medianBlur 명령어를 제공하고 있다.

- 화질의 퀄리티면에서 좋은 결과가 나오지는 않는다.

더보기

cv2.medianBlur(src, ksize, dst=None) -> dst

 src : 입력 영상. 각 채널 별로 처리됨
 ksize : 커널 크기. 1보다 큰 홀수를 지정. 숫자 하나를 집어주면 됨
 dst : 출력 영상, src와 같은 크기, 같은 타입

Bilateral Filtering - 양방향 필터링

- 가우시안 잡음 제거에는 가우시안 필터가 효과적이다.

- 이렇게 잡음이 있는 자글자글한 부분을 가우시안 필터로 완만하게 수정할 수  있다.

- 하지만 가우시안 블러를 심하게 적용하면 영상에 있는 엣지 부분이 훼손이 생긴다.

- 이 단점을 극복하기 위해 양방향 필터라는 기법이 생긱게 되었다.

- Bilateral Filter는 가우시안 필터를 양쪽 방향으로 두번 한다고 해서 이름이 붙여 졌다.

 

- 평균 값 필터 또는 가우시안 필터는 에지 부근에서도 픽셀 값을 평탄하게 만드는 단점이있다.

- 양방향 필터는 기존 픽셀과 이웃 픽셀과의 거리, 그리고 픽셀 값의 차이를 함께 고려하여 블러링 정도를 조절한다.

- 양방향 필터는 에지가 아닌 부분에서만 블러링을 한다.

- 평탄한 부분은 가우시안 필터를 이용하고, 엣지 부분이면 가우시안의 일부분만 가져와 필터링을 한다.

- 따라서 엣지를 보존할 수 있다.

- OpenCV에서 제공하는  cv2.bilaterFIlter를 이용해서 양방향 필터링을 적용할 수 있다.

더보기

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None) -> dst

• src: 입력 영상. 8비트 또는 실수형, 1채널 또는 3채널.
• d: 필터링에 사용될 이웃 픽셀의 거리(지름), 음수(-1)를 입력하면 sigmaSpace 값에 의해 자동 결정(권장)
• sigmaColor: 색 공간에서 필터의 표준 편차
• sigmaSpace: 좌표 공간에서 필터의 표준 편차
• dst: 출력 영상. src와 같은 크기, 같은 타입.
• borderType: 가장자리 픽셀 처리 방식

-  sigmaColor는 엣지냐 아니냐를 판단하는 기준이다.

-  sigmaColor을 100으로 주어주면 가우시안 필터를 적용하는 것과 동일하다.

- 또 d는 -1을 권장한다

 

위에 정리한 내용은 

https://deep-learning-study.tistory.com/164?category=946336 

 

[파이썬 OpenCV] 영상 잡음 제거(2) - 양방향 필터 - cv2.bilateralFilter

황선규 박사님의 , 패스트 캠퍼스 OpenCV 강의를 공부한 내용을 정리해 보았습니다. 영상 잡음 제거(2) - 양방향 필터 - cv2.bilateralFIlter  가우시안 잡음 제거에는 가우시안 필터가 효과적입니다.  

deep-learning-study.tistory.com

님의 블로그를 참고하였습니다.