特定のアプリケーションでは、入力画像に平均化マスクを適用してノイズを低減し、次にラプラシアンマスクを適用して細部を強調します。Matlabでこれらの操作の順序を逆にした場合に同じ結果が得られるかどうかは誰にも分かりますか?
3 に答える
ラプラシアンカーネルでの畳み込みは、強度変化に関する2次導関数情報を使用することに似ています。この導関数はノイズに敏感であるため、ラプラシアンフィルターを適用する前にガウスで画像を平滑化することがよくあります。
@belisariusが投稿したものと同様のMATLABの例を次に示します。
f='http://upload.wikimedia.org/wikipedia/commons/f/f4/Noise_salt_and_pepper.png';
I = imread(f);
kAvg = fspecial('average',[5 5]);
kLap = fspecial('laplacian',0.2);
lapMask = @(I) imsubtract(I,imfilter(I,kLap));
subplot(131), imshow(I)
subplot(132), imshow( imfilter(lapMask(I),kAvg) )
subplot(133), imshow( lapMask(imfilter(I,kAvg)) )
2つのフィルターF1
とF2
、および画像があるとしますI
。画像を2つのフィルターに通すと、次のように定義された応答が得られます。
X = ((I * F1) * F2)
ここで、畳み込み*
を表すために使用しています。
畳み込みの結合法則により、これはと同じです。
X = (I * (F1 * F2))
可換性を使用すると、次のように言うことができます
X = (I * (F2 * F1)) = ((I * F2) * F1)
もちろん、これは数学の優れた連続領域にあります。これらのことをマシンで実行すると、丸め誤差が発生し、一部のデータが失われる可能性があります。また、フィルターがFIRであるかどうかも検討する必要があります。そうでない場合、フィルターが実際に希望どおりに動作できないため、畳み込みソータとしてのデジタルフィルタリングについて考えるという概念全体が崩壊し始めます。
編集
離散たたみ込みは次のように定義されます
したがって、データの端にゼロを追加しても、数学的な意味では何も変わりません。
一部の人が指摘しているように、数値的には異なる答えが得られますが、実際のデータを計算する場合は常にこれが予想されます。これらの変動は小さく、畳み込みの出力の低エネルギー成分(つまりエッジ)に限定する必要があります。
畳み込み演算がどのように機能しているかを考慮することも重要です。X
長さと長さの2セットのデータを畳み込むと、長Y
さのある答えが得られX+Y-1
ます。X
MATLABやMathematicaのようなプログラムで、長さまたはの答えを与えるために、舞台裏で魔法が起こっていますY
。
したがって、@ belisariusの投稿に関しては、実際に同じことを言っているように見えます。
数値的には結果は同じではありませんが、画像はかなり似ています。
Mathematicaの例:
編集
線形フィルターとパディングの転流に関する彼の回答の@thronコメントへの回答として、次の操作を検討してください。
パディングなしのガウスおよびラプラシアンフィルターの転流は真実ですが、
list = {1, 3, 5, 7, 5, 3, 1};
gauss[x_] := GaussianFilter[ x, 1]
lapl[x_] := LaplacianFilter[x, 1]
Print[gauss[lapl[list]], lapl[gauss[list]]]
(*
->{5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139}
{5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139}
*)
パディングで同じことを行うと、エッジに違いが生じます。
gauss[x_] := GaussianFilter[ x, 1, Padding -> 1]
lapl[x_] := LaplacianFilter[x, 1, Padding -> 1]
Print[gauss[lapl[list]], lapl[gauss[list]]]
(*
->{4.68233,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.68233}
{4.58295,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.58295}
*)