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')

Figure contains an axes object. The axes object contains an object of type image.

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

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

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

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

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

sigma = 0.2;
alpha = 0.3;

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

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

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

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

Figure contains an axes object. The axes object with title Enhanced with 20 intensity levels in 0.074374 sec contains an object of type image.

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

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

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

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

Figure contains an axes object. The axes object with title Enhancement with 100 intensity levels in 0.2712 sec contains an object of type image.

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

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

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

Figure contains an axes object. The axes object with title Original Image contains an object of type 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 contains an axes object. The axes object with title Enhanced by boosting the local luminance contrast contains an object of type image.

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

Figure contains an axes object. The axes object with title Enhanced by boosting the local color contrast contains an object of type image.

同量のコントラスト強調が各イメージに適用されましたが、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')

Figure contains 3 axes objects. Axes object 1 with title Original contains an object of type image. Axes object 2 with title Noisy contains an object of type image. Axes object 3 with title Denoised contains an object of type image.

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

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

Figure contains an axes object. The axes object with title Original Image contains an object of type 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')

Figure contains an axes object. The axes object with title After smoothing details contains an object of type image.

入力引数

すべて折りたたむ

フィルター処理するイメージ。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 で導入

すべて展開する