簡體   English   中英

無法使用 OpenCV 4.0.0 和 Python 3.7 進行圖像注冊

[英]Can't get image registration with OpenCV 4.0.0 and Python 3.7 to work

我正在嘗試使用來自 Python 3.7 的 OpenCV 4.0.0 的圖像注冊模塊。 我定義了一個普通圖像 m1 和一個移動版本 m2。 然后我嘗試使用 cv2.reg_MapperGradShift( ) 以及 cv2.reg_MapperPyramid( ) 和 cv2.reg_MapperGradShift( ) 的組合找到偏移

m1 = numpy.zeros( ( 10, 10 ) )
m1[ 3, 3 ] = 1
m2 = numpy.zeros( ( 10, 10 ) )
m2[ 3, 6 ] = 1

t1 = cv2.reg_MapperGradShift( )
t2 = t1.calculate( m1, m2 )
t3 = cv2.reg.MapTypeCaster_toShift( t2 )
t4 = t3.getShift( )
print( t4 )

t5 = cv2.reg_MapperPyramid( t1 )
t6 = t5.calculate( m1, m2 )
t7 = cv2.reg.MapTypeCaster_toShift( t6 )
t8 = t7.getShift( )
print( t8 )

結果是

[[0.]
 [0.]]
[[9.11379962]
 [6.47128924]]

我怎樣才能讓它找到合適的班次?

此外,當我嘗試在 2 張不同尺寸的圖像上運行計算()時,我得到

cv2.error: OpenCV(4.0.0) C:\\projects\\opencv-python\\opencv\\modules\\core\\src\\arithm.cpp:663: error: (-209:Sizes of input arguments do not match) 操作是函數“cv::arithm_op”中既不是“array op array”(其中數組具有相同的大小和相同數量的通道),也不是“array op scalar”,也不是“scalar op array”

難道不能注冊不同尺寸的圖像(在較大的圖像中找到較小的圖像)嗎?

編輯:我又玩了一些,我發現當我定義更大的圖像並在中間的某個地方設置一個像素時,我用 cv2.reg_MapperPyramid() 得到了正確的答案,但是當我在邊界附近設置一個像素時,我仍然得到錯誤的答案。 例如

m1 = numpy.zeros( ( 100, 100 ) )
m1[ 30, 30 ] = 1
m2 = numpy.zeros( ( 100, 100 ) )
m2[ 30, 33 ] = 1

t1 = cv2.reg_MapperGradShift( )
t2 = t1.calculate( m1, m2 )
t3 = cv2.reg.MapTypeCaster_toShift( t2 )
t4 = t3.getShift( )
print( t4 )

t5 = cv2.reg_MapperPyramid( t1 )
t6 = t5.calculate( m1, m2 )
t7 = cv2.reg.MapTypeCaster_toShift( t6 )
t8 = t7.getShift( )
print( t8 )

結果是

[[0.]
 [0.]]
[[3.02103606]
 [0.        ]]

是否與注冊模塊如何推斷圖像(其他函數中使用的 borderMode 或 borderType 參數)有關?

您需要將圖像的數據類型從 int 更改為 float32 或 float64。 如果你不這樣做,它就不起作用。

您應該使用matchTemplate ,它允許您在圖像中找到模板。 例如,如果您的模板是

模板

你的形象是

整個圖像 .

結果將是

匹配結果

(圖像可以在 OpenCV 文檔中找到)

根據您的需要,您可以選擇一種或另一種方法,例如,TM_CCORR_NORMED 是健壯的,但 TM_SQDIFF 需要較少的計算。

更新

它很容易用於翻譯,但對於更復雜的轉換,您應該使用Features2D 和單應性來查找模板。 這是 OpenCV 文檔示例:

Features2D_Homography

算法思想是:

  1. 提取每張圖像的關鍵點
  2. 計算每個關鍵點的描述符(例如 SIFT 或 SURF)
  3. 由於描述符匹配關鍵點
  4. 從匹配計算轉換參數

提取每個圖像中的關鍵點,然后匹配描述符。

也許也應該有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM