gpt4 book ai didi

opencv - 使用 ORB 的不稳定单应性估计

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:12 25 4
gpt4 key购买 nike

我正在开发一个特征跟踪应用程序,到目前为止,在尝试了几乎所有的特征检测器/描述符之后,我使用 ORB 获得了最令人满意的总体结果。我的特征描述符和检测器都是 ORB。

我正在选择一个特定区域来检测源图像上的特征(通过 mask )。然后将其与在后续帧上检测到的特征进行匹配。

然后我通过对从以下代码获得的“匹配项”执行比率测试来过滤我的匹配项:

std::vector<std::vector<DMatch>> matches1;

m_matcher.knnMatch( m_descriptorsSrcScene, m_descriptorsCurScene, matches1,2 );

我还尝试了双向比率测试(过滤从源到当前场景的匹配项,反之亦然,然后过滤掉常见的匹配项)但效果不佳,所以我继续进行单向比率测试。

我还在我的比率测试中添加了最小距离检查,它似乎提供了更好的结果

if (distanceRatio < m_fThreshRatio && bestMatch.distance < 5*min_dist)
{
refinedMatches.push_back(bestMatch);
}

最后,我估计了单应性。

Mat H = findHomography(points1,points2);

我已经尝试使用 RANSAC 方法来估计内联器,然后使用这些方法重新计算我的单应性,但这会带来更多的不稳定性并消耗更多的时间。

然后最后我在要跟踪的特定区域周围画了一个矩形。我通过以下方式获得平面坐标:

perspectiveTransform( obj_corners, scene_corners, H);

其中“objcorners”是我屏蔽(或未屏蔽)区域的坐标。

我使用“scene_corners”绘制的 reactangle 似乎在振动。增加功能的数量已经减少了很多,但由于时间限制,我不能增加太多。

如何提高稳定性?

如有任何建议,我们将不胜感激。

谢谢。

最佳答案

如果振动对您来说真的很烦,那么您可以尝试对单应矩阵随时间取移动平均值:

cv::Mat homoG = cv::findHomography(obj, scene, CV_RANSAC);
if (homography.empty()) {
homoG.copyTo(homography);
}
cv::accumulateWeighted(homoG, homography, 0.1);

将“homography”变量设置为全局变量,并在每次获得新帧时继续调用它。accumulateWeighted的alpha参数是均线周期的倒数。

所以 0.1 取最后 10 帧的平均值,0.2 取最后 5 帧的平均值,依此类推...

关于opencv - 使用 ORB 的不稳定单应性估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com