Image Restoration

Mechboy·2024년 6월 18일
0

OPENCV

목록 보기
7/9

Image Restoration

  • 이미지 복원은 카메라로 촬영 된 이미지에 있는 노이즈를 제거하는 방법
  • 카메라를 통해서 촬영 된 이미지는 기본적으로 노이즈가 존재 하기 때문에 가장 먼저 진행 되어야할 프로세싱

Median filter

  • 커널내의 중위값을 찾아 해당 커널 중심에 있는 좌표값을 대체 하는 방법
  • 주로 Salt and papper 노이즈를 제거 하는데 사용함
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('pengine.png')
plt.imshow(img[:,:,::-1]); plt.axis('off');plt.title("Input_image")

  • salt and papper노이즈는 사진과 같이 흰색과 검은색 점의 형태로 노이즈가 생성 된다.
median_filter_3 =cv2.medianBlur(img, 3)
median_filter_9 =cv2.medianBlur(img, 9)
median_filter_21 =cv2.medianBlur(img, 15)

plt.figure(figsize= (10,10))
plt.subplot(311);plt.imshow(median_filter_3[:,:,::-1]); plt.axis('off');plt.title("median 3*3")
plt.subplot(312);plt.imshow(median_filter_9[:,:,::-1]); plt.axis('off');plt.title("median 9*9")
plt.subplot(313);plt.imshow(median_filter_21[:,:,::-1]); plt.axis('off');plt.title("median 15*15")

  • median filter 를 적용하면 salt and papper 노이즈가 줄어 드는것을 확인 가능
  • 허나 일정 크기 이상 커널을 사용하게 되면 대부분의 픽셀이 평균점으로 수렴하게 되어 디테일이 줄어드는 단점이 존재

bilateral filter

  • image blur 기법을 이용하여 노이즈를 감소 시킬때 엣지가 무뎌지는 단점을 보완하기 위해서 고안 된 기법
  • 픽셀 밝기간의 가중치를 추가하여 비슷한 밝기의 픽셀 위주로 가우시안 필터링을 진행

bilateral filter 수식

Ifiltered(x)=1WpxiΩI(xi)e(xix)22σs2e(I(xi)I(x))22σr2I_{filtered}(x) = \frac{1}{W_p} \sum_{x_i \in \Omega} I(x_i) \cdot e^{-\frac{(x_i - x)^2}{2 \sigma_s^2}} \cdot e^{-\frac{(I(x_i) - I(x))^2}{2 \sigma_r^2}}
  • 색상 가중치 (σr\sigma_{r} ): 값이 커질 수록 인접영역의 중심셀과 비슷한 밝기 값에 가중치를 늘려준다
  • 공간 가중치 (σs\sigma_{s} ) :값이 커질 수록 중심 픽셀의 거리차이에 의한 가중치를 늘려준다.

python 코드 구현

IC_circuit = cv2.imread('IC_circuit.jpg')
IC_circuit_3 =cv2.medianBlur(IC_circuit, 7)
IC_circuit_9 =cv2.GaussianBlur(IC_circuit, (7,7), cv2.BORDER_DEFAULT)
IC_circuit_21 =cv2.bilateralFilter(IC_circuit, d=50,sigmaColor = 100, sigmaSpace = 70)

plt.figure(figsize= (10,10))
plt.subplot(221);plt.imshow(IC_circuit[:,:,::-1]); plt.axis('off');plt.title("Orignal")
plt.subplot(222);plt.imshow(IC_circuit_3[:,:,::-1]); plt.axis('off');plt.title("median filter")
plt.subplot(223);plt.imshow(IC_circuit_9[:,:,::-1]); plt.axis('off');plt.title("gaussian filter")
plt.subplot(224);plt.imshow(IC_circuit_21[:,:,::-1]); plt.axis('off');plt.title("bilateralFilter")

  • median filter 및 gauissan 필터에 비해 엣지 영역이 두드러지게 개선된 것을 확인이 가능함
  • 허나 단독으로 사용시에는 어느정도 한계점이 발견되어 median filter와 같이 사용하는 쪽이 효율적으로 판단 됨
  • original image -> median filter -> bilateral filter 순으로 적용 하면 아와 같은 노이즈 제거 기법으로 활용이 가능
IC_circuit = cv2.imread('IC_circuit.jpg')
IC_circuit_3 =cv2.medianBlur(IC_circuit, 7)
IC_circuit_21 =cv2.bilateralFilter(IC_circuit_3, d=50,sigmaColor = 100, sigmaSpace = 70)

plt.figure(figsize= (20,20))
plt.subplot(311);plt.imshow(IC_circuit[:,:,::-1]); plt.axis('off');plt.title("Orignal")
plt.subplot(312);plt.imshow(IC_circuit_3[:,:,::-1]); plt.axis('off');plt.title("median filter")
plt.subplot(313);plt.imshow(IC_circuit_21[:,:,::-1]); plt.axis('off');plt.title("bilateralFilter")

Noise reduction 방법 간 픽셀 분포 비교


IC_image_HSI = cv2.cvtColor(IC_circuit,cv2.COLOR_BGR2HSV)
IC_avg_gauss3_HSI = cv2.cvtColor(IC_circuit_3,cv2.COLOR_BGR2HSV)
IC_avg_bilateral_HSI = cv2.cvtColor(IC_circuit_21,cv2.COLOR_BGR2HSV)

hist_original =cv2.calcHist(images = [IC_image_HSI],
                   channels = [2],
                   mask = None,
                   histSize = [256],
                   ranges = [0,255])

hist_median =cv2.calcHist(images = [IC_avg_gauss3_HSI],
                   channels = [2],
                   mask = None,
                   histSize = [256],
                   ranges = [0,255])


hist_bilateral =cv2.calcHist(images = [IC_avg_bilateral_HSI],
                   channels = [2],
                   mask = None,
                   histSize = [256],
                   ranges = [0,255])


plt.plot(hist_original,label='Original');plt.xlim([0,256]);plt.yscale('log')
plt.plot(hist_median,label='median_filter');plt.xlim([0,256]);plt.yscale('log')
plt.plot(hist_bilateral,label='bilateralFilter');plt.xlim([0,256]);plt.yscale('log')
plt.title('Kernal compairison of intensity scale')
plt.legend()
plt.show()

  • Median filter는 오리지널 이미지와 비슷한 밝기 영역대를 가지고 있지만 밝기 분포가 중앙값 쪽으로 집중하게 되는 현상을 확인이 가능함
  • 그에 비해 bilateral filter 이용 할 경우에는 값의 분포가 연속적으로 변하는것을 확인 할 수 있으며, 또한 중앙값 지점에 픽셀 분포가 집중되지 않아 원본이미지와 밝기 특성이 유사한것으로 확인
profile
imageprocessing and Data science

0개의 댓글

관련 채용 정보