이미지 필터링(image filtering)

:: 필터(filter) 또는 커널(kernel) 또는 윈도우(window)라고 하는 정방행렬을 정의한 후 이 커널을 이동시키면서 같은 이미지 영역과 곱하여 그 결과값을 이미지의 해당 위치의 값으로 하는 새로운 이미지를 만드는 연산. 기호ⓧ를 사용

 

더보기

이미지도 주파수로 표현 가능

사물을 촬영할 때 사물과 배경의 사이 사물의 테두리 경계면이 고주파 영역이고, 일반적인 배경은 저주파이다.

 

LPF vs HPF

Low-Pass-Filter 저역 통과 필터 : 저주파만 통과시키는 필터

High-Pass-Filter 고역 통과 필터 : 고주파만 통과시키는 필터

 

LPF를 사용하면 고주파가 통과가 안되니 경계면이 유연해지거나 노이즈 제거, 블러 처리를 할 수 있고

HPF를 사용하면 이미지에서 경계선을 찾을 수 있다.

 

Kernel(커널)은 행렬을 의미하는데, 커널의 크기가 크면 이미지 전체가 blur 처리가 많이 된다. 

 

Filter 적용 방법

- 이미지의 픽셀 값의 중심으로부터 해당 커널 만큼의 영역을 평균하여 해당값을 커널값으로 나누고 이 값을 중심 픽셀값으로 취한다.

 

5x5 행렬

5x5 행렬에서. 이미지 중 하나의 픽셀을 지정한다고 하면, 그 픽셀을 중심으로 하는 5x5 범위의 모든 픽셀값을 더하고 그 값을 25로 나누고 나눈 값을 중심 픽셀값으로 정하는 것이다.

 

OpenCV는 cv2.filter2D()라는 함수를 이용해 이미지에 kernel(filter)를 적용하여 이미지 필터링이 가능하다.

이미지 픽셀 값을 해당 픽셀의 이웃과 평균하여 그 값을 취하는 averaging filter라고 한다.

 

filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

  • src: 필터할 이미지
  • ddepth: 이미지 깊이(자료형 크기). 영상데이터를 저장하기 위해 사용되는 비트의 수. -1이면 소스이미지과 동일
  • kernel: 커널 행렬 (np.ones() 함수를 사용하여 행렬 생성 후 행렬 값으로 나눈 값이 포함)

+) np.ones(shape, dtype=None, order='C') : 지정된 shape의 배열을 생성하고 모든 요소를 1로 초기화. 

 

커널 사이즈에 따른 이미지 필터링 결과

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 임계처리  (0) 2021.06.02
이미지 처리  (0) 2021.06.01

+ Recent posts