본문 바로가기

OpenCV/Python

Convolution and Mask

Convolution

: 특정 픽셀이, 마스크의 중심에 오도록 함

: 마스크 범위 내에 포함되는 이웃 픽셀을 마스크의 원소와 곱한 결과 도출

: 쉽게 설명해서 주위 값들을 활용해서 지금 위치의 값을 변경시키는 것임

: 당연히 가장자리는 계산을 못한다.

 -> 이를 위해 활용하는게 Padding(가장자리를 다 0)

 -> 테두리 값 활용하기도 있음

 

 

1. 블러링

이미지에서 노이즈를 제거하기 위해 많이 사용

cv.blur(이미지, (mask 크기) )  쓰면 간편

 

그냥 주변의 평균을 구해서 픽셀값으로 입력하는 것

import cv2 as cv
import numpy as np

img = cv.imread('HBW.jpg')
img_blur = cv.blur(img, (10, 10))

cv.imshow('Original', img)
cv.imshow('blur', img_blur)

cv.waitKey(0)

 

2. 가우시안 블러링

: 마스크 중심에 가중치를 더 높게 부여해 주는것

: cv.GaussianBlur(이미지, (마스크 크기), 0) 사용

 

3. 중간값 블러링

: 커널 크기 내의 픽셀을 크기순으로 정렬 후, 중간값을 뽑아서 선정

: 무작위 노이즈 제거의 효과적!

: cv.MedianBlur(이미지, 커널 크기)

 

4. 양방향 필터링 (Bilateral Filtering)

: 노이즈를 감소시키는 것에 가장 큰 단점은 에지를 없애버리는 것

: 에지를 보존하면서 노이즈를 감소시킬 수 있음

: 가우시안 필터 + 경계 필터

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst, borderType)
src: input
d: 필터의 직경(diameter), 5보다 크면 매우 느림
sigmaColor: 색공간의 시그마 값
sigmaSpace: 좌표 공간의 시그마 값

 

sigmaColor 랑 sigmaSpace는 같아야 한다.

 

 

 

 

 

 

참조:

https://bkshin.tistory.com/entry/OpenCV-17-%ED%95%84%ED%84%B0Filter%EC%99%80-%EC%BB%A8%EB%B3%BC%EB%A3%A8%EC%85%98Convolution-%EC%97%B0%EC%82%B0-%ED%8F%89%EA%B7%A0-%EB%B8%94%EB%9F%AC%EB%A7%81-%EA%B0%80%EC%9A%B0%EC%8B%9C%EC%95%88-%EB%B8%94%EB%9F%AC%EB%A7%81-%EB%AF%B8%EB%94%94%EC%96%B8-%EB%B8%94%EB%9F%AC%EB%A7%81-%EB%B0%94%EC%9D%B4%EB%A0%88%ED%84%B0%EB%9F%B4-%ED%95%84%ED%84%B0

'OpenCV > Python' 카테고리의 다른 글

모폴로지 Morphology  (0) 2021.06.13
에지 검출  (0) 2021.06.13
원근(퍼스펙티브) 변환  (0) 2021.06.13
영역 지정 (내가 헷갈려서 정리..)  (0) 2021.06.13
이미지 기하학적 변환  (0) 2021.06.13