如何

2017-06-07 34 views
0

我使用Python綁定的OpenCV與壓縮圖像使用cv2.findHomography()。我正在使用關鍵點檢測和描述(即SURF,SIFT,...)來查找目標圖像中包含的模板圖像,但有一個問題:模板可能會被「擠壓」在目標圖像中,比率與目標圖像不同。如何

這不會findHomography()的工作,因爲它假設一個簡單的透視變換,不能有這種拉伸。

有什麼方法可以做到這一點?我曾經想過增量擴展目標圖像的數量以改變寬高比,並且在每次迭代時使用findHomography,但據我所知,沒有辦法比較擬合的質量(因爲我使用RANSAC找到最合適的),所以我不能說出它最適合的擠壓水平。

計數可能通過查看返回的掩碼長度正確地從RANSAC匹配點的數量?這看起來很糟糕。

回答

1

這不適用於findHomography(),因爲它假定了一個簡單的透視變換,它不能進行這種拉伸。

這是不正確的;即使是仿射變形也包括stretching the aspect ratios甚至剪切變形,並且單應性甚至通過非均勻變形來擴大這種變形。例如,仿射變換由矩陣

2 0 0 
0 1 0 

將由兩個因素水平拉伸的圖像給定,與此短節目看出:

import cv2 
import numpy as np 

img = cv2.imread('lena.png') 
affine_warp = np.array([[2, 0, 0], [0, 1, 0]], dtype=np.float32) 
dsize = (img.shape[1]*2, img.shape[0]) 
warped_img = cv2.warpAffine(img, affine_warp, dsize) 

cv2.imshow("2x Horizontal Stretching", warped_img) 
cv2.waitKey(0) 

產生輸出:Lena stretched 2x wide

所以這不是你的問題。同形異形允許更強的翹曲。你運行RANSAC自己或讓findHomography()功能通過RANSAC決定你的觀點?請發佈您的預期輸出和您當前的代碼,可能在一個反映您遇到的問題的新問題中。

+0

謝謝,你是完全正確的。我的代碼工作正常,當我認爲我的圖像被拉伸時,我錯了,他們實際上只是在側面填充了一些額外的東西。我誤解了維基百科有關Homography的文章,其中說單應性涉及「同一平面的任何兩個圖像」,我認爲這意味着表面上的同一圖像。我沒有意識到它也可以編碼仿射變換。謝謝! –