locallapfilt
イメージの高速な局所ラプラシアン フィルター処理
構文
説明
例
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.0328
次に、イメージを処理して表示します。
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.1039
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')
同量のコントラスト強調が各イメージに適用されましたが、ColorMode を separate に設定したときの方が色の彩度が高くなります。
イメージをインポートします。人工的なノイズを簡単に追加できるようにイメージを浮動小数点に変換します。
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] の範囲にあります。
| 値 | 説明 |
|---|---|
alpha が 1 より小さい | 入力イメージの細部を増やして、エッジへの影響やハローの発生を伴わずにイメージの局所的なコントラストを効果的に強調します。 |
alpha が 1 より大きい | 鮮明なエッジを維持しながら入力イメージの細部を平滑化します。 |
alpha が 1 に等しい | 入力イメージの細部をそのまま保持します。 |
データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ダイナミック レンジ。非負の数値として指定します。beta の一般的な値は、[0, 5] の範囲にあります。beta は A のダイナミック レンジに影響します。
| 値 | 説明 |
|---|---|
beta が 1 より小さい | イメージ内のエッジの振幅を小さくして、細部に影響を与えずにダイナミック レンジを効果的に圧縮します。 |
beta が 1 より大きい | イメージのダイナミック レンジを拡大します。 |
beta が 1 に等しい | イメージのダイナミック レンジをそのまま保持します。これは既定値です。 |
データ型: 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 で導入関数 locallapfilt のパフォーマンスが向上しました。たとえば、次のコードは前のリリースよりも約 6.8 倍高速化しています。
function locallapfiltTimingTest A = imread("peppers.png"); locallapfilt(A,0.4,0.5); end
およその実行時間は次のとおりです。
R2022a: 0.254 秒
R2022b: 0.037 秒
コードの時間計測は、Windows® 10、Intel® Xeon® E5-2683 v4 CPU @ 2.10 GHz テスト システム (2 個のプロセッサ) 上で、関数 timeit を使用して行いました。
timeit(@locallapfiltTimingTest)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)