このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
locallapfilt
イメージの高速な局所ラプラシアン フィルター処理
構文
説明
は、フィルターの詳細な特性を制御する名前と値の引数を使用します。B
= locallapfilt(___,Name=Value
)
例
局所ラプラシアン フィルター処理を使用して RGB イメージの局所的なコントラストを増大
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.0744
次に、イメージを処理して表示します。
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.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'])
個々のイメージの強度レベルの数を変化させて試してください。また、コントラストも下げてみてください (alpha
> 1)。最適な強度レベルの数はイメージごとに異なり、alpha
によって変わることがわかります。既定の設定では、locallapfilt
は経験則によって速度と品質のバランスを保ちますが、すべてのイメージにとっての最適値を予測することはできません。
'ColorMode' を使用した局所的な色のコントラストの増大
カラー イメージをインポートし、サイズを縮小して表示します。
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')
入力引数
I
— フィルター処理するイメージ
2 次元グレースケール イメージ | 2 次元 RGB イメージ
フィルター処理するイメージ。2 次元グレースケール イメージまたは 2 次元 RGB イメージとして指定します。
データ型: single
| int8
| int16
| uint8
| uint16
sigma
— エッジの振幅
非負の数値
エッジの振幅。非負の数値として指定します。整数イメージの場合および [0, 1] の範囲で定義される single イメージの場合、sigma
は [0, 1] の範囲でなければなりません。また、single イメージが異なる範囲 [a
, b
] で定義される場合でも、sigma
は [a
, b
] の範囲でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
alpha
— 細部の平滑化
正の数値
細部の平滑化。正の数値として指定します。alpha
の一般的な値は、[0.01, 10] の範囲にあります。
値 | 説明 |
---|---|
alpha が 1 より小さい | 入力イメージの細部を増やして、エッジへの影響やハローの発生を伴わずにイメージの局所的なコントラストを効果的に強調します。 |
alpha が 1 より大きい | 鮮明なエッジを維持しながら入力イメージの細部を平滑化します。 |
alpha が 1 に等しい | 入力イメージの細部をそのまま保持します。 |
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
beta
— ダイナミック レンジ
1
(既定値) | 非負の数値
ダイナミック レンジ。非負の数値として指定します。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")
は各カラー チャネルを個別にフィルター処理します。
ColorMode
— RGB イメージのフィルター処理に使用するメソッド
"luminance"
(既定値) | "separate"
RGB イメージのフィルター処理に使用するメソッド。次のいずれかの値に指定します。この引数はグレースケール イメージには効果がありません。
値 | 説明 |
---|---|
"luminance" | locallapfilt はフィルター処理の前に入力 RGB イメージをグレースケールに変換し、フィルター処理後に色を再導入することで、色を損なうことなく入力イメージのコントラストを変更します。 |
"separate" | locallapfilt は各カラー チャネルを個別にフィルター処理します。 |
データ型: char
| string
NumIntensityLevels
— 強度サンプル数
"auto"
(既定値) | 正の整数
入力イメージのダイナミック レンジの強度サンプル数。"auto"
または正の整数として指定します。サンプル数が多いほど、厳密な局所ラプラシアン フィルター処理に近い結果が得られます。数が少ないほど、実行速度は向上します。一般的な値は、[10, 100]
の範囲にあります。"auto"
を設定すると、locallapfilt
はフィルターの他のパラメーターに基づいて強度レベルの数を自動的に選択し、品質と速度のバランスを保ちます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| char
| string
出力引数
B
— フィルター処理されたイメージ
数値配列
フィルター処理されたイメージ。サイズとデータ型が入力イメージ 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 で導入R2022b: パフォーマンスの向上
関数 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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)