メインコンテンツ

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

R2026b

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

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

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

Figure contains an axes object. The hidden 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 hidden 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 hidden 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.

参考

トピック