问题标签 [ransac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7924 浏览

point-cloud-library - RANSAC 平面拟合系数

我正在尝试将飞机适合一组点云。我尝试使用点云库(PCL)并且效果很好。我需要知道的是如何获得拟合平面的系数a,b,c(ax + by + cz + 1 = 0)。有什么直截了当的方法吗?我从这里得到了一些见解:3D Least Squares Plane

0 投票
2 回答
18458 浏览

opencv - OpenCV:如何使用 findHomography()/findFundamental() 和 RANSAC 获得内点

OpenCV 本身不提供 RANSAC 功能,或者至少以您可以调用它并完成它的形式提供(例如cv::ransac(...))。所有能够使用 RANSAC 的函数/方法都有一个启用它的标志。但是,如果您在估计单应性/基本矩阵之后确实想对 RANSAC 计算的内点执行其他操作,例如在 Octave 或类似的软件/点库中创建一个漂亮的图,则这并不总是有用的,在剩余的一组过滤匹配等。

在匹配两个图像后,一个得到一个匹配向量。除此之外,我们当然还有 2 组用于匹配过程的关键点(每个图像一个)。使用匹配和关键点,我们创建了两个点向量(例如cv::Point2f points)并将它们传递给findHomography()。从这篇文章和这篇文章中,我发现了如何使用掩码准确地标记内点,并将其传递给该函数。掩码内的每一行都与一个内点/异常值相关。但是我无法弄清楚如何使用我的两组点中的行索引信息。查看 OpenCV 的源代码并没有让我走得太远。在findFundamental()(类似于findHomography()它的签名和掩码部分)他们使用compressPoints(),这似乎以某种方式将我们作为输入的两组(源点和目标点)合并为一个。在进行测试以确定面罩的性质时,我尝试了 2 组匹配点(转换cv::Keypointscv::Point2f标准程序)。每组包含 300 分,所以我们总共有 600 分。返回的掩码包含 300 行(值对于手头的这个主题并不重要)。

编辑:在写这篇文章时,我发现了答案(见下文),但还是决定发布这个问题,以防有人尽快以紧凑的形式需要这些信息。请注意,我们仍然需要支持 RANSAC 的 OpenCV 功能之一。因此,如果您有一组点但无意计算单应性或基本矩阵,这显然不是方法,我敢说我无法在 OpenCV 的 API 中找到任何有用的东西来帮助避免这个障碍,因此您需要使用一个外部库。

0 投票
1 回答
74 浏览

outliers - 角度数据拟合策略

我有一组角度。分布可以大致描述为:

  • 通常有几个值非常接近(相距 0.0-1.0 度)到正确的解决方案
  • 也有噪声值与正确结果相去甚远,甚至方向相反

是否有针对此类问题的通用解决方案/策略?

对于多维数据,我会使用 RANSAC - 但我的印象是,将 Ransac 应用于一维数据是不寻常的。另一个问题是计算角度的平均值。我阅读了其他一些关于如何使用向量计算角度平均值的帖子,但我只是想知道是否没有一个特定的拟合解决方案已经可以处理这两个问题。

0 投票
2 回答
14825 浏览

c++ - OpenCV C++ - findHomography 值的含义

我已经检查了 stackOverflaw,尤其是在这个链接中,但它没有回答我的问题。

我使用 Ransac 和 OpenCv 计算单应性以匹配两张图片。这里对应的代码:

对于一个好的匹配(完全相同的图片),我在我的终端上有这个:

单应性大小 3

价值 H : 1

价值 H : 0

价值 H : 0

价值 H : 0

价值 H : 1

价值 H : 0

价值 H : 0

价值 H : 0

价值 H : 1

行列式单应性:1

对于一场糟糕的比赛(两张不同的图片),我有这个:

单应性大小 3

价值 H : 0

价值 H : 0

价值 H : 241

价值 H : 0

价值 H : 0

价值 H : 277

价值 H : 0

价值 H : 0

价值 H : 1

行列式单应性:0.00533235

我不明白这个结果。有人可以解释一下吗?我想使用这些值来确定这是否匹配。我希望在第一种情况下只有 1 个,但没有。

我想,我在没有真正理解的情况下使用 Homography 和 Ransaw。我已经在互联网上检查过,但它很复杂,所以如果你也有很好的解释,我会接受。

感谢。

0 投票
1 回答
736 浏览

c++ - 将 RANSAC 应用于向量用于相似变换

我在 findHomography 函数中使用了 CV_RANSAC 选项,但现在我想使用 estimateRigidTransform。因此我不能再使用 CV_RANSAC。

我想消除我的 SIFT 特征匹配数据的异常值并应用estimateRigidTransform。我怎样才能做到这一点?

0 投票
0 回答
388 浏览

c++ - Ransac 用于边缘检测

我正在研究 Ransac 算法,以使边缘检测对光照条件更加稳健。我的项目:“口腔状态检测”。我使用人脸检测和嘴巴检测(OpenCV 中的数据)来检测人的嘴巴。然后我找到嘴的轮廓来获取链码,然后使用链码与支持向量机进行训练。我的问题是我无法获得良好的嘴巴轮廓。我想使用 Ransac 算法使边缘检测更加稳健。请帮我!

0 投票
3 回答
9445 浏览

matrix - 五点基本矩阵估计的 Sampson 误差

我使用 Nister 的 5 点方法来计算基本矩阵。使用 RANSAC 和 Sampson 错误阈值进一步改进了异常值拒绝。我随机选择 5 个点集,估计基本矩阵并评估匹配向量的 Sampson 误差。Sampson 误差低于阈值t0.01在我使用的示例中设置为)的点坐标被设置为内点。对所有基本矩阵重复该过程,我们保留内点得分最高的矩阵。

我注意到dsampson 错误向量的大多数值太大:例如,如果 的大小d为 (1x1437),如果我这样做

那么length(g)=1425这意味着只有 7 个值是不正确的阈值的内点!

如何设置阈值?如何解释 Sampson 错误值?

请帮帮我。谢谢

0 投票
1 回答
1749 浏览

algorithm - 长方体的 RANSAC

对于通常的模型,即球体、线、平面,我已经能够在 3D 点云上成功实施 RANSAC。但是,我很难思考如何为长方体做这件事,特别是只是一个 3d 盒子。我不确定如何使用点参数化框。

理想情况下,我想获得长度、宽度、高度和中心作为我的参数(Theta)。我对如何使用立方体表面的 3D 点云中的最少点数来拟合这些参数感到困惑。(我也可以访问点法线)。

例如,我最终想估计立方体的 6 个面。我可以只估计三个并使用它们的平行镜来得到所有 6 个。每个面大概都表示为一个平面,它需要一个点和一个法线来定义(或者 3 个点)。但是,每个平面的法线都有限制,因为它们都需要相互正交。我不确定如何在模型估计中包含约束,或者这是否是正确的方法。

任何想法将不胜感激。我目前正在使用 Marco Zuliani 的“RANSAC for Dummies”工具箱实现,如果这完全相关的话。

0 投票
1 回答
1110 浏览

matlab - RANSAC 多元回归

我使用 RANSAC 作为我稳健的回归方法。我在这里找到了一个简洁的工具箱,它执行 Marco Zuliani 的 RANSAC。我看到有直线和平面的示例,但是如果像多元回归中那样有许多自变量怎么办。反正有没有修改代码来处理这个?

到目前为止,我尝试的是修改 3D 代码以处理 N 维。当我这样做时,我得到了所有的点作为内点,我知道这可能是不正确的。这是对数据的过度拟合。以下是我厌倦的修改。

因为test_RANSAC_plane.m我刚刚添加了更多行X

对于estimate_plane.m

对于error_plane.m

0 投票
1 回答
1526 浏览

python - 使用 scikit-image 和 RANSAC 稳健地估计多项式几何变换

我想用 scikit-image skimage.transform 和 skimage.measure.ransac 稳健地估计多项式几何变换

ransack 文档提供了一个非常好的示例,说明如何使用相似性转换来做到这一点。这是怎么回事:

我需要使用skimage.transform.PolynomialTransform而不是 SimilarityTransform,并且我需要能够指定多项式顺序。

但是 RANSAC 调用将 PolynomialTransform() 作为输入,它不接受任何输入参数。所需的多项式阶数确实在 PolynomialTransform() 的估计属性中指定......所以 RANSAC 调用使用多项式阶数的默认值,即 2,而我需要一个 3 阶或 4 阶多项式。

我怀疑这是一个基本的python问题?提前致谢!