繁体   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