OpenCV의 손상 복원 알고리즘인 TELEA 을 이용하여 전처리 한 이미지를 복원한다.
# 손상된 사진을 불러옵니다.
image = cv2.imread('images/abraham.jpg')
imshow('원본 손상된 사진', image)
# 손상된 영역을 표시한 사진을 불러옵니다.
marked_damages = cv2.imread('images/mask.jpg', 0)
imshow('손상된 영역 표시', marked_damages)
# 흰색이 아닌 모든 색을 검은색으로 변경하여 마스크를 만듭니다.
ret, thresh1 = cv2.threshold(marked_damages, 254, 255, cv2.THRESH_BINARY)
imshow('이진화', thresh1)
# 마스크를 두껍게 만듭니다.
# 이진화로 인해 마스크가 약간 좁아졌으므로 팽창(dilate)을 수행합니다.
kernel = np.ones((7,7), np.uint8)
mask = cv2.dilate(thresh1, kernel, iterations = 1)
imshow('팽창된 마스크', mask)
cv2.imwrite("images/abraham_mask.png", mask)
# 이미지 복원을 수행합니다.
restored = cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)
imshow('복원된 이미지', restored)
cv2.imread('images/abraham.jpg')
2. 이미지는 손상된 영역을 표시
cv2.imread('images/mask.jpg', 0)
손상된 영역을 표시하기 위해 그레이스케일
3. 손상된 영역 표시
cv2.threshold(marked_damages, 254, 255, cv2.THRESH_BINARY)
손상된 영역을 표시한 마스크 이미지에서 임계값을 기준으로 이진화를 수행
임계값 이상의 값은 흰색(255)으로 설정
4. 손상 영역 팽창(dilate)
cv2.dilate(thresh1, kernel, iterations = 1)
마스크의 경계를 부드럽게 하여 복원 작업을 더 자연스럽게 만들기 위함이다.
5. 손상 복원 알고리즘 : TELEA
cv2.inpaint(image, mask, 3, cv2.INPAINT_TELEA)
손상된 이미지와 마스크를 입력으로 받아 손상된 영역을 복원
TELEA 알고리즘을 사용하여 복원을 수행하며, 이웃 픽셀의 반경은 3으로 설정