반응형

이미지에서 코너 검출시 사용하는 해리스 코너에 대해 알아봅니다.







Harris Corner Detector 구현 코드입니다.


import cv2 as cv
import numpy as np
import time


img_color = cv.imread('chessboard.jpg', cv.IMREAD_COLOR)
img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)

img_sobel_x = cv.Sobel(img_gray, cv.CV_32F, 1, 0)
img_sobel_y = cv.Sobel(img_gray, cv.CV_32F, 0, 1)


IxIx = img_sobel_x * img_sobel_x
IyIy = img_sobel_y * img_sobel_y
IxIy = img_sobel_x * img_sobel_y


height, width = img_color.shape[:2]

window_size = 5
offset = int(window_size/2)

r = np.zeros(img_gray.shape)

start = time.clock()
for y in range(offset, height-offset):
   for x in range(offset, width-offset):
       window_IxIx = IxIx[y-offset:y+offset+1, x-offset:x+offset+1]
       window_IyIy = IyIy[y-offset:y+offset+1, x-offset:x+offset+1]
       window_IxIy = IxIy[y-offset:y+offset+1, x-offset:x+offset+1]

       Mxx = window_IxIx.sum()
       Myy = window_IyIy.sum()
       Mxy = window_IxIy.sum()


       det = Mxx*Myy - Mxy*Mxy
       trace = Mxx + Myy

       r[y,x] = det - 0.04 * (trace ** 2)


cv.normalize(r,r,0.0,1.0,cv.NORM_MINMAX)

for y in range(offset, height-offset):
   for x in range(offset, width-offset):
       if r[y, x] > 0.4:
           img_color.itemset((y, x, 0), 0)
           img_color.itemset((y, x, 1), 0)
           img_color.itemset((y, x, 2), 255)


end = time.clock()
print(end-start)


cv.imshow("original", img_color)
cv.waitKey(0)





OpenCV 함수 cornerHarris 사용 예제입니다.


import numpy as np
import cv2 as cv


filename = 'shape.jpg'
img = cv.imread(filename)

gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
gray = np.float32(gray)

dst = cv.cornerHarris(gray, 5, 3, 0.04)

#result is dilated for marking the corners, not important
dst = cv.dilate(dst,None)

# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]

cv.imshow('dst',img)

if cv.waitKey(0) & 0xff == 27:
   cv.destroyAllWindows()



테스트에 사용한 이미지입니다.





반응형

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

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts