我正在使用harris检测器进行拐角特征检测。我在matlab中编写了检测图像中特征的程序,使用以下代码来检测harris特征
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;
}
}
}
两个程序中提取的区域不同,我发现harris在matlab中检测角点,而不是像opencv中harris检测角点那样。
如何使两个程序中检测到的角点相同?
dst_norm
是Harris角度量值的数组吗?在这种情况下,您选择的前100个像素的角度量高于阈值,这是不正确的。
在MATLAB代码中,detectHarrisFeatures
找到角度量的局部最大值点。然后CCD_ 3方法从那些具有最高度量的点中选择100个。所以,首先你必须找到局部最大值。然后你必须对它们进行排序,并选出前100名。
即便如此,结果也不会完全相同,因为detectHarrisFeatures
使用插值以亚像素精度定位角点。