OpenCV에서 제공하는 Erosion, Dilation 함수들에 대해 작성합니다.
보통 바이너리 이미지(Binary Image)에서 흰색으로 표현된 오브젝트를 개선하고 오브젝트 주위로 존재하는 노이즈를 제거하기 위해 사용됩니다.
1. Erosion
2. Dilation
순으로 공부해봅시다.
우선 이미지를 로드한 후 Grayscale로 변환시키면 [0,255]의 픽셀 분포를 가지게 됩니다. (0 : 검은색, 255 : 흰색)
이후 Opencv 함수에서 제공하는 Binarization 연산을 통해 특정 Thredshold 기반으로 [0,255] --> [0,1]의 맵분포로 변환시킵니다. 이제 위 항목들의 연산을 시킬 준비는 끝입니다.
1. Erosion
바이너리 이미지에서 흰색 오브젝트의 외곽 픽셀 혹은 작은 물체(노이즈)를 0(검은색)으로 만들 때 Erosion을 사용합니다.
kernel = np.ones((3, 3), np.uint8)
result = cv2.erode(img, kernel, iterations = 1)
코드는 다음과 같이 1도 구성된 np array의 kernel을 만들어줍니다. 위 kernel을 어떻게 디자인하느냐에 따라 다양한 방식으로 Erosion을 줄 수 있습니다. kernel의 크기와 모양도 중요하지만 몇번 iteration을 돌지에 따라서도 Erosion의 결과가 크게 변하기 때문에 여러가지 옵션으로 실험해보는 것을 추천합니다.
위 사진에서 보다싶히 본 이미지에 Erosion을 적용하면 다음과 같이 1이 남은 부분이 적어져서 실제로는 오브젝트가 얇아지는 것을 확인할 수 있는데요, 이는 Erosion에서는 0과 1을 and 연산을 하기 때문입니다. 이는 Dilation과 가장 큰 핵심차이이기 때문에 꼭 알아두시면 좋습니다. (0 and 1) --> (0) , (1 and 1) --> (1)
2. Dilation
Erosion과 반대로 Dilation은 오브젝트를 팽창시킵니다. 글자라면 얇은 글자를 더 뚱뚱하게 만들는 거죠.
위의 코드에서 똑같은 kernel과 iteration을 적용하지만 Dilation은 반대로 오브젝트가 훨씬 커짐을 확인할 수 있습니다.
이는 Erosion에서는 0과 1 and 연산을 하기 때문입니다. (0 or 1) --> (1) , (1 or 1) --> (1)
그럼 Dilation은 언제 유용할까요?
보통 글씨나 오브젝트가 너무 작거나 흐릿한 경우 많이 활용하고 어떤 오브젝트에 구멍이 숭숭 나있는 경우도 Dilation을 통해 채울 수 있습니다.
하지만 실제 응용에서는 Erosion/Dilation을 단독으로 하나만 쓰지는 않습니다.
예를들면 위 사진과 같이 노이즈를 제거하려고 Erosion을 계속해서 사용하면 노이즈는 사라질지 몰라도 글짜의 외각이 원하지 않게 얇아지게 됩니다. 반면 오른쪽 그림과 같이 구멍들을 채우고 싶어서 Dilation을 계속 사용하면 구멍이 채워짐과 동시에 글자가 뚱뚱해지는 부작용이 생깁니다.
위와 같은 현상을 막고자 Erosion과 Dilation을 혼합하여 사용하는 Opening/Closing 방법을 이어서 배워보도록 하겠습니다.
Reference
[1] www.javatpoint.com/opencv-erosion-and-dilation
OpenCV Erosion and Dilation - javatpoint
OpenCV Erosion and Dilation with What is OpenCV, History, Installation, Reading Images, Writing Images, Resize Image, Image Rotation, Gaussian Blur, Blob Detection, Face Detection and Face Recognition etc.
www.javatpoint.com
[2] www.cs.auckland.ac.nz/courses/compsci773s1c/lectures/ImageProcessing-html/topic4.htm
Morphological Image Processing
Binary images may contain numerous imperfections. In particular, the binary regions produced by simple thresholding are distorted by noise and texture. Morphological image processing pursues the goals of removing these imperfections by accounting for the f
www.cs.auckland.ac.nz
[3] m.blog.naver.com/samsjang/220505815055
[13편] 이미지 Erosion과 Dilation
이미지 프로세싱 & 컴퓨터 비전 OpenCV-Python 강좌 13편 : 이미지 형태 변환(Morphological Tra...
blog.naver.com