Main Content

locallapfilt

イメージの高速な局所ラプラシアン フィルター処理

説明

B = locallapfilt(I,sigma,alpha) は、エッジ保存型の高速な局所ラプラシアン フィルターを使用してグレースケール イメージまたは RGB イメージ I をフィルター処理します。sigmaI のエッジの振幅の特徴を指定します。alpha は細部の平滑化を制御します。

B = locallapfilt(I,sigma,alpha,beta) は、A のダイナミック レンジを制御する beta を使用してイメージをフィルター処理します。

B = locallapfilt(___,Name=Value) は、フィルターの詳細な特性を制御する名前と値の引数を使用します。

すべて折りたたむ

RGB イメージをインポートします。

A = imread('peppers.png');

0.4 より小さい細部を増やすためにフィルターのパラメーターを設定します。

sigma = 0.4;
alpha = 0.5;

高速な局所ラプラシアン フィルター処理を使用します。

B = locallapfilt(A, sigma, alpha);

元のイメージとフィルター処理されたイメージを並べて表示します。

imshowpair(A, B, 'montage')

局所ラプラシアン フィルターは計算負荷の高いアルゴリズムです。処理を高速化するために、locallapfilt は強度の範囲を NumIntensityLevels パラメーターで定義されたサンプル数に離散化してアルゴリズムを近似します。このパラメーターを使用すると、速度と品質のバランスを保つことができます。

RGB イメージをインポートして表示します。

A = imread('peppers.png');
figure
imshow(A)
title('Original Image')

sigma 値で細部を処理し、alpha 値でコントラストを上げて、イメージの局所的なコントラストを効果的に強調します。

sigma = 0.2;
alpha = 0.3;

使用するサンプル数が少ないほど、実行速度は向上しますが、特に均一なコントラストの領域でアーティファクトが顕著になる可能性があります。強度レベルを 20 個のみ使用し、関数の時間を測定します。

t_speed = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20))  
t_speed = 0.0425

次に、イメージを処理して表示します。

B_speed = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20);
figure
imshow(B_speed)
title(['Enhanced with 20 intensity levels in ' num2str(t_speed) ' sec'])

サンプル数を多くすると、処理時間はかかりますが良好な結果が得られます。強度レベルを 100 個使用し、関数の時間を測定します。

t_quality = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100))
t_quality = 0.1056

100 個の強度レベルを含むイメージを処理して表示します。

B_quality = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100);
figure
imshow(B_quality)
title(['Enhancement with 100 intensity levels in ' num2str(t_quality) ' sec'])

個々のイメージの強度レベルの数を変化させて試してください。また、コントラストも下げてみてください (alpha > 1)。最適な強度レベルの数はイメージごとに異なり、alpha によって変わることがわかります。既定の設定では、locallapfilt は経験則によって速度と品質のバランスを保ちますが、すべてのイメージにとっての最適値を予測することはできません。

カラー イメージをインポートし、サイズを縮小して表示します。

A = imread('car2.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original Image')

0 ~ 1 に正規化された範囲で 0.3 より小さい細部を大幅に増やすためにフィルターのパラメーターを設定します。

sigma = 0.3;
alpha = 0.1;

2 つの異なるカラー フィルター処理モードを比較します。強度のフィルター処理とカラー チャネル別のフィルター処理によってイメージを処理します。

B_luminance = locallapfilt(A, sigma, alpha);
B_separate  = locallapfilt(A, sigma, alpha, 'ColorMode', 'separate');

フィルター処理されたイメージを表示します。

figure
imshow(B_luminance)
title('Enhanced by boosting the local luminance contrast')

figure
imshow(B_separate)
title('Enhanced by boosting the local color contrast')

同量のコントラスト強調が各イメージに適用されましたが、ColorModeseparate に設定したときの方が色の彩度が高くなります。

イメージをインポートします。人工的なノイズを簡単に追加できるようにイメージを浮動小数点に変換します。

A = imread('pout.tif');
A = im2single(A);

ゼロ平均、分散 0.001 のガウス ノイズを追加します。

A_noisy = imnoise(A, 'gaussian', 0, 0.001);
psnr_noisy = psnr(A_noisy, A);
fprintf('The peak signal-to-noise ratio of the noisy image is %0.4f\n', psnr_noisy);        
The peak signal-to-noise ratio of the noisy image is 30.0234

平滑化する細部の振幅を設定した後、適用する平滑化の量を設定します。

sigma = 0.1;
alpha = 4.0;

エッジ保存型フィルターを適用します。

B = locallapfilt(A_noisy, sigma, alpha);
psnr_denoised = psnr(B, A);
fprintf('The peak signal-to-noise ratio of the denoised image is %0.4f\n', psnr_denoised);
The peak signal-to-noise ratio of the denoised image is 32.3362

イメージの PSNR に改善が見られます。

3 つすべてのイメージを並べて表示します。細部は平滑化されていますが、エッジに沿った鮮明な強度変化は元のままです。

figure
subplot(1,3,1), imshow(A), title('Original')
subplot(1,3,2), imshow(A_noisy), title('Noisy')
subplot(1,3,3), imshow(B), title('Denoised')

イメージをインポートし、サイズを変更して表示します。

A = imread('car1.jpg');
A = imresize(A, 0.25);
figure
imshow(A)
title('Original Image')

車は汚れ、まだら模様です。ボディのほこりと模様を消してみましょう。平滑化する細部の振幅を設定し、適用する平滑化の量を大きく設定します。

sigma = 0.2;
alpha = 5.0;

平滑化 (alpha > 1) の場合、フィルターは少数の強度レベルで高品質の結果を生み出します。イメージの処理を高速化するために、少数の強度レベルを設定します。

numLevels = 16;

フィルターを適用します。

B = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', numLevels);

"汚れのない" 車を表示します。

figure
imshow(B)
title('After smoothing details')

入力引数

すべて折りたたむ

フィルター処理するイメージ。2 次元グレースケール イメージまたは 2 次元 RGB イメージとして指定します。

データ型: single | int8 | int16 | uint8 | uint16

エッジの振幅。非負の数値として指定します。整数イメージの場合および [0, 1] の範囲で定義される single イメージの場合、sigma は [0, 1] の範囲でなければなりません。また、single イメージが異なる範囲 [a, b] で定義される場合でも、sigma は [a, b] の範囲でなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

細部の平滑化。正の数値として指定します。alpha の一般的な値は、[0.01, 10] の範囲にあります。

説明
alpha1 より小さい入力イメージの細部を増やして、エッジへの影響やハローの発生を伴わずにイメージの局所的なコントラストを効果的に強調します。
alpha1 より大きい鮮明なエッジを維持しながら入力イメージの細部を平滑化します。
alpha1 に等しい入力イメージの細部をそのまま保持します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ダイナミック レンジ。非負の数値として指定します。beta の一般的な値は、[0, 5] の範囲にあります。betaA のダイナミック レンジに影響します。

説明
beta1 より小さいイメージ内のエッジの振幅を小さくして、細部に影響を与えずにダイナミック レンジを効果的に圧縮します。
beta1 より大きいイメージのダイナミック レンジを拡大します。
beta1 に等しいイメージのダイナミック レンジをそのまま保持します。これは既定値です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: B = locallapfilt(I,sigma,alpha,ColorMode="separate") は各カラー チャネルを個別にフィルター処理します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: B = locallapfilt(I,sigma,alpha,"ColorMode","separate") は各カラー チャネルを個別にフィルター処理します。

RGB イメージのフィルター処理に使用するメソッド。次のいずれかの値に指定します。この引数はグレースケール イメージには効果がありません。

説明
"luminance"locallapfilt はフィルター処理の前に入力 RGB イメージをグレースケールに変換し、フィルター処理後に色を再導入することで、色を損なうことなく入力イメージのコントラストを変更します。
"separate"locallapfilt は各カラー チャネルを個別にフィルター処理します。

データ型: char | string

入力イメージのダイナミック レンジの強度サンプル数。"auto" または正の整数として指定します。サンプル数が多いほど、厳密な局所ラプラシアン フィルター処理に近い結果が得られます。数が少ないほど、実行速度は向上します。一般的な値は、[10, 100] の範囲にあります。"auto" を設定すると、locallapfilt はフィルターの他のパラメーターに基づいて強度レベルの数を自動的に選択し、品質と速度のバランスを保ちます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

出力引数

すべて折りたたむ

フィルター処理されたイメージ。サイズとデータ型が入力イメージ A と同じ数値配列として返されます。

参照

[1] Paris, Sylvain, Samuel W. Hasinoff, and Jan Kautz. Local Laplacian filters: edge-aware image processing with a Laplacian pyramid, ACM Trans. Graph. 30.4 (2011): 68.

[2] Aubry, Mathieu, et al. Fast local laplacian filters: Theory and applications. ACM Transactions on Graphics (TOG) 33.5 (2014): 167.

バージョン履歴

R2016b で導入

すべて展開する