2016-10-13 3 views
4

私はこの操作が何を呼び出すのか覚えています。この動作は、考慮中のピクセルがカーネルウィンドウ内の最も高い周波数のピクセル値に置き換えられるように定義される。イメージ内の2つの色のエッジで色の変化の効果を取り除く

目的は、他のより目立つ領域の端にある余分な色を除去し、より小さな色のサブセットに統合することです。

例えば、コンゴのフラグを考慮してください。私たちはズームインの場合に2つの色の間の境界に

enter image description here

我々は色遷移効果を観察します。私の目的のため

enter image description here

が上記画像に2色のみであるが、斜めの形状は、境界色のブレンドに適しています。

答えて

6

これはモードフィルタと呼ばれ、各ピクセルを隣接ピクセルのモード(または最も一般的な値)で置き換えるためです。

イメージ処理ツールボックスをお持ちの場合は、colfiltを使用してこのタイプのフィルタリングを簡単に実行できます。指定されたサイズの近傍に、指定された関数が適用されます。

output = colfilt(data, [5 5], 'sliding', @mode) 

更新

あなたが縁でゼロパディングのすべてに対処しないようにしたい場合は、フィルタリングを実行し、その後、それぞれの側にパディングの3つのピクセルを適用するためにpadarrayを使用することができ、すべてのエッジから余分な3ピクセルを削除します。

% Pad with replicates of the data 
data = padarray(data, [3 3], 'replicate', 'both'); 

% Perform the filtering 
new = colfilt(data, [5 5], 'sliding', @mode); 

% Crop out the padding part 
new = new(4:end-3,4:end-3); 

あなたは次の関数を使用することができnサイズのカーネルにこれを一般化したい場合:

function out = mode_filter(data, n) 

    pad_size = ceil(n/2); 

    % Pad with replicates of the data 
    data = padarray(data, [pad_size, pad_size], 'replicate', 'both'); 

    % Perform the filtering 
    out = colfilt(data, [n n], 'sliding', @mode); 

    % Crop out the padded part 
    out = out((pad_size + 1):(end - pad_size), (pad_size + 1):(end - pad_size)); 
end 
+0

これはほぼ完璧です。私がこのソリューションで抱える唯一の問題は、 'colfilt'の実装がエッジを0パッドで埋めて、その結果として場所の画像を壊すということです。私はMatlabの経験は限られていますが、画像の境界線を埋める方法を知っていますが、元の境界線を処理するだけで、0パディングの影響を避けることができますか? – sherrellbc

+0

@ sherrellbc私は、パディングを追加して削除してより良い結果を得る方法を追加しました。 – Suever

関連する問題