Main Content

ssim

画質を測定するための構造的類似性 (SSIM) 指数

説明

ssimval = ssim(A,ref) は、ref を参照イメージまたはボリュームとして使用して、グレースケール イメージまたはボリューム A の構造的類似性 (SSIM) 指数を計算します。値が 1 に近いほど画質が高いことを示します。

ssimval = ssim(A,ref,Name,Value) は、計算の特性を制御する名前と値のペアを使用して、SSIM を計算します。

[ssimval,ssimmap] = ssim(___) は、A 内の各ピクセルまたはボクセルの局所的な SSIM 値も返します。

すべて折りたたむ

イメージをワークスペースに読み取ります。別のバージョンのイメージを作成し、ブレ フィルターを適用します。

ref = imread("pout.tif");
H = fspecial("Gaussian",[11 11],1.5);
A = imfilter(ref,H,"replicate");

両方のイメージをモンタージュとして表示します。格子のエッジなどコントラストが大きくシャープな領域に沿って、イメージの違いがはっきりと表れます。

montage({ref,A})
title("Reference Image (Left) vs. Blurred Image (Right)")

イメージのグローバル SSIM 値と、各ピクセルの局所的 SSIM 値を計算します。

[ssimval,ssimmap] = ssim(A,ref);

局所的 SSIM マップを表示します。Figure のタイトルにグローバル SSIM 値を含めます。局所的 SSIM の小さい値は、局所的 SSIM マップに暗いピクセルとして表示されます。小さい局所的 SSIM 値をもつ領域は、ブレを含むイメージが参照イメージと顕著に異なる領域に対応します。局所的 SSIM 値の大きい値は、明るいピクセルとして表示されます。大きい局所的 SSIM をもつ領域は、ブレがイメージに与える影響が少ない、参照イメージの一様な領域に対応します。

imshow(ssimmap,[])
title("Local SSIM Map with Global SSIM Value: "+num2str(ssimval))

イメージをワークスペースに読み取ります。別のバージョンのイメージを作成し、ブレ フィルターを適用します。

ref = imread("pout.tif");
A = imgaussfilt(ref,1.5,"FilterSize",11,"Padding","replicate");

両方のイメージをモンタージュとして表示します。

montage({ref A})
title("Reference Image (Left) vs. Blurred Image (Right)")

参照イメージおよびブレを含むイメージを 4 番目の次元に沿って 16 回複製し、イメージのバッチをシミュレートします。

A = repmat(A,[1 1 1 16]);
ref = repmat(ref,[1 1 1 16]);

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

A = dlarray(single(A),"SSCB"); 
ref = dlarray(single(ref),"SSCB");

イメージのグローバル SSIM 値と、各ピクセルの局所的 SSIM 値を計算します。ssimVal は、バッチに含まれる各イメージのスカラー SSIM 値を返します。ssimMap は、バッチに含まれる各イメージの SSIM 値のマップを返します。このマップのサイズはイメージのサイズと同じです。

[ssimVal,ssimMap] = ssim(A,ref);
size(ssimVal)
ans = 1×4

     1     1     1    16

size(ssimMap)
ans = 1×4

   291   240     1    16

入力引数

すべて折りたたむ

画質測定用イメージ。数値配列または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。A が、グレースケール イメージのスタックや RGB イメージのように、2 次元グレースケール イメージまたは 3 次元グレースケール ボリュームでない場合、名前と値の引数 DataFormat を指定します。A が書式化された dlarray オブジェクトの場合は、名前と値の引数 DataFormat を指定しないでください。

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

画質の測定に使用する参照イメージ。サイズとデータ型が A と同じ数値配列または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。ref が、グレースケール イメージのスタックや RGB イメージのように、2 次元グレースケール イメージまたは 3 次元グレースケール ボリュームでない場合、名前と値の引数 DataFormat を指定します。ref が書式化された dlarray オブジェクトの場合は、名前と値の引数 DataFormat を指定しないでください。

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

名前と値の引数

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

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

例: ssim(A,ref,"DynamicRange",100)

入力イメージ A および ref の次元ラベル。string スカラーまたは文字ベクトルとして指定します。DataFormat の各文字は次のラベルのいずれかでなければなりません。

  • S — 空間

  • C — チャネル

  • B — バッチ観測値

この書式に、1 つより多いチャネル ラベルまたはバッチ ラベルを含めることはできません。入力イメージが書式化された dlarray オブジェクトの場合は、名前と値の引数 DataFormat を指定しないでください。

例: "SSC" は、2 つの空間次元と 1 つのチャネル次元が配列にあることを示します。これは、2 次元 RGB イメージ データに適しています。

例: "SSCB" は、2 つの空間次元、1 つのチャネル次元、および 1 つのバッチ次元が配列にあることを示します。これは、2 次元 RGB イメージ データのシーケンスに適しています。

データ型: char | string

入力イメージのダイナミック レンジ。正のスカラーとして指定します。"DynamicRange" の既定値は、イメージ A のデータ型によって異なり、diff(getrangefromclass(A)) として計算されます。たとえば、既定のダイナミック レンジは、データ型 uint8 のイメージに対して 255 です。データ型が double または single のイメージで、ピクセル値が [0, 1] の範囲であるイメージに対して既定値は 1 です。

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

輝度、コントラスト、構造の各項の指数。[alpha beta gamma] 形式で非負の数値の 3 要素ベクトルとして指定します。

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

等方性ガウス関数の標準偏差。正の数値として指定します。この値は、局所的な統計を推定する目的で、特定のピクセルの周囲の近傍ピクセルに重み付けするために使用します。この重み付けは、局所的な統計を推定する際のブロック歪みを防ぐために使用されます。

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

輝度、コントラスト、構造の各項の正則化定数。[c1 c2 c3] 形式で非負の数値の 3 要素ベクトルとして指定します。関数 ssim は、これらの正則化定数を使用して、局所的な平均または標準偏差がゼロに近いイメージ領域が不安定になるのを防止します。したがって、これらの定数にはゼロ以外の小さい値を使用してください。

既定では以下のようになります。

  • C1 = (0.01*L).^2 (L は指定された DynamicRange 値)

  • C2 = (0.03*L).^2 (L は指定された DynamicRange 値)

  • C3 = C2/2

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

出力引数

すべて折りたたむ

SSIM 指数。次のいずれかの値として返されます。

入力イメージのタイプSSIM 値

  • 書式化されていない数値配列

  • チャネル次元 ("C") もバッチ次元 ("B") も含まない書式化された数値配列

単一の SSIM 測定値をもつ数値スカラー。
  • 書式化されていない dlarray (Deep Learning Toolbox) オブジェクト

単一の SSIM 測定値をもつスカラー dlarray オブジェクト。

  • 名前と値の引数 DataFormat を使用してチャネル次元またはバッチ次元が指定された数値配列

入力イメージと同じ次元の数値配列。ssimval の空間次元は大きさが 1 の次元です。いずれかのチャネル次元またはバッチ次元の各要素には、1 つの SSIM 測定値が存在します。
  • チャネル次元またはバッチ次元を含む書式化された dlarray オブジェクト

  • 名前と値の引数 DataFormat を使用してチャネル次元またはバッチ次元が指定された、書式化されていない dlarray オブジェクト

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

ssimval のデータ型は double です。ただし、A のデータ型が single の場合、ssimval のデータ型は single になります。

ssimval の値は一般に [0, 1] の範囲にあります。値 1 は最高画質を示し、Aref が等価である場合に発生します。値が小さくなると画質が低くなります。入力と名前と値のペアの引数の組み合わせによっては、ssimval が負になることがあります。

SSIM 指数の局所的な値。次のいずれかの値として返されます。

入力イメージのタイプSSIM 値

  • 書式化されていない数値配列

  • チャネル次元 ("C") もバッチ次元 ("B") も含まない書式化された数値配列

入力イメージと同じサイズの数値配列。入力イメージの各要素には、1 つの SSIM 測定値が存在します。
  • 書式化されていない dlarray (Deep Learning Toolbox) オブジェクト

入力イメージと同じサイズの dlarray オブジェクト。入力イメージの各要素には、1 つの SSIM 測定値が存在します。
  • 名前と値の引数 DataFormat を使用してチャネル次元またはバッチ次元が指定された数値配列

入力イメージと同じサイズの数値配列。入力イメージの各空間要素は、いずれかのチャネル次元またはバッチ次元ごとに 1 つの SSIM 測定値をもちます。
  • チャネル次元またはバッチ次元を含む書式化された dlarray オブジェクト

  • 名前と値の引数 DataFormat を使用してチャネル次元またはバッチ次元が指定された、書式化されていない dlarray オブジェクト

入力イメージと同じサイズの dlarray オブジェクト。入力イメージの各空間要素は、いずれかのチャネル次元またはバッチ次元ごとに 1 つの SSIM 測定値をもちます。

ssimmap のデータ型は double です。ただし、A のデータ型が single の場合、ssimmap のデータ型は single になります。

詳細

すべて折りたたむ

構造的類似性指数

イメージの 3 つの特徴である輝度、コントラスト、構造の視覚的影響を評価するイメージ画質メトリクスです。

ヒント

  • Aref によって RGB イメージ データが指定されている場合、名前と値の引数 "DataFormat" を使用してチャネル次元 "C" にラベルを付けてください。その後、ssimvalssimmap のチャネル次元に関数 mean を適用し、イメージ全体の SSIM 指数の近似値を求めることができます。

アルゴリズム

SSIM 指数画質評価インデックスは、3 つの項、つまり輝度項、コントラスト項および構造項の計算に基づいています。全体的なインデックスは、3 つの項を組み合わせて乗算したものです。

SSIM(x,y)=[l(x,y)]α[c(x,y)]β[s(x,y)]γ

ここで、

l(x,y)=2μxμy+C1μx2+μy2+C1,c(x,y)=2σxσy+C2σx2+σy2+C2,s(x,y)=σxy+C3σxσy+C3

ここで、μx、μy、σx、σy および σxy は、イメージ x, y の局所的な平均、標準偏差、相互共分散です。α = β = γ = 1 (Exponents の既定値) かつ C3 = C2/2 (C3 の既定の選択肢) である場合、指数は次のように簡易化されます。

SSIM(x,y)=(2μxμy+C1)(2σxy+C2)(μx2+μy2+C1)(σx2+σy2+C2)

"Exponents" に整数以外の値を指定した場合、関数 ssim は、中間の輝度、コントラスト、構造の各項を範囲 [0, inf] に固定することで、複素数値の出力を防ぎます。

参照

[1] Zhou, W., A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli. "Image Quality Assessment: From Error Visibility to Structural Similarity." IEEE Transactions on Image Processing. Vol. 13, Issue 4, April 2004, pp. 600–612.

拡張機能

バージョン履歴

R2014a で導入

すべて展開する