Main Content

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

multissim3

ボリュームの品質のマルチスケール構造的類似性 (MS-SSIM) 指数

R2020a 以降

説明

score = multissim3(V,Vref) は、Vref を参照ボリュームとして使用して、ボリューム V のマルチスケール構造的類似性 (MS-SSIM) 指数 score を計算します。値が 1 に近いほど品質が高いことを示し、値が 0 に近いほど品質が低いことを示します。

3 次元 MS-SSIM 演算は、グレースケール ボリュームに対して定義されています。入力の次元が 3 より大きい場合、multissim3 は、高次元の各要素を個別の 3 次元グレースケール ボリュームとして扱います。multissim3 は、2 次元 RGB イメージを 3 次元グレースケール ボリュームとして扱います。RGB イメージに含まれるカラー チャネルの MS-SSIM を計算するには、関数 multissim を使用します。

score = multissim3(V,Vref,Name,Value) は、1 つ以上の名前と値の引数を使用して計算の特性を制御します。たとえば、引数 'NumScales' を指定してスケールの数を指定します。

[score,qualityMaps] = multissim3(___) は、V と、V をスケーリングした各バージョンにおける、各ボクセルの局所的な MS-SSIM 指数値も返します。qualityMaps 出力は、V をスケーリングした各バージョンのマップをもつ cell 配列です。各品質マップは、スケーリングした対応するバージョンと同じサイズになります。

すべて折りたたむ

3 次元ボリュームをワークスペースに読み込みます。

load mri D
Vref = squeeze(D);

品質測定の比較のために、元のボリュームにノイズを加えたバージョンを作成します。

V = imnoise(Vref,'salt & pepper',0.05);

参照ボリュームと比較した入力ボリュームの品質を測定する MS-SSIM 指数を計算します。

score = multissim3(V,Vref)
score = single
    0.7261

ボリュームをワークスペースに読み込みます。このボリュームは参照ボリュームとなります。参照ボリュームのコピーを作成します。

load mri D
Vref = squeeze(D);
V = Vref;

品質測定の比較のために、ボリュームの局所化部分にノイズを追加します。

V(1:100,1:100,1:10) = imnoise(Vref(1:100,1:100,1:10),"salt & pepper",0.05);
figure
sliceViewer(V,"Parent",figure);

mssim3_ex_fig1.png

ボリュームの MS-SSIM 指数を計算し、局所的な構造的類似性マップを取得します。関数 multissim3 は、ボリュームをスケーリングした各バージョンの局所的な構造的類似性マップをもつ cell 配列 qualitymaps を返します。品質マップで値 1 は最高画質を示します。

[score, qualitymaps] = multissim3(V,Vref);
figure
sliceViewer(V,"Parent",figure);

mssim3_ex_fig2.png

ボリュームをワークスペースに読み込みます。

load mri D
Vref = squeeze(D);

品質測定の比較のために、ボリュームにノイズを加えたバージョンを作成します。

V = imnoise(Vref,'salt & pepper',0.05);

参照として元のボリュームを使用して、ノイズを含むボリュームの MS-SSIM 指数を計算します。'ScaleWeights' 引数を使用して、スケーリングした各ボリュームの局所的 MS-SSIM 指数の計算にどれだけ重み付けをするか指定します。この例では、Wang、Simoncelli、および Bovik による論文で定義された重みを使用します。

score = multissim3(V,Vref,'ScaleWeights',[0.0448,0.2856,0.3001,0.2363,0.1333]);

ボリューム イメージをワークスペースに読み取ります。

VRef = load("mristack.mat");
VRef = im2single(VRef.mristack);

4 番目の次元に沿ってイメージを複製し、6 つのイメージのバッチをシミュレートします。

VRefBatch = repmat(VRef,[1 1 1 6]);

ごま塩ノイズを加えたバージョンのイメージ スタックを作成します。

VNoisyBatch = imnoise(VRefBatch,"salt & pepper");

スタックに含まれる各ボリュームの MS-SSIM を計算します。

score = multissim3(VNoisyBatch,VRefBatch)
score = 1x1x1x6 single array
score(:,:,1,1) =

    0.8341


score(:,:,1,2) =

    0.8347


score(:,:,1,3) =

    0.8337


score(:,:,1,4) =

    0.8333


score(:,:,1,5) =

    0.8348


score(:,:,1,6) =

    0.8343

ボリューム イメージをワークスペースに読み取ります。

VRef = load("mristack.mat");
VRef = im2single(VRef.mristack);

イメージのバッチのコピーを作成し、ごま塩ノイズを加えます。

Vnoisy = imnoise(VRef,"salt & pepper");

元のイメージおよびノイズを含むイメージのバッチについて、書式化されていない dlarray オブジェクトを作成します。

dlref = dlarray(VRef);
dlnoisy = dlarray(Vnoisy);

ノイズを含むデータについて、元のデータに対する MS-SSIM スコアを計算します。

score = multissim3(dlnoisy,dlref)
score = 
  1x1 single dlarray

    0.8341

入力引数

すべて折りたたむ

入力ボリューム。次元が 3 以上の数値配列、または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。書式化された dlarray オブジェクトに、1 つより多いチャネル ラベル、1 つより多いバッチ ラベル、および 3 つより多い空間ラベルを含めることはできません。

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

参照ボリューム。次元が 3 以上の数値配列、または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。書式化された dlarray オブジェクトに、1 つより多いチャネル ラベル、1 つより多いバッチ ラベル、および 3 つより多い空間ラベルを含めることはできません。参照ボリュームのサイズとデータ型は入力ボリューム V と同じでなければなりません。

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

名前と値の引数

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

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

例: score = multissim3(V,Vref,'NumScales',3);

MS-SSIM の計算に使用するスケールの数。'NumScales' と正の整数で構成されるコンマ区切りのペアとして指定します。'NumScales'1 に設定することは、名前と値のペアの引数 'Exponents'[1 1 1] に設定した状態で関数 ssim を使用することと同等です。入力ボリュームのサイズによって、スケールの数が制限されます。関数 multissim3 はボリュームのスケーリングを (NumScales - 1) 回行い、スケーリングのたびにボリュームを係数 2 でダウンサンプリングします。

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

スケール全体における相対値。'ScaleWeights' と正の数値のベクトルから構成されるコンマ区切りのペアとして指定します。各要素は元のボリュームをスケーリングしたバージョンの 1 つに対応しているため、ベクトルの長さはスケールの数に等しくなります。関数 multissim3 は値を 1 に正規化します。既定では、スケールの重みは fspecial('gaussian',[1,numScales],1) に等しくなります。既定では、関数 multissim3 はガウス分布を使用します。人間の視感度は中程度の周波数でピークに達し、周波数が高くても低くても感度が低下するためです。'ScaleWeights' の設定例については、スケーリングした各ボリュームの重みを指定した MS-SSIM の計算を参照してください。

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

等方性ガウス関数の標準偏差。'Sigma' と正の数値で構成されるコンマ区切りのペアとして指定します。この値は、局所的な統計を推定する目的で、特定のボクセルの周囲の近傍ボクセルに重み付けを指定します。関数 multissim3 はこの重み付けを使用して、局所的な統計を推定する際のブロック アーティファクトを防ぎます。

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

入力ボリュームのダイナミック レンジ。正の数値として指定します。DynamicRange の既定値は、ボリューム V のデータ型によって異なり、diff(getrangefromclass(V)) として計算されます。たとえば、既定のダイナミック レンジは、データ型が uint8 であるボリュームの場合は 255 で、データ型が double または single かつボクセル値の範囲が [0, 1] であるボリュームの場合は 1 です。

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

出力引数

すべて折りたたむ

画質の MS-SSIM 指数。表に示すように、数値スカラー、数値配列、または dlarray (Deep Learning Toolbox) オブジェクトとして返されます。score の値は一般に [0, 1] の範囲にあります。値 1 は最高画質を示し、VVref が等価である場合に発生します。値が小さくなると画質が低くなります。入力と名前と値のペアの引数の組み合わせによっては、score が負になることがあります。

入力ボリュームのタイプMS-SSIM の値
3 次元数値行列単一の MS-SSIM 測定値をもつ数値スカラー。
3 次元 dlarray オブジェクト単一の MS-SSIM 測定値をもつ 1 行 1 列の dlarray オブジェクト。
N 次元数値配列 (N>3)入力ボリュームと同じ次元の数値配列。score の最初の 3 つの次元は大きさが 1 の次元です。高次元の各要素には 1 つの MS-SSIM 測定値が存在します。

書式化されていない N 次元 dlarray オブジェクト (N>3)

入力ボリュームと同じ次元の dlarray オブジェクト。score の最初の 3 つの次元は大きさが 1 の次元です。高次元の各要素には 1 つの MS-SSIM 測定値が存在します。

書式化された N 次元 dlarray オブジェクト (N>3)

入力ボリュームと同じ次元の dlarray オブジェクト。score の空間次元は大きさが 1 の次元です。いずれかのチャネル次元またはバッチ次元の各要素には、1 つの MS-SSIM 測定値が存在します。

スケーリングした各バージョンにおける各ピクセルの局所的 MS-SSIM 指数値。数値配列の cell 配列、または dlarray (Deep Learning Toolbox) オブジェクトの cell 配列として返されます。cell 配列のサイズは 1 行 NumScales 列です。qualityMaps の各要素は、対応するスケール係数における対応するピクセルの画質を示します。各要素の書式には、入力ボリュームの書式に基づいて引数 score の書式が使用されます。

アルゴリズム

構造的類似性 (SSIM) 指数は、ボリュームと参照ボリュームの間の構造的類似性を定量化することで、感性品質を測定します。 (ssim を参照)。関数 multissim3 は、さまざまなスケールの複数バージョンのボリュームの SSIM 指数を組み合わせることで、MS-SSIM を計算します。MS-SSIM 指数は SSIM 指数と比べて、表示条件の変動に対してロバストです。

関数 multissim3 は、double クラスの入力ボリュームには倍精度演算を使用します。その他すべての型の入力ボリュームには単精度演算を使用します。

参照

[1] Wang, Z., Simoncelli, E.P., Bovik, A.C. Multiscale Structural Similarity for Image Quality Assessment. In: The Thirty-Seventh Asilomar Conference on Signals, Systems & Computers, 2003, 1398–1402. Pacific Grove, CA, USA: IEEE, 2003. https://doi.org/10.1109/ACSSC.2003.1292216.

拡張機能

バージョン履歴

R2020a で導入

すべて展開する