반응형

거리 변환(Distance Transform)은 바이너리 이미지(Binary Image)에서  픽셀값이 0인 배경으로부터의 거리를 픽셀값이 255인 영역에 표현하는 방법입니다. 배경으로부터 멀리 떨어져 있을 수록 높은 픽셀 값을 가집니다.






실제 실행 결과입니다. 직사각형의 경우 배경으로부터 일정거리 떨어진 영역인 중앙에 일직선으로 밝은 부분이 생깁니다.  

cv.distanceTransform 함수의 결과를 문자열로 출력해보아도 대각선으로 밝은 부분이 높은 값을 갖지 않아서 이상합니다.




원의 경우 중앙으로 갈수록 픽셀값이 높아지기 때문에 중앙이  흰색입니다.





테스트에 사용한 코드입니다.


import cv2 as cv
import numpy as np



img = cv.imread('rectangle.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)

# 이진화된 결과를 dist_transform 함수의 입력으로 사용합니다.

dist_transform = cv.distanceTransform(thresh, cv.DIST_L2, 5)
# dist_transform  함수를 사용하면 실수 타입(float32)의 이미지가 생성됩니다. 화면에 보여주려면 normalize 함수를 사용해야 합니다.
result = cv.normalize(dist_transform, None, 255, 0, cv.NORM_MINMAX, cv.CV_8UC1)

cv.imshow("dist_transform", result)
cv.imshow("src", img)

cv.waitKey(0)



최초 작성 - 2019. 1. 8



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts