Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ガイド付きフィルターを使用したフラッシュあり/フラッシュなしのノイズ除去の実行

この例では、ガイド付きフィルターを使用して、エッジを維持しながらイメージを平滑化し、ノイズを低減する方法を説明します。この例では、同じシーンの 2 つの写真を使用します。1 つはフラッシュを使用して撮影したもの、もう 1 つはフラッシュなしで撮影したものです。フラッシュなしのバージョンでは、色は維持されていますが、光量が少ないためノイズが多くなっています。この例では、フラッシュを使用して撮影したバージョンをガイド イメージとして使用します。

フィルター処理するイメージをワークスペースに読み取ります。この例では、フラッシュなしで撮影したいくつかのおもちゃのイメージを使用します。光量が少ないため、このイメージにはノイズが多く含まれています。

A = imread('toysnoflash.png');
figure;
imshow(A);
title('Input Image - Camera Flash Off')

Figure contains an axes object. The axes object with title Input Image - Camera Flash Off contains an object of type image.

ガイド イメージとして使用するイメージをワークスペースに読み取ります。この例で使用するガイド イメージは、同じシーンをフラッシュを使用して撮影した写真です。

G = imread('toysflash.png');
figure;
imshow(G);
title('Guidance Image - Camera Flash On')

Figure contains an axes object. The axes object with title Guidance Image - Camera Flash On contains an object of type image.

ガイド付きフィルター処理を実行します。関数 imguidedfilter を使用すると、フィルター処理に使用する近傍のサイズを指定できます。既定は 5 行 5 列の正方形です。この例では 3 行 3 列の近傍を使用します。フィルターで実行する平滑化の量も指定できます。この値には任意の正の数値を指定できます。これを行う方法の 1 つは、まず既定値を使用して結果を表示することです。平滑化を減らしてエッジ保存を増やす場合は、このパラメーターの値を小さくします。平滑化を増やす場合は、値を大きくします。この例では、平滑化パラメーターの値を設定します。

nhoodSize = 3;
smoothValue  = 0.001*diff(getrangefromclass(G)).^2;
B = imguidedfilter(A, G, 'NeighborhoodSize',nhoodSize, 'DegreeOfSmoothing',smoothValue);
figure, imshow(B), title('Filtered Image')

Figure contains an axes object. The axes object with title Filtered Image contains an object of type image.

元のイメージの一部をクローズアップして調べ、フィルター処理されたイメージと比較して、このエッジ保存平滑化フィルターの効果を確認します。

figure; 
h1 = subplot(1,2,1); 
imshow(A), title('Region in Original Image'), axis on
h2 = subplot(1,2,2); 
imshow(B), title('Region in Filtered Image'), axis on
linkaxes([h1 h2])
xlim([520 660])
ylim([150 250])

Figure contains 2 axes objects. Axes object 1 with title Region in Original Image contains an object of type image. Axes object 2 with title Region in Filtered Image contains an object of type image.

参考

関連するトピック