我正在使用哈里斯探测器进行角点特征检测。我使用以下代码在matlab中编写了图像中的程序检测功能来检测哈里斯特征
corners = detectHarrisFeatures(img, 'MinQuality', 0.0001);
S = corners.selectStrongest(100);
然后我将所有程序从matlab转移到opencv
我使用以下代码来检测哈里斯角点
int thresh = 70;
for( int j = 0; j < dst_norm.rows && cont < 100; j++ )
{
for( int i = 0; i < dst_norm.cols && cont < 100; i++ )
{
if((int) dst_norm.at<float>(j, i) > thresh )
{
S.at<int>(cont, 0) = i;
S.at<int>(cont, 1) = j;
I.at<int>(cont, 0) = i;
I.at<int>(cont, 1) = j;
cont = cont + 1;
}
}
}
提取区域在两个程序中都不同,我发现哈里斯在matlab中检测到角点而不是哈里斯在opencv中检测到角点。
如何从两个程序中检测到的角点是否相同?
答案 0 :(得分:1)
dst_norm
是一组哈里斯角度量值吗?在这种情况下,您选择前100个像素,其角落度量高于阈值,这是不正确的。
在MATLAB代码中,detectHarrisFeatures
找到角点度量的局部最大值。然后selectStrongest
方法选择100个具有最高指标的点。所以,首先你必须找到局部最大值。然后你必须对它们进行排序,然后进入前100名。
即使这样,结果也不会完全相同,因为detectHarrisFeatures
使用插值以子像素精度定位角落。