哈里斯检测器与matlab和opencv之间的关系

时间:2016-01-07 23:08:04

标签: matlab opencv image-processing computer-vision matlab-cvst

我正在使用哈里斯探测器进行角点特征检测。我使用以下代码在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中检测到角点。

如何从两个程序中检测到的角点是否相同?

1 个答案:

答案 0 :(得分:1)

dst_norm是一组哈里斯角度量值吗?在这种情况下,您选择前100个像素,其角落度量高于阈值,这是不正确的。

在MATLAB代码中,detectHarrisFeatures找到角点度量的局部最大值。然后selectStrongest方法选择100个具有最高指标的点。所以,首先你必须找到局部最大值。然后你必须对它们进行排序,然后进入前100名。

即使这样,结果也不会完全相同,因为detectHarrisFeatures使用插值以子像素精度定位角落。