Main Content

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

multissim

画質のマルチスケール構造的類似性 (MS-SSIM) 指数

R2020a 以降

説明

score = multissim(I,Iref) は、Iref を参照イメージとして使用して、イメージ I のマルチスケール構造的類似性 (MS-SSIM) 指数 score を計算します。値が 1 に近いほど画質が高いことを示し、値が 0 に近いほど画質が低いことを示します。

MS-SSIM は、グレースケール イメージに対してのみ定義されます。入力の次元が 2 より大きい場合、multissim は、高次元の各要素を個別の 2 次元グレースケール イメージとして扱います。

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

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

すべて折りたたむ

イメージをワークスペースに読み込みます。

Iref = imread('pout.tif');

比較のために、ノイズを含むバージョンのイメージを作成します。

I = imnoise(Iref,'salt & pepper',0.05);

元のイメージとノイズを含むイメージを表示します。

figure; 
montage({Iref,I}); 

Figure contains an axes object. The axes object contains an object of type image.

参照イメージと比較した入力イメージの品質を測定する MS-SSIM 指数を計算します。

score = multissim(I,Iref)
score = single
    0.6732

イメージをワークスペースに読み込みます。

Iref = imread('pout.tif');
I = Iref;

イメージの局所化部分にノイズを追加します。

I(1:100,1:100) = imnoise(Iref(1:100,1:100),'salt & pepper',0.05);

元のイメージとノイズを含むイメージを表示します。

figure; 
montage({Iref,I});

Figure contains an axes object. The axes object contains an object of type image.

参照として元のイメージを使用して、ノイズを含むイメージの局所的 MS-SSIM 指数マップ qualitymaps を計算します。戻り値 qualitymaps は、イメージをスケーリングした各バージョンの品質マップをもつ cell 配列です。各マップは、イメージをスケーリングした対応するバージョンと同じサイズになります。

[~, qualitymaps] = multissim(I,Iref);
figure
montage(qualitymaps,'Size',[1 5])

Figure contains an axes object. The axes object contains an object of type image.

イメージをワークスペースに読み込みます。

Iref = imread('pout.tif');

比較のために、ノイズを含むバージョンのイメージを作成します。

I = imnoise(Iref,'salt & pepper',0.05);

元のイメージとノイズを含むバージョンのイメージを表示します。

figure; 
montage({Iref,I});

Figure contains an axes object. The axes object contains an object of type image.

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

score = multissim(I,Iref,'ScaleWeights',[0.0448,0.2856,0.3001,0.2363,0.1333])
score = single
    0.6773

カラー イメージをワークスペースに読み取ります。

RGB = imread("kobi.png");

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

RGBNoisy = imnoise(RGB,"salt & pepper");

2 つのイメージをモンタージュに表示します。

montage({RGB,RGBNoisy})

Figure contains an axes object. The axes object contains an object of type image.

ノイズを含むイメージの各カラー チャネルの MS-SSIM を計算します。

score = multissim(RGBNoisy,RGB);
score = squeeze(score)
score = 3x1 single column vector

    0.7084
    0.7135
    0.7066

カラー イメージをワークスペースに読み取ります。

ref = imread("strawberries.jpg");
ref = im2single(ref);

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

refBatch = repmat(ref,[1 1 1 6]);

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

noisyBatch = imnoise(refBatch,"salt & pepper");

元のイメージおよびノイズを含むイメージのバッチについて、書式化された dlarray オブジェクトを作成します。書式は "SSCB" (空間、空間、チャネル、バッチ) です。

dlrefBatch = dlarray(refBatch,"SSCB");
dlnoisyBatch = dlarray(noisyBatch,"SSCB");

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

scores = multissim(dlnoisyBatch,dlrefBatch);

空間次元に対応する大きさが 1 の次元を削除し、スコアを表示します。各要素は、バッチに含まれる 1 つのイメージの 1 つのカラー チャネルに関する MS-SSIM スコアを表します。

squeeze(scores)
ans = 
  3(C) x 6(B) single dlarray

    0.8334    0.8335    0.8348    0.8335    0.8340    0.8349
    0.8325    0.8316    0.8309    0.8310    0.8317    0.8326
    0.8140    0.8123    0.8166    0.8129    0.8136    0.8123

入力引数

すべて折りたたむ

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

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

参照イメージ。任意の次元の数値配列、または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。書式化された dlarray オブジェクトに、1 つより多いチャネル ラベル、1 つより多いバッチ ラベル、および 2 つより多い空間ラベルを含めることはできません。

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

名前と値の引数

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

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

例: score = multissim(I,Iref,"NumScales",3);

MS-SSIM 指数の計算に使用するスケールの数。正の整数として指定します。NumScales1 に設定することは、関数 ssim を使用して、名前と値の引数 Exponents[1 1 1] に設定することと同等です。入力イメージのサイズによって、スケールの数が制限されます。関数 multissim はイメージのスケーリングを (NumScales - 1) 回行い、スケーリングのたびにイメージを係数 2 でダウンサンプリングします。

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

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

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

等方性ガウス関数の標準偏差。正の数値として指定します。この値は、局所的な統計を推定する目的で、特定のピクセルの周囲の近傍ピクセルに重み付けを指定します。関数 multissim は重み付けを使用して、局所的な統計を推定する際のブロック アーティファクトを防ぎます。

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

入力イメージのダイナミック レンジ。正の数値として指定します。DynamicRange の既定値は、イメージ I のデータ型によって異なり、diff(getrangefromclass(I)) として計算されます。たとえば、既定のダイナミック レンジは、データ型 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 は最高画質を示し、IIref が等価である場合に発生します。値が小さくなると画質が低くなります。入力と名前と値のペアの引数の組み合わせによっては、score が負になることがあります。

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

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

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

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

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

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

アルゴリズム

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

関数 multissim は、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 で導入

すべて展開する