2012-02-22 81 views
2

我想知道这行代码是如何工作的图像处理代码

corners = (m==n)&(n>threshold); 

这是在一块我使用的代码,我想了解它。基本上,m和n都是相同大小的图像,“阈值”是一个十进制值。

为了理解上下文,一段代码如下。

% compute the m cornerness measure 
m = (ix2s.*iy2s - ixys.^2) - 0.04*(ix2s+iy2s).^2; 

% perform non-maximal suppression using ordfilt2 
n = ordfilt2(m, radius^2, ones([radius radius])); 

% display corner spots 
corners = (m==n)&(n>threshold); 

% superimpose corners 
Q = corners+im; 
Q(Q>1) = 1; 
C = repmat(im,[1 1 3]); 
C(:,:,1) = Q; 

回答

3

如果正确地明白,n是m(“cornerness测量”)的附近最大,所以线装置 - “如果m是局部最大值和足够大(大于阈值),则这可能是一个角落”,它可能已经可以说是更具可读性为:

corners = (m==n)&(m>threshold); 
+0

所以只是要分解它, m == n 检查m是否与数组中的每个槽m(:, :)和n(:, :)等价,如果为真则标记为1。这只会发生在局部最大值,因为这是n相对于m的定义。 然后检查以查看等效值是否大于阈值,如果也是这样,则返回1到角落。 以上是否正确?关于拐角的尺寸,MATLAB会自动给它m和n的尺寸,是否正确?如果m和n是不同的值呢?我猜这个声明会无效? – mathjacks 2012-02-22 19:57:11

+0

如果我理解正确,你的解释是正确的。程序在第一行计算m,第二行计算n,外部参数是半径(局部区域的大小)和阈值(或多或少 - 我们在误报和误报之间的偏好水平)。 – Ofir 2012-02-23 07:21:34

1

你应该阅读更多关于Harris corner detector。从维基百科:

enter image description here

这条线路是实现上述功能的。它用于检测角落。