matlab中harris检测器结果与opencv的关系



我正在使用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使用插值以亚像素精度定位角点。

最新更新