gpt4 book ai didi

c++ - OpenCV 2.2 SURF 特征匹配问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:40 25 4
gpt4 key购买 nike

Matching with nothing in the top right corner

我修改了 OpenCV 演示应用程序“matching_to_many_images.cpp”以从网络摄像头(右)查询图像(左)到帧。第一张图片的右上角出了什么问题?

我们认为这与我们遇到的另一个问题有关。我们从一个空数据库开始,我们只添加独特的(与我们数据库中的特征不匹配的特征)但是在只添加三个特征之后,我们得到了所有新特征的匹配....

我们正在使用:SurfFeatureDetector surfFeatureDetector(400,3,4);冲浪描述符提取器冲浪描述符提取器;FlannBasedMatcher flannDescriptorMatcher;

完整代码可在以下位置找到:http://www.copypastecode.com/71973/

最佳答案

我认为这与边界关键点有关。检测器检测关键点,但为了让 SURF 描述符返回一致的值,它需要它周围的像素 block 中的像素数据,而这在边界像素中是不可用的。您可以使用以下代码片段在检测到关键点之后但在计算描述符之前删除边界点。我建议使用 20 或更多的 borderSize。

removeBorderKeypoints( vector<cv::KeyPoint>& keypoints, const cv::Size imageSize, const boost::int32_t borderSize )
{
if( borderSize > 0)
{
keypoints.erase( remove_if(keypoints.begin(), keypoints.end(),
RoiPredicatePic((float)borderSize, (float)borderSize,
(float)(imageSize.width - borderSize),
(float)(imageSize.height - borderSize))),
keypoints.end() );
}
}

其中 RoiPredicatePic 实现为:

struct RoiPredicatePic
{
RoiPredicatePic(float _minX, float _minY, float _maxX, float _maxY)
: minX(_minX), minY(_minY), maxX(_maxX), maxY(_maxY)
{}

bool operator()( const cv::KeyPoint& keyPt) const
{
cv::Point2f pt = keyPt.pt;
return (pt.x < minX) || (pt.x >= maxX) || (pt.y < minY) || (pt.y >= maxY);
}

float minX, minY, maxX, maxY;
};

此外,近似最近邻索引并不是匹配图像对之间特征的最佳方式。我建议您尝试其他更简单的匹配器。

关于c++ - OpenCV 2.2 SURF 特征匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6174033/

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