2012-02-22 89 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

這條線路是實現上述功能的。它用於檢測角落。