2014-03-19 262 views
0

我想要將垂直和水平邊緣連接在一起以獲取圖像中的所有邊緣,以便將其用於Harris角點檢測。邊緣幅度(垂直和水平邊緣)

我使用索貝爾過濾器,以獲得垂直和水平邊緣:

I = imread('CleanFingerprint.jpg'); // read the image 
I = im2double(I); // convert it to double 
G = rgb2gray(I); // convert it to gray 

vert = [-1 -2 -1; 
     0 0 0; 
     1 2 1]* 0.25; // vertical filter 

hor = [-1 0 1; 
     -2 0 2; 
     -1 0 1]* 0.25; // horizontal filter 

OutputV = conv2(G, vert); // applying the filter to the image 
OutputH = conv2(G, hor); 

它的工作很大。然後當我嘗試將它們結合在一起時,我使用這個公式:

// sqrt((OutputV^2) + (OutputH^2)) 
Output = OutputV ^2; 
Output1 = OutputH ^2; 

Output2 = Output + Output1; 
Output3 = sqrt(Output2); 

我得到一個很奇怪的圖像。任何建議

+2

不確定你到底在做什麼,但是當你使用OutputV^2時,你實際上在做OutputV * OutputV,矩陣乘法。你可能想要做的是OutputV。^ 2,那是OutputV。* OutputV,標量積,在這種情況下,它將矩陣的每個元素 – Inox

+0

謝謝Inox,它現在可以工作,我將它改爲。^ 2 – N4LN

回答

0

你應該使用「每像素」方操作:

Output = sqrt((OutputV .^ 2) + (OutputH .^ 2)); 

的你寫的MATLAB執行的矩陣乘法(不是入境明智的操作)。