如何将 findTransformEcc 限制为具有比例但没有剪切的部分仿射变换?
How to restrict findTransformEcc to a partial affine transform with scale but without shear?
我构建了一个立体相机移动应用程序,它使用 findTransformEcc 执行自动对齐,并且该应用程序与它配合得很好。我知道我可能应该在关键点和描述符等之前使用 rectifyStereoUncalibrated,但尽管尝试了许多不同的方法,但我从中得到了不好的结果,我非常沮丧。因此,我坚持使用 findTransformEcc(至少目前如此)。目前我正在使用 MotionType.Euclidean(仅限于平移和旋转),但我想更改它。
到目前为止,该应用程序的工作原理是让用户拍一张照片,然后移到一边拍摄下一张(chacha 方法)。但现在我添加了让两部手机同时捕获的功能。问题是两个相机的焦距和传感器尺寸(angular 视野)可能不同,所以为了对齐两张照片,我需要允许 scaling/zooming。但是,如果我想用 findTransformEcc 做到这一点,我只能从 Euclidean 升级到 Affine,似乎我不能介于两者之间。也就是说,似乎我不能在不允许剪切的情况下允许缩放,而且我不想剪切。
作为解释这一点的另一种方式,我想获得您可以从 estimateRigidTranform(array,array,FALSE)(部分仿射)获得的变换类型,而不是像该函数那样使用关键点,我想使用 findTransformEcc 因为从我的实验来看它似乎更可靠。
(https://github.com/KRA2008/crosscam/blob/develop/AutoAlignment/OpenCV.cs 是自动对齐代码,如果有帮助的话)
看看基于傅立叶-梅林变换的方法:https://github.com/Smorodov/LogPolarFFTTemplateMatcher
它会给你偏移量、缩放和旋转参数,仅此而已。
我构建了一个立体相机移动应用程序,它使用 findTransformEcc 执行自动对齐,并且该应用程序与它配合得很好。我知道我可能应该在关键点和描述符等之前使用 rectifyStereoUncalibrated,但尽管尝试了许多不同的方法,但我从中得到了不好的结果,我非常沮丧。因此,我坚持使用 findTransformEcc(至少目前如此)。目前我正在使用 MotionType.Euclidean(仅限于平移和旋转),但我想更改它。
到目前为止,该应用程序的工作原理是让用户拍一张照片,然后移到一边拍摄下一张(chacha 方法)。但现在我添加了让两部手机同时捕获的功能。问题是两个相机的焦距和传感器尺寸(angular 视野)可能不同,所以为了对齐两张照片,我需要允许 scaling/zooming。但是,如果我想用 findTransformEcc 做到这一点,我只能从 Euclidean 升级到 Affine,似乎我不能介于两者之间。也就是说,似乎我不能在不允许剪切的情况下允许缩放,而且我不想剪切。
作为解释这一点的另一种方式,我想获得您可以从 estimateRigidTranform(array,array,FALSE)(部分仿射)获得的变换类型,而不是像该函数那样使用关键点,我想使用 findTransformEcc 因为从我的实验来看它似乎更可靠。
(https://github.com/KRA2008/crosscam/blob/develop/AutoAlignment/OpenCV.cs 是自动对齐代码,如果有帮助的话)
看看基于傅立叶-梅林变换的方法:https://github.com/Smorodov/LogPolarFFTTemplateMatcher
它会给你偏移量、缩放和旋转参数,仅此而已。