特定の画像に対して2DFFTを実行していて、そのスペクトル成分を取得しています。これで、この画像が別の画像と重ね合わされて、周期的なノイズが生成されました。
元の画像と周期的なノイズバージョンを以下に示します。
これを除外するために、以下に示すように、他のコンポーネントと比較して非常に大きいマグニチュードスペクトルのコンポーネントをマスクする手動ボックスを使用しました。
これが行われた後、逆FFTを実行しますが、元の画像を取り戻すことができません。
誰かが私が間違っていることを知っていますか?
値をマスクしてから、マスクされたスペクトル画像に対して逆2DFFTを実行するコードを次に示します。
pat1 = imread('Pattern1.png');
spec_orig = fft2(double(pat1));
spec_orig2 = abs(spec_orig);
spec_img = fftshift(spec_orig2);
for j = 115:125
for n = 96:106
spec_img(n,j) = 0;
end
for n = 216:226
spec_img(n,j) = 0;
end
for n = 274:284
spec_img(n,j) = 0;
end
for n = 298:308
spec_img(n,j) = 0;
end
for n = 12:22
spec_img(n,j) = 0;
end
for n = 37:47
spec_img(n,j) = 0;
end
end
%Getting Back the Image for Pattern1
figure;subplot(2,1,1);
spec_img = log(1 + spec_img);
imshow(spec_img,[]);
subplot(2,1,2);
ptnfx = ifft2(spec_img);
imshow(ptnfx);
周波数領域でのフィルタリングは、正しく行うのが難しいビジネスです。コードにいくつかのエラーがあり、元の画像を再構築できません。
フィルタリングを適用していますマグニチュードコンポーネントのみ。マグニチュード成分だけでなく、元の画像スペクトルでこれを行う必要があります。このフェーズは、適切な再構築に不可欠です。ところで、信号処理用語を作成するために実装しているのは、 ノッチフィルター または特定の選択周波数を除去するバンドストップフィルターです。
fftshift
を介してスペクトルを中央に配置しましたが、フィルタリングした後シフトを元に戻すのを忘れました。センタリングを元に戻すには、結果のフィルタリングされた画像でifftshift
を呼び出す必要があります。
log-transformed画像の逆FFTを見つけています。スペクトルの対数変換の実行は表示の目的でのみ行われることに注意してください。あなたしないこれをフィルタリングまたは逆を見つけるときに使用します。これを行うと、非線形操作のためにスペクトルの大部分が変更されたため、意図しない結果が生じます。元の画像スペクトル自体でそれを行う必要があります。
マイナーな注意ですが、逆FFTを実行した後、結果をフィルタリングした後は、必ずreal
を呼び出してください。計算浮動小数点エラーが原因である可能性が高いいくつかの仮想コンポーネントが残っているため、real
を呼び出すと、信号の実際のコンポーネントのみが抽出されます。
これらの修正により、これは私が持っているコードです。再現可能にするために、StackOverflowから直接画像を読み取りました。
pat1 = imread('http://i.stack.imgur.com/oIumJ.png');
%// Change
spec_orig = fft2(double(pat1));
spec_img = fftshift(spec_orig);
for j = 115:125
for n = 96:106
spec_img(n,j) = 0;
end
for n = 216:226
spec_img(n,j) = 0;
end
for n = 274:284
spec_img(n,j) = 0;
end
for n = 298:308
spec_img(n,j) = 0;
end
for n = 12:22
spec_img(n,j) = 0;
end
for n = 37:47
spec_img(n,j) = 0;
end
end
%// Change
ptnfx = real(ifft2(ifftshift(spec_img)));
imshow(ptnfx,[]);
私はこの画像を取得します:
追加する元の画像のかなり良い再構成。まだ少し筋が見られますが、それはノッチフィルターの形状とサイズに大きく依存します。おそらくサイズを大きくし、さらに大きくする場合は、ノッチフィルターの形状を正方形ではなく円形にします。正方形の角によって導入されたハードエッジには意図しないリンギング効果があるため、これは元の画像をより多く保持する傾向があります。