0

私はスイッチングバイラテラルフィルターに取り組んでいます..これでは、画像のエッジを検出するためにピクセルのクラスターを形成しました。彼らは、並べ替えられた象限中央ベクトルを使用しました。

コード:

% クラスターの形成

 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 での画像処理に関連する本/ガイドを教えてください

4

1 に答える 1

0

ここで、m1、m2、m3、m4 は、以前の質問の 1 つから取得したと仮定します。つまり、5x5 ウィンドウの 3x3 サブウィンドウの中央値です。

つまり、これらは次のようなマトリックスを形成します。

m1 m2
m4 m3

または同様の構成で。

つまり、最初の「if」分岐は、次のことを意味します。m1 と m4 の両方の中央値が平均よりも小さく、m2 と m3 が大きい場合 (または、これとは完全に逆の場合)、左から右への急激な変化があるはずです。その特定の 5x5 サブウィンドウ。(中央値は単一のピーク値を除外することを覚えておいてください。これは、画像にノイズが多い場合でも、偽のエッジがあまり検出されないことを意味します。) vec については、

vec=[L(p-2,q) L(p-1,q) L(p+1,q) L(p+2,q)]; % Vertical edge

検索ウィンドウの垂直方向の中間点を保存するだけです。この形式では機能しないと思います。ここでは、エッジ インデックスを格納する方が理にかなっていると思います。

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

これは、エッジが現在の検索ウィンドウの中央で上から下に移動すると想定される 5 つのエッジ ポイントの座標になります。(これは手動でも確認できます。)

「else if」も同様に機能します。

画像処理の出発点として、Gary Bradski と Adrian Kaehler による「Learning OpenCV」という本をお勧めしますが、これは Matlab の本ではありません。本書の C++ プログラムと OpenCV に関する詳細な説明を読まなくても、画像処理に関する一般的なまとめの知識を十分に得ることができます。少なくとも主要な概念については理解できるでしょう。

Matlab の詳細については、画像処理ツールボックスのヘルプ全体を読むことをお勧めします。聞こえるかもしれませんが、画像処理を学ぶには難しい方法しかないと思います。

于 2012-12-11T21:09:20.060 に答える