Opencv SIFT检测到的关键点数量非常少
我有一个图像拼接代码和SIFT被用来检测关键点。当我使用从互联网下载的图像时,关键点的数量非常好。但是当我使用相机拍摄的图像时,关键点的数量非常糟糕。这是我用来检测关键点的代码。有什么问题吗Opencv SIFT检测到的关键点数量非常少,opencv,sift,image-stitching,Opencv,Sift,Image Stitching,我有一个图像拼接代码和SIFT被用来检测关键点。当我使用从互联网下载的图像时,关键点的数量非常好。但是当我使用相机拍摄的图像时,关键点的数量非常糟糕。这是我用来检测关键点的代码。有什么问题吗 > Ptr<SIFT> detector = SIFT::create(0,3,-1,5,2.6); //0,3,-1,5,0.6 > std::vector <KeyPoint> kp1, kp2; > Mat descriptors1, descr
> Ptr<SIFT> detector = SIFT::create(0,3,-1,5,2.6); //0,3,-1,5,0.6
> std::vector <KeyPoint> kp1, kp2;
> Mat descriptors1, descriptors2;
> detector -> detectAndCompute (imageA, noArray(), kp1, descriptors1);
> detector -> detectAndCompute (imageB, noArray(),kp2, descriptors2);
> //Ptr<DescriptorMatcher> matcher = BFMatcher::create();
> Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::FLANNBASED);
Ptr检测器=SIFT::create(0,3,-1,5,2.6)//0,3,-1,5,0.6
>标准::载体kp1,kp2;
>Mat描述符1,描述符2;
>检测器->检测和计算(imageA,noArray(),kp1,描述符1);
>检测器->检测和计算(imageB,noArray(),kp2,描述符2);
>//Ptr matcher=BFMatcher::create();
>Ptr matcher=DescriptorMatcher::create(DescriptorMatcher::flannbase);
您可以尝试更改sift参数。Probaby您可以调整功能评分阈值。其他可能的方法:正常化图像(将最小值缩放为0,将最大值缩放为255)或使用直方图均衡化。你能展示一些你的图片吗?关键点检测/描述仅在纹理场景中有效。为什么要修改
SIFT::create()
的默认值。第三个值Contrast threshold=0.04
的值表示“阈值越大,检测器产生的特征越少。”您将该值更改为-1。我甚至不知道负值是否有意义。首先,我会尝试使用默认值进行特征检测,可能会一个接一个地更改参数,以确定是否可以获得更好的结果。筛分非常均衡。