728x90
반응형
영상의 잡음 제거
영상의 잡음?
- 영상의 픽셀 값에 추가되는 원치 않는 형태의 신호
잡음(noise)종류
• 가우시안 잡음 (Gaussian noise)
• 소금&후추 잡음, 솔트 패퍼 (Salt&Pepper)
Median Filter
• 주변 픽셀들의 값들을 정렬하여 그 중앙값(median)으로 픽셀 값을 대체
• 소금-후추 잡음 제거에 효과적
• Quailty가 좋지 않아서 잘 안쓰임
# 이미지에 노이즈 추가 함수
def noisy(noisy_type, image):
if noisy_type == 'speckle':
row,col,ch = image.shape
gauss = np.random.randn(row,col,ch)
gauss = gauss.reshape(row,col,ch)
noisy = image + image * gauss
return noisy
cv2.medianBlur(src, ksize, dst=None) -> dst
Bilateral 양방향 필터
- 가우시안 잡음 제거에는 가우시안 필터가 효과적 but
• 에지 보전 잡음 제거 필터(edge-preserving noise removal filter)의 하나
• (평균 값 필터 또는 가우시안 필터)는 Edge부근에서도 픽셀 값을 평탄하게 만드는 단점이 있음
=가우시안 블러를 너무 심하게 블러링하게되면(sigmaX값 크면) edge정보가 무너짐
• 기준 픽셀과 이웃 픽셀과의 거리, 그리고 픽셀 값의 차이를 함께 고려하여 블러링 정도를 조절
• 기존 pixel과 이웃 pixel과의 거리(유클리디안?)
edge가 아닌 부분에서만 blurring ==> edge 보존
= pixel이 평탄하면 blurring,
= edge가 포함된 부분은 가우시안 함수의 일부분만 가져와서 filtering으로 사용 = Gaussian modify
sigma가 커지면 속도가 느려짐
* why?
가우시안 필터는 똑같은 모양의 필터마스크를 모든 픽셀에 적용하니 속도가 빠름
but 양방향 필터는
가우시안 필터를 만들고 각각의 픽셀마다 modify를 진행해 모든 픽셀마다 다른 형태의
filter를 만들어서 filtering을 진행
# image profile?? 2차원으로 pixle값의 높낮이를 표현한
src = cv2.imread('ch04\\images\\lenna.bmp')
if src is None:
print('Image load failed!')
sys.exit()
# cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)
'''
d: 필터링에 사용될 이웃 픽셀의 거리(지름).
음수(-1)를 입력하면 sigmaSpace 값에 의해 자동 결정됨.
sigmaColor: 색 공간에서 필터의 표준 편차
sigmaSpace: 좌표 공간에서 필터의 표준 편차
'''
# sigmaColor = edge를 판단하는 sigma(임계값), 너무크면 가우시안과 별다를게 없음
# 가우시안 분포에서 +-2~3 sigma 보다 크다면 다른 값,
# +-2~3 sigma 사이면 비슷한 값
# sigmaSpace 값 = filter_mask = 8*sigmaSpace + 1 or 6*sigmaSpace +1
dst = cv2.bilateralFilter(src, d=-1, sigmaColor=10, sigmaSpace=5)
'OpenCV > OpenCV-Chapter' 카테고리의 다른 글
CH05 Opencv-Python 기하학적(Geometry) 변환 (0) | 2021.12.18 |
---|---|
CH04 Opencv-Python Cartoon_filter (0) | 2021.12.18 |
CH04 Opencv-Python 필터링(filtering) - blurring, Sharpening (0) | 2021.12.18 |
CH03 Opencv-Python Chroma_key (0) | 2021.12.18 |
CH03 Opencv-Python Histogram backprojection (0) | 2021.12.18 |
댓글