6. opencv-python 이미지 처리의 고급 작업(3) - 이미지 스무딩 및 필터링

학습 목표

이미지의 노이즈 유형 이해

평균 필터링, 가우스 필터링, 중앙값 필터링 등에 대해 알아보세요.

필터를 사용하여 이미지를 처리하는 기능

1. 이미지의 노이즈

이미지 수집, 처리, 전송 과정은 필연적으로 노이즈로 오염되기 때문에 사람들의 이미지 이해와 분석을 방해합니다. 일반적인 이미지 노이즈에는 가우스 노이즈, 소금 및 후추 노이즈 등이 포함됩니다.

1. 소금과 후추 소음

임펄스 노이즈라고도 알려진 솔트 앤 페퍼 노이즈는 영상에서 흔히 볼 수 있는 노이즈의 일종으로 무작위로 나타나는 흰색 또는 검은색 점으로 밝은 부분에서는 검은색 픽셀이 될 수도 있고 어두운 부분에서는 흰색 픽셀이 될 수도 있습니다
. .(또는 둘 다).
솔트 앤 페퍼 노이즈는 이미지 신호에 대한 갑작스러운 강한 간섭, 아날로그-디지털 변환기 또는 비트 전송 오류 등으로 인해 발생할 수 있습니다. 예를 들어, 센서에 결함이 있으면 픽셀 값이 최소가 되고, 센서가 포화되면 픽셀 값이 최대가 됩니다.
여기에 이미지 설명을 삽입하세요.

2. 가우스 노이즈

가우스 노이즈는 노이즈 밀도 함수가 가우스 분포를 따르는 노이즈 유형을 나타냅니다. 공간 및 주파수 영역에서 가우스 잡음의 수학적 다루기 쉬움으로 인해 이 잡음(일반 잡음이라고도 함) 모델이 실제로 자주 사용됩니다. 가우스 확률 변수 z의 확률 밀도 함수는 다음 공식으로 제공됩니다.
여기에 이미지 설명을 삽입하세요.
여기서 z는 회색 값을 나타내고, μ는 z의 평균 또는 예상 값을 나타내고, δ는 z의 표준 편차를 나타냅니다. 라벨 차이 δ2의 제곱을 z의 분산이라고 합니다. 가우스 함수의 곡선이 그림에 나와 있습니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.

2. 이미지 스무딩 작업

신호 처리의 관점에서 이미지 스무딩은 고주파 정보를 제거하고 저주파 정보를 유지하는 것입니다. 따라서 이미지에 저역 통과 필터링을 구현할 수 있습니다. 저역 통과 필터링은 이미지의 노이즈를 제거하고 이미지를 매끄럽게 만들 수 있습니다.
필터링의 차이에 따라 평균 필터링, 가우시안 필터링, 중앙값 필터링, 양방향 필터링으로 나눌 수 있습니다 .

1. 평균 필터링

평균 필터링을 사용하여 이미지 노이즈를 필터링합니다. 또한 중앙이 (x, y) 지점이고 크기가 mxn인 행렬 하위 이미지 창의 좌표 그룹을 나타냅니다. 평균 필터는 다음과 같이 표현될 수 있습니다.
여기에 이미지 설명을 삽입하세요.
정규화된 컨볼루션 상자로 완성됩니다. 중앙 요소를 컨볼루션 상자가 포함하는 영역의 모든 픽셀 평균으로 대체합니다.
예를 들어 3X3 정규화 평균 필터는 다음과 같습니다.

여기에 이미지 설명을 삽입하세요.
평균 필터링의 장점은 알고리즘이 간단하고 계산 속도가 빠르다는 것입니다. 단점은 노이즈 제거 중에 많은 세부 사항이 제거되어 이미지가 매우 흐릿해진다는 것입니다.

(1) API

cv.blur(src, ksize, anchor, borderType)

매개변수:
src: 입력 이미지
ksize: 컨볼루션 커널 크기
앵커: 기본값(-1,-1), 코어 중심을 나타냄
borderType: 테두리 유형

(2) 코드 예시

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 1 图像读取
img = cv.imread('./image/dogsp.jpeg')
# 2 均值滤波
blur = cv.blur(img,(5,5))
# 3 图像显示
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('均值滤波后结果')
plt.xticks([]), plt.yticks([])
plt.show()

여기에 이미지 설명을 삽입하세요.

2. 가우스 필터

2차원 가우시안은 가우시안 필터를 구성하는 기본이 되며 확률 분포 함수는 다음과 같습니다:
여기에 이미지 설명을 삽입하세요.
G(x, y)의 분포는 모자 모양을 하고 있으며 여기서 δ는 x에 하나씩 두 개의 값으로 간주될 수 있습니다. 방향 표준편차 δx, 다른 하나는 y방향의 레이블 차이 δy입니다.
여기에 이미지 설명을 삽입하세요.
δx와 δy의 값이 클수록 전체 모양이 편평해지는 경향이 있고, δx와 δy​​일 경우 전체 모양이 편평해지는 경향이 있습니다. 모양이 더 튀어나와있습니다.

정규분포는 중심에 가까울수록 값이 크고 중심에서 멀어질수록 값이 작은 종 모양의 곡선입니다. 평활화 결과를 계산할 때 "중심점"을 원점으로 사용하고 정규 곡선의 위치에 따라 다른 점에 가중치를 할당하여 가중 평균을 얻으면 됩니다.

가우스 스무딩은 이미지에서 가우스 노이즈를 제거하는 데 매우 효과적입니다. <\font>

(1) 가우스 평활화 과정

1) 먼저 가중치 행렬을 결정합니다.

중심점의 좌표가 (0, 0)이라고 가정하고 중심점에 가장 가까운 8개 점의 좌표는 다음과 같습니다. 더 많은
여기에 이미지 설명을 삽입하세요.
점은 동일합니다.
가중치 행렬을 계산하려면 δ 값을 설정해야 하며, δ = 1.5라고 가정하면 흐림 반경이 1인 가중치 행렬은 다음과 같습니다. 이 9개 점의 가중치의 합은 0.4787147과 같습니다
여기에 이미지 설명을 삽입하세요.
. 이 9개 포인트의 가중 평균만 계산해야 하며, 가중치의 합도 1이 되도록 해야 합니다. 따라서 최종 가중치 행렬을 얻으려면 위의 9개 값을 0.4787147로 나누어야 합니다.
여기에 이미지 설명을 삽입하세요.

2) 가우시안 블러 계산

가중치 행렬을 사용하면 가우시안 블러 값을 계산할 수 있습니다.
이제 9개의 픽셀이 있고 회색조 값(0-255)이 다음과 같다고 가정합니다.
여기에 이미지 설명을 삽입하세요.
각 점에 해당 가중치 값을 곱합니다.

여기에 이미지 설명을 삽입하세요.
마지막으로 행렬은 다음과 같이 얻어집니다.

여기에 이미지 설명을 삽입하세요.
이 9개의 값을 더한 것이 중심점의 가우시안 블러 값입니다.
가우스 흐릿한 이미지를 얻으려면 모든 점에 대해 이 과정을 반복하십시오. 원본 이미지가 컬러 이미지인 경우 3개의 RGB 채널에 대해 가우시안 스무딩을 수행할 수 있습니다.

(2) API

cv2.GaussianBlur(src,ksize,sigmaX,sigmay,borderType)

매개변수:
src: 입력 이미지
ksize: 가우스 컨볼루션 커널의 크기, 참고: 컨볼루션 커널의 너비와 높이는 홀수여야 하며 다를 수 있습니다. sigmaX:
수평 방향의 표준 편차 sigmaY
: 가우스 컨볼루션 커널의 표준 편차 수직 방향, 기본값은 0이며 sigmaX
borderType: 패딩 테두리 유형 과 동일함을 나타냅니다.

(3) 코드 예시

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 1 图像读取
img = cv.imread('./image/dogGasuss.jpeg')
# 2 高斯滤波
blur = cv.GaussianBlur(img,(3,3),1)
# 3 图像显示
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('高斯滤波后结果')
plt.xticks([]), plt.yticks([])
plt.show()

여기에 이미지 설명을 삽입하세요.

3. 중앙값 필터링

중앙값 필터링(Median Filtering)은 전형적인 비선형 필터링 기술로, 기본 개념은 픽셀의 회색값을 해당 픽셀의 주변 회색값의 중앙값으로 대체하는 것입니다.
중앙값 필터링은 일반적인 값과 매우 다른 인근 값에 의존하지 않기 때문에 소금과 후추 노이즈에 특히 유용합니다.

(1) API

cv.medianBlur(src, ksize )

매개변수:
src: 입력 이미지
ksize: 컨볼루션 커널의 크기

(2) 코드 예시

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 1 图像读取
img = cv.imread('./image/dogsp.jpeg')
# 2 中值滤波
blur = cv.medianBlur(img,5)
# 3 图像展示
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img[:,:,::-1]),plt.title('原图')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur[:,:,::-1]),plt.title('中值滤波后结果')
plt.xticks([]), plt.yticks([])
plt.show()

여기에 이미지 설명을 삽입하세요.

요약하다

이미지 노이즈

소금과 후추 소리

가우스 노이즈

이미지 스무딩

평균 필터

알고리즘은 간단하고 계산 속도도 빠르지만, 노이즈 제거 과정에서 유용한 정보가 많이 제거되어 이미지가 매우 흐릿해집니다.

가우스 필터

가우시안 노이즈를 제거할 수 있으나 계산량이 크고 과정이 복잡하다.

중앙값 필터

소금과 후추 소음을 제거하는 데 사용하는 것이 더 쉽습니다.

추천

출처blog.csdn.net/weixin_44463519/article/details/125978745