Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本矩阵在matlab中不断变化,但在OpenCV中保持不变。原因可能是什么?_Matlab_Opencv_Image Processing_Matlab Cvst - Fatal编程技术网

基本矩阵在matlab中不断变化,但在OpenCV中保持不变。原因可能是什么?

基本矩阵在matlab中不断变化,但在OpenCV中保持不变。原因可能是什么?,matlab,opencv,image-processing,matlab-cvst,Matlab,Opencv,Image Processing,Matlab Cvst,我已经使用下面所示的函数计算了基本矩阵 [fMatrix, epipolarInliers, status] = estimateFundamentalMatrix(... matchedPoints1, matchedPoints2, 'Method', 'RANSAC', ... 'NumTrials', 10000, 'DistanceThreshold', 0.1, 'Confidence', 99.99); cv::Mat fundamental=cv::findFun

我已经使用下面所示的函数计算了基本矩阵

[fMatrix, epipolarInliers, status] = estimateFundamentalMatrix(...
   matchedPoints1, matchedPoints2, 'Method', 'RANSAC', ...
   'NumTrials', 10000, 'DistanceThreshold', 0.1, 'Confidence', 99.99);
 cv::Mat fundamental=cv::findFundamentalMat(cv::Mat(selPointsLeft),cv::Mat(selPointsRight),CV_FM_RANSAC);
但在这种情况下,每次我运行程序时,基本矩阵都会不断变化

但是,当我在OpenCV中使用下面所示的代码时,每次运行程序时,我都会得到相同的基本矩阵

[fMatrix, epipolarInliers, status] = estimateFundamentalMatrix(...
   matchedPoints1, matchedPoints2, 'Method', 'RANSAC', ...
   'NumTrials', 10000, 'DistanceThreshold', 0.1, 'Confidence', 99.99);
 cv::Mat fundamental=cv::findFundamentalMat(cv::Mat(selPointsLeft),cv::Mat(selPointsRight),CV_FM_RANSAC);
在这两种情况下,我都使用了surf功能来提取匹配功能。Matchpoints1=selpointsleft和matchpoints2=selpointsright。
原因可能是什么?

RANSAC是“随机样本共识”的缩写。这就是说,我们必须期望输出矩阵随着样本的随机选取而变化

在OpenCV中,这些值是从均匀分布的随机值列表中选取的。因此,我们每次运行代码时都会得到相同的值


在Matlab中,它似乎选择了一个完全随机的值,因此出现了问题。你必须检查是否有办法挑选随机值,我对此很不确定。

谢谢你的回答。请你解释一下均匀分布的随机值列表是什么意思。我将举一个例子。C中的rand()函数生成随机数。此函数需要一个种子值来输出数字。默认情况下,种子值为当前时间。因此,每次执行代码时,生成的随机数都会不同。可以使用srand()手动设置种子值。将其设置为常量将导致每次执行代码时产生相同的随机值集。好的,再次感谢。因此,你的意思是在open cv中有一个种子来获取随机值。是的,完全正确。它在openCV中的值是4294967295,即可能的最大无符号32位整数。s=rng;x=兰特(1,5);rng(s);y=rand(1,5)此函数允许您在matlab中控制随机数的生成