2012-12-11 110 views
0

我正在開發雙邊濾波器..在這裏,他們已經形成了像素集羣來檢測圖像中的邊緣。他們使用了分類象限中值向量。MATLAB中集羣的形成

代碼:集羣

if((((m1 < avg) && (m4 < avg))&&((m2 >= avg) && (m3 >= avg))) || (((m2 < avg) && (m3 < avg))&&((m1 >= avg) && (m4 >= avg)))) 
    p=i+2; 
    q=j+2; 
    vec=[L(p-2,q) L(p-1,q) L(p+1,q) L(p+2,q)]; % Vertical edge 
    dav=double(sum(vec)/4); 
    %disp('vertical edge'); 

elseif((((m3 < avg) && (m4 < avg))&&((m1 >= avg) && (m2 >= avg))) || (((m1 < avg) && (m2 < avg))&&((m3 >= avg) && (m4 >= avg)))) 
    p=i+2; 
    q=j+2; 
    vec=[L(p,q-2) L(p,q-1) L(p,q+1) L(p,q+2)]; % Horizontal edge 
    dav=double(sum(vec)/4); 
    %disp('horizontal edge'); 

elseif((((m1 < avg) && (m3 < avg))&&((m2 >= avg) && (m4 >= avg))) || (((m2 < avg) && (m4 < avg))&&((m1 >= avg) && (m3 >= avg)))) 
    p=i+2; 
    q=j+2; 
    vec=[L(p-1,q+1) L(p-1,q-1) L(p+1,q-1) L(p+1,q+1)]; % Diagonal line 
    dav=double(sum(vec)/4); 
    %disp('diagonal line'); 

end 

M1,M2的

%形成,M3和M4是中位數..它是正確的採用這種方式?

請解釋這些和建議我在MATLAB

+0

@Barnabas Szabolcs,請幫忙 – user101509

+0

@Barnabas Szabolcs,請幫助 – user101509

回答

0

我想在這裏,M1,M2與圖像處理相關的一本書/指南,M3,M4是從以前的一個問題所採取的,這意味着 他們是5x5窗口的3x3子窗口的中位數。

即,它們形成這樣的矩陣:

m1 m2 
m4 m3 

或在某些類似的結構。

即,第一「如果」分支指:如果兩個M1和M4中位數比的平均值和m2和m3越小大於(或這種全相反的情況),應該有一個陡在那個特定的5x5子窗口中從左向右改變。 (記住位數過濾掉任何單一峯值,這意味着將有沒有這麼多的僞邊緣檢測即使圖像是有噪聲的。)對於VEC,

只是存儲搜索的垂直中點窗口。我不認爲它會以這種形式的工作,我想存儲的邊緣指標會更有意義此處

vec=[[i:i+4]', repmat(j+2, 5, 1)]; 

這將是五個邊緣點,其中假設邊緣去的座標從當前搜索窗口中間的頂部到下部。類似的(你可以檢查此手動過。)

的「否則,如果」的工作。

對於圖像處理的一個起點,我可以推薦你一本書,叫做「學習OpenCV的」由加里·布拉德斯基和阿德里安·卡勒雖然這不是一個Matlab的書。如果您沒有閱讀本書中的C++程序和關於OpenCV的詳細描述,那麼您仍然會獲得相當不錯的圖像處理綜合知識 - 至少您會熟悉主要概念。

至於具體Matlab的,我建議你通過圖像處理工具箱整個幫助閱讀。就像聽起來似的,我認爲只有很難學習圖像處理。

+0

非常感謝你..謝謝你的好意 – user101509