Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

imdiffusefilt

イメージの異方性拡散フィルター処理

説明

J = imdiffusefilt(I) は異方性拡散フィルター処理をイメージ I に適用し、結果を J に返します。

J = imdiffusefilt(I,Name=Value) は、名前と値の引数を使用して、異方性拡散アルゴリズムの動作を変更します。

すべて折りたたむ

イメージをワークスペースに読み取って表示します。

I = imread('cameraman.tif');
imshow(I)
title('Original Image')

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

異方性拡散を使用してイメージを平滑化します。比較のために、ガウスぼかしも使用してイメージを平滑化します。芝生などのテクスチャ領域が両方の方法で同じ程度に平滑化されるように、ガウス平滑化カーネルの標準偏差 sigma を調整します。

Idiffusion = imdiffusefilt(I);
sigma = 1.2;
Igaussian = imgaussfilt(I,sigma);

結果を表示します。

montage({Idiffusion,Igaussian},'ThumbnailSize',[])
title('Smoothing Using Anisotropic Diffusion (Left) vs. Gaussian Blurring (Right)')

Figure contains an axes object. The axes object with title Smoothing Using Anisotropic Diffusion (Left) vs. Gaussian Blurring (Right) contains an object of type image.

異方性拡散では、ガウスぼかしよりエッジの鮮鋭度が維持されます。

グレースケール イメージを読み取り、強力なガウス ノイズをそれに適用します。ノイズを含むイメージを表示します。

I = imread('pout.tif');
noisyImage = imnoise(I,'gaussian',0,0.005);
imshow(noisyImage)
title('Noisy Image')

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

ノイズを含むイメージの画質を測定するために構造的類似性指数 (SSIM) を計算します。SSIM 値が 1 に近いほど、イメージはノイズなし参照イメージに近づきます。

n = ssim(I,noisyImage);
disp(['The SSIM value of the noisy image is ',num2str(n),'.'])
The SSIM value of the noisy image is 0.26556.

異方性拡散を使用してノイズを削減します。まず、異方性拡散フィルターで既定のパラメーターを試し、結果を表示します。

B = imdiffusefilt(noisyImage);
imshow(B)
title('Anisotropic Diffusion with Default Parameters')

Figure contains an axes object. The axes object with title Anisotropic Diffusion with Default Parameters contains an object of type image.

nB = ssim(I,B);
disp(['The SSIM value using default anisotropic diffusion is ',num2str(nB),'.'])
The SSIM value using default anisotropic diffusion is 0.65665.

イメージはノイズによりまだ劣化しているので、フィルターを調整します。2 次伝導法を選択します。エッジの高いコントラストよりも、広い均一な領域がイメージの特性であるからです。最適な勾配のしきい値と反復回数を関数 imdiffuseest を使用して推定します。結果のイメージを表示します。

[gradThresh,numIter] = imdiffuseest(noisyImage,'ConductionMethod','quadratic');
C = imdiffusefilt(noisyImage,'ConductionMethod','quadratic', ...
    'GradientThreshold',gradThresh,'NumberOfIterations',numIter);
imshow(C)
title('Anisotropic Diffusion with Estimated Parameters')

Figure contains an axes object. The axes object with title Anisotropic Diffusion with Estimated Parameters contains an object of type image.

nC = ssim(I,C);
disp(['The SSIM value using quadratic anisotropic diffusion is ',num2str(nC),'.'])
The SSIM value using quadratic anisotropic diffusion is 0.88135.

結果のイメージでは、ノイズはより少なくなっています。SSIM 値が 1 に近い場合、イメージの画質が改善されることを確認できます。

ノイズの多い 3 次元グレースケール MRI ボリュームを読み込みます。

load mristack

異方性拡散を使用してボリュームでエッジ保存型ノイズ削減を実行します。脳の低コントラストの特徴を過剰に平滑化しないために、反復回数を既定の回数 5 から減らします。トレードオフは除去されるノイズが減ることです。

diffusedImage = imdiffusefilt(mristack,'NumberOfIterations',3);

ノイズを含むイメージとフィルター済みのイメージの詳細を比較するために、両方の 10 番目のスライスを表示します。

imshowpair(mristack(:,:,10),diffusedImage(:,:,10),'montage')
title('Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right)')

Figure contains an axes object. The axes object with title Noisy Image (Left) vs. Anisotropic-Diffusion-Filtered Image (Right) contains an object of type image.

ボリュームのすべてのスライスに対して平均をとった、Naturalness Image Quality Evaluator (NIQE: 画質の自然らしさの評価) スコアを計算します。NIQE スコアにより参照イメージを必要としない、画質の量的測定が得られます。NIQE スコアが小さいほど知覚的な画質が良好なことを反映します。

nframes = size(mristack,3);
m = 0;
d = 0;
for i = 1:nframes
    m = m + niqe(mristack(:,:,i));
    d = d + niqe(diffusedImage(:,:,i));
end
mAvg = m/nframes;
dAvg = d/nframes;
disp(['The NIQE score of the noisy volume is ',num2str(mAvg),'.'])
The NIQE score of the noisy volume is 5.7794.
disp(['The NIQE score using anisotropic diffusion is ',num2str(dAvg),'.'])
The NIQE score using anisotropic diffusion is 4.1391.

NIQE スコアはフィルター済みイメージで、削減ノイズの観測値と整合性があります。

入力引数

すべて折りたたむ

フィルターするイメージ。m 行 n 列の 2 次元グレースケール イメージまたは m x n x k の 3 次元グレースケール ボリュームとして指定します。

メモ

カラー イメージに異方性拡散フィルター処理を適用するには、各カラー チャネルで個別に imdiffusefilt を使用します。

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

名前と値の引数

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

例: imdiffusefilt(I,NumberOfIterations=4,Connectivity="minimal") は 4 回の反復と最小の連結性を使用して、イメージ I で異方性拡散を実行します。

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

例: imdiffusefilt(I,"NumberOfIterations",4,"Connectivity","minimal") は 4 回の反復と最小の連結性を使用して、イメージ I で異方性拡散を実行します。

勾配のしきい値。数値スカラーまたは長さ NumberOfIterations の数値ベクトルとして指定します。GradientThreshold の値は、勾配値を実際のエッジまたはノイズに分類することにより伝導プロセスをコントロールします。GradientThreshold の値を増やすと、イメージがさらに平滑化されます。既定の値はイメージのダイナミック レンジの 10% です。関数 imdiffuseest を使用して GradientThreshold の適切な値を推定できます。

拡散プロセスで使用するための反復回数。正の整数として指定します。関数 imdiffuseest を使用して NumberOfIterations の適切な値を推定できます。

近傍とのピクセルの連結性。次の値のいずれかとして指定します。

  • "maximal" — 2 次元イメージでは 8 個の最近傍を、3 次元イメージでは 26 個の最近傍を考慮する

  • "minimal" — 2 次元イメージでは 4 個の最近傍を、3 次元イメージでは 6 個の最近傍を考慮する

伝導法。"exponential" または "quadratic" として指定します。指数拡散は高コントラストのエッジを低コントラストのエッジより優先します。2 次拡散は大きい領域を小さい領域より優先します。

出力引数

すべて折りたたむ

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

参照

[1] Perona, P., and J. Malik. "Scale-space and edge detection using anisotropic diffusion." IEEE® Transactions on Pattern Analysis and Machine Intelligence. Vol. 12, No. 7, July 1990, pp. 629–639.

[2] Gerig, G., O. Kubler, R. Kikinis, and F. A. Jolesz. "Nonlinear anisotropic filtering of MRI data." IEEE Transactions on Medical Imaging. Vol. 11, No. 2, June 1992, pp. 221–232.

拡張機能

バージョン履歴

R2018a で導入

すべて展開する