このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
multissim3
構文
説明
は、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(
は、1 つ以上の名前と値の引数を使用して計算の特性を制御します。たとえば、引数 V
,Vref
,Name,Value
)'NumScales'
を指定してスケールの数を指定します。
[
は、score
,qualityMaps
] = multissim3(___)V
と、V
をスケーリングした各バージョンにおける、各ボクセルの局所的な MS-SSIM 指数値も返します。qualityMaps
出力は、V
をスケーリングした各バージョンのマップをもつ cell 配列です。各品質マップは、スケーリングした対応するバージョンと同じサイズになります。
例
ボリュームの MS-SSIM 指数の計算
3 次元ボリュームをワークスペースに読み込みます。
load mri D Vref = squeeze(D);
品質測定の比較のために、元のボリュームにノイズを加えたバージョンを作成します。
V = imnoise(Vref,'salt & pepper',0.05);
参照ボリュームと比較した入力ボリュームの品質を測定する MS-SSIM 指数を計算します。
score = multissim3(V,Vref)
score = single
0.7261
MS-SSIM の計算と局所的な構造的類似性マップの取得
ボリュームをワークスペースに読み込みます。このボリュームは参照ボリュームとなります。参照ボリュームのコピーを作成します。
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);
ボリュームの MS-SSIM 指数を計算し、局所的な構造的類似性マップを取得します。関数 multissim3
は、ボリュームをスケーリングした各バージョンの局所的な構造的類似性マップをもつ cell 配列 qualitymaps
を返します。品質マップで値 1 は最高画質を示します。
[score, qualitymaps] = multissim3(V,Vref);
figure
sliceViewer(V,"Parent",figure);
スケーリングした各ボリュームの重みを指定した MS-SSIM の計算
ボリュームをワークスペースに読み込みます。
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]);
3 次元ボリューム スタックの MS-SSIM の計算
ボリューム イメージをワークスペースに読み取ります。
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
3 次元 dlarray
入力の MS-SSIM の計算
ボリューム イメージをワークスペースに読み取ります。
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
入力引数
V
— 入力ボリューム
数値配列 | dlarray
オブジェクト
入力ボリューム。次元が 3 以上の数値配列、または dlarray
(Deep Learning Toolbox) オブジェクトとして指定します。書式化された dlarray
オブジェクトに、1 つより多いチャネル ラベル、1 つより多いバッチ ラベル、および 3 つより多い空間ラベルを含めることはできません。
データ型: single
| double
| int16
| uint8
| uint16
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: score = multissim3(V,Vref,'NumScales',3);
NumScales
— スケールの数
5
(既定値) | 正の整数
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
— スケール全体における相対値
正の数値のベクトル
スケール全体における相対値。'ScaleWeights'
と正の数値のベクトルから構成されるコンマ区切りのペアとして指定します。各要素は元のボリュームをスケーリングしたバージョンの 1 つに対応しているため、ベクトルの長さはスケールの数に等しくなります。関数 multissim3
は値を 1 に正規化します。既定では、スケールの重みは fspecial
('gaussian',[1,numScales],1)
に等しくなります。既定では、関数 multissim3
はガウス分布を使用します。人間の視感度は中程度の周波数でピークに達し、周波数が高くても低くても感度が低下するためです。'ScaleWeights'
の設定例については、スケーリングした各ボリュームの重みを指定した MS-SSIM の計算を参照してください。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Sigma
— 標準偏差
1.5
(既定値) | 正の数値
等方性ガウス関数の標準偏差。'Sigma'
と正の数値で構成されるコンマ区切りのペアとして指定します。この値は、局所的な統計を推定する目的で、特定のボクセルの周囲の近傍ボクセルに重み付けを指定します。関数 multissim3
はこの重み付けを使用して、局所的な統計を推定する際のブロック アーティファクトを防ぎます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DynamicRange
— 入力ボリュームのダイナミック レンジ
正の数値
入力ボリュームのダイナミック レンジ。正の数値として指定します。DynamicRange
の既定値は、ボリューム V
のデータ型によって異なり、diff(
として計算されます。たとえば、既定のダイナミック レンジは、データ型が getrangefromclass
(V))uint8
であるボリュームの場合は 255
で、データ型が double
または single
かつボクセル値の範囲が [0, 1] であるボリュームの場合は 1
です。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
出力引数
score
— MS-SSIM 指数
数値スカラー | 数値配列 | dlarray
オブジェクト
画質の MS-SSIM 指数。表に示すように、数値スカラー、数値配列、または dlarray
(Deep Learning Toolbox) オブジェクトとして返されます。score
の値は一般に [0, 1] の範囲にあります。値 1 は最高画質を示し、V
と Vref
が等価である場合に発生します。値が小さくなると画質が低くなります。入力と名前と値のペアの引数の組み合わせによっては、score
が負になることがあります。
入力ボリュームのタイプ | MS-SSIM の値 |
---|---|
3 次元数値行列 | 単一の MS-SSIM 測定値をもつ数値スカラー。 |
3 次元 dlarray オブジェクト | 単一の MS-SSIM 測定値をもつ 1 行 1 列の dlarray オブジェクト。 |
N 次元数値配列 (N>3) | 入力ボリュームと同じ次元の数値配列。score の最初の 3 つの次元は大きさが 1 の次元です。高次元の各要素には 1 つの MS-SSIM 測定値が存在します。 |
書式化されていない N 次元 | 入力ボリュームと同じ次元の |
書式化された N 次元 | 入力ボリュームと同じ次元の dlarray オブジェクト。score の空間次元は大きさが 1 の次元です。いずれかのチャネル次元またはバッチ次元の各要素には、1 つの MS-SSIM 測定値が存在します。 |
qualityMaps
— 局所的 MS-SSIM 指数値
数値配列の cell 配列 | dlarray
オブジェクトの cell 配列
アルゴリズム
構造的類似性 (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.
拡張機能
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数は、スレッドベースの環境を完全にサポートします。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
R2020a で導入R2022b: スレッドベース環境のサポート
multissim3
は、スレッドベースの環境をサポートするようになりました。
R2021a: 深層学習配列のメトリクスの計算と計算の次元の指定
関数 multissim3
は、深層学習アプリケーション用の dlarray
入力を受け入れるようになりました。
また、この関数は、'S'
(空間)、'C'
(チャネル)、および 'B'
(バッチ) の次元ラベルをもつ書式設定済みデータもサポートします。バッチ次元をもつデータの場合、この関数はバッチ次元のインデックスごとに異なる結果を返します。
R2021a: GPU による高速化のサポート
multissim3
は、GPU による高速化をサポートするようになりました (Parallel Computing Toolbox™ が必要)。
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)