Programming/OpenCV

[OpenCV] image inpaint 함수 (object removal or region filling)

꾸준희 2018. 9. 5. 16:07
728x90
반응형




이미지에서 지우고 싶은 선 또는 잡음을 포함한 객체를 지우고, 


주변 픽셀이 가지는 색상으로 지워진 부분을 채우고자 할 때  


OpenCV의 inpaint 함수를 사용 할 수 있다. (여기서는 OpenCV 3.4.2 버전을 사용하였다.)







inpaint 함수 형식

// C++ 형식
void cv::inpaint(InputArray src, 
                      InputArray inpaintMask, 
                      OutputArray dst, 
                      double inpaintRadius,
                      int flags)

// Python 형식
dst = cv.inpaint(src, inpaintMask, inpaintRadius, flags[, dst])


inpaintMask 는 8비트 1채널 이미지(흑백이미지)를 사용해야한다. 


inpaintRadius 는 알고리즘에 의해 각 포인트의 circular neighborhood 의 Radius 를 뜻한다. 




flags 는 두 가지 종류가 있다. 


1. INPAINT_NS 


Bertalmio, Marcelo, Andrea L. Bertozzi, and Guillermo Sapiro. "Navier-stokes, fluid dynamics, and image and video inpainting." In Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on, vol. 1, pp. I-355. IEEE, 2001.


2. INPAINT_TELEA


Telea, Alexandru. "An image inpainting technique based on the fast marching method." Journal of graphics tools 9.1 (2004): 23-34.







위 그림의 좌 상단 그림에 불필요한 직선이 포함되어있다. 


이와 같은 직선을 별도의 방법(이진화, 직선검출 등)을 사용하여 검출한 뒤, 


우 상단 그림과 같이 마스크(Mask)를 생성해준다. 



그 다음 OpenCV의 inpaint 함수를 통해 좌 하단, 우 하단 과 같은 결과를 낼 수 있다. 


좌 하단 이미지는 inpaint 함수의 다섯번째 인수인 flag = INPAINT_NS 값을 적용한 예제 이고,


우 하단 이미지는 inpaint 함수의 다섯번째 인수인 flag = INPAINT_TELEA 값을 적용한 예제이다.





이를 Dermatoscopic images 에 적용하여 hair 를 지우는 예제이다.  


- Dermatoscopic images 는 HAM10000 dataset 을 이용하였다. 





핵심 코드

inpaint(inpainted, mask, dst, 3, INPAINT_NS);

	namedWindow("inpaint");
	imshow("inpaint", dst);






아래 이미지는 INPAINT_TELEA 를 적용한 예시이다. 




별도의 방법을 적용하여 mask 를 생성 한 뒤 


우 상단 이미지 처럼 hair 를 제거하였다. 


하단 이미지는 각각 hair 를 제거하고 상처 부위를 탐지한 결과와, 


hair 를 제거하지 않았을 때의 상처 부위를 탐지한 결과를 나타낸다. 











아래 이미지는 INPAINT_NS 를 적용한 예제이다. 















OpenCV 참고자료 1 : https://docs.opencv.org/3.4.2/df/d3d/tutorial_py_inpainting.html

OpenCV 참고자료 2 : https://docs.opencv.org/trunk/d1/d0d/group__photo.html


Inpainting 내용 참고자료 1 : https://github.com/sooham/inpainting

Inpainting 내용 참고자료 2 : http://www.irisa.fr/vista/Papers/2004_ip_criminisi.pdf


hair 를 제거하는 응용 프로그램 DullRazor : http://www.dermweb.com/dull_razor/


hair 제거 관련 논문 : http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1006.4419&rep=rep1&type=pdf

728x90
반응형
1 2 3 4 5 6 7 8 9 10 ··· 34