测试opencv-wwarpAffine的异常值数量
Testing number of outliers of opencv warpAffine
我正在使用opencv来估计两个图像之间的仿射变换(我们称之为A和B,我想从A到B进行估计),我需要实现RANSAC以获得尽可能好的估计。到目前为止,我的RANSAC框架(考虑到我已经有了两个图像的关键点以及它们之间的匹配):
1:选择3个随机匹配,使用A和B的匹配点作为函数getAffineTransform的输入;
2:使用函数warpAffine对来自A的点进行扭曲,并将结果与B的点进行比较,得到异常值率:e;
3:考虑到我的样本大小是3个点(getAffineTransform需要3个点来找到变换),并且我有异常值的比率e,我可以找到我需要运行RANSAC的次数,以便有很高的概率找到一个好的估计,即N次;
4:重新运行步骤1和2 N次,保持变换具有最小的异常率;
虽然基本的想法似乎很好,但我在执行方面遇到了一些麻烦,特别是第2步。我的问题是,我不确定如何测试异常值的数量。我曾想过用warpAffine将A的点映射到B,但我几乎可以肯定它不会起作用,因为我相信函数会将我的点的Mat(这是一个Mx2 Mat,m是点的数量,每列是点的坐标x和y)解释为图像,而不是我想要映射的一组点。我该怎么做?
我使用的是带有c++的opencv 2.4.2。
在回答我自己的问题时,我实际上找到了一种方法。我不确定这是最好的方法,但根据我迄今为止所做的测试,它似乎运行良好。
如本文所述
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html#warp-仿射
仿射变换是一种可以表示为矩阵相乘的变换。因此,应用变换只需将我的点乘以从getAffineTransform得到的矩阵。在映射单个点之前,我们需要将"1"附加到要映射的点并转置它(因此我们有列向量),然后通过将其乘以变换矩阵来进行映射。如果我们将Mx2点矩阵转换为形式为的3xM点矩阵,我们可以很容易地将这种映射扩展到每个点
|x1, x2, x3, ...., xM|
|y1, y2, y3, ...., yM|
| 1, 1, 1, ...., 1|
并将其乘以变换矩阵!稍后我可能会用我制作的一个简单的测试程序来编辑这篇文章,以展示它是如何工作的。
此外,为了附加这个1的矢量并将其转座,我正在做以下操作:
1 - Create a new 3 x M matrix consisting of ones with Mat::ones, named newPtMat
2 - transpose my original point matrix, and keep it in a temp Mat
3 - use temp.copyTo(newPtMat.rowRange(0, 2)
我不确定这是最有效的方法,所以如果有人有更好的建议,请留言评论!
有一个名为"findTransformsACC"的新函数可用于查找两张图片之间的仿射变换扭曲矩阵,http://docs.opencv.org/3.0-beta/modules/video/doc/motion_analysis_and_object_tracking.html#findtransformecc
我认为它在Opencv 3.0+
- Raspberry Pi Zero W 上的 OpenCV - 浮点异常
- 在OpenCV_core310.dll中使用findContours函数时,OpenCV引发未处理的异常
- OPENCV LINEMOD会引发匹配异常
- cv:内存位置的异常 - 运行 openCV 代码 Visual Studio 2013 & Visual Studio 2017 - Windows 7
- OPENCV异常填充Conconvexppoly
- 所有OpenCV功能是否会引发异常
- OpenCV未经处理的异常错误
- opencv中项目出现未处理的异常
- c++ OpenCV approxPolyDP 导致未处理的异常
- OpenCV 写入文件时未处理的异常
- OpenCV SVM 在火车上抛出异常,"Bad argument (There is only a single class)"
- 在OpenCV中调用stereoRectify会导致异常:帧指针无效
- 当我使用 opencv 函数 cvNorm(image,NULL,CV_L2)时,它会返回异常结果,为什么
- 测试opencv-wwarpAffine的异常值数量
- OpenCV IplImage访问违规异常
- OpenCV 拼接,C++ - 未处理的异常
- OpenCV未处理的异常错误
- 在opencv 3.1中运行示例代码时出现未处理的异常
- mixChannels() 在 opencv android 中给出异常
- OpenCV kmeans: N>=K 异常 , 错误 (-215)