Ask Your Question
0

I have to find the homography that best warps the images into the same perspective.

asked 2016-06-11 10:07:59 -0600

sakshi gravatar image

I have used RANSAC algorithm to find the homography and wrap perspective operation to apply it to an image. here is the code

MIN_MATCH_COUNT = 10
img1 = cv2.imread('bus1.jpg',0)
img2 = cv2.imread('bus2.jpg',0)
sift = cv2.SIFT()

kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1,des2,k=2)

good = []
for m,n in matches:
if m.distance < 0.7*n.distance:
    good.append(m)

if len(good)>MIN_MATCH_COUNT:

  src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
  dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)

  M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
  h,w = img1.shape

  result=cv2.warpPerspective(img2,M,(w,h))

cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destroyAllWindows()

the input images are

image descriptionbus1.jpg image descriptionbus2.jpg the output image is

image description

it is not showing the whole image .what is wrong??

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
2

answered 2016-06-11 12:08:26 -0600

Tetragramm gravatar image

First, you need to add the flag WARP_INVERSE, because you are moving your image in the wrong direction.

Secondly, warpPerspective requires you to specify the size of the output, and the top left is always at (0,0). So if you warp things to negative pixel values, you have to alter the transformation to shift it in the x or y direction (.at<double>(0,2) and (1,2) respectively) so it is in the positive pixel ranges.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2016-06-11 10:07:59 -0600

Seen: 855 times

Last updated: Jun 11 '16