このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ssim
画質を測定するための構造的類似性 (SSIM) 指数
説明
例
構造的類似性 (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))
dlarray
入力の SSIM の計算
イメージをワークスペースに読み取ります。別のバージョンのイメージを作成し、ブレ フィルターを適用します。
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
入力引数
A
— 画質測定用イメージ
数値配列 | dlarray
オブジェクト
画質測定用イメージ。数値配列または dlarray
(Deep Learning Toolbox) オブジェクトとして指定します。A
が、グレースケール イメージのスタックや RGB イメージのように、2 次元グレースケール イメージまたは 3 次元グレースケール ボリュームでない場合、名前と値の引数 DataFormat
を指定します。A
が書式化された dlarray
オブジェクトの場合は、名前と値の引数 DataFormat
を指定しないでください。
データ型: single
| double
| int16
| uint8
| uint16
ref
— 参照イメージ
数値配列 | dlarray
オブジェクト
画質の測定に使用する参照イメージ。サイズとデータ型が 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)
DataFormat
— 次元ラベル
string スカラー | 文字ベクトル
入力イメージ A
および ref
の次元ラベル。string スカラーまたは文字ベクトルとして指定します。DataFormat
の各文字は次のラベルのいずれかでなければなりません。
S
— 空間C
— チャネルB
— バッチ観測値
この書式に、1 つより多いチャネル ラベルまたはバッチ ラベルを含めることはできません。入力イメージが書式化された dlarray
オブジェクトの場合は、名前と値の引数 DataFormat
を指定しないでください。
例: "SSC"
は、2 つの空間次元と 1 つのチャネル次元が配列にあることを示します。これは、2 次元 RGB イメージ データに適しています。
例: "SSCB"
は、2 つの空間次元、1 つのチャネル次元、および 1 つのバッチ次元が配列にあることを示します。これは、2 次元 RGB イメージ データのシーケンスに適しています。
データ型: char
| string
DynamicRange
— 入力イメージのダイナミック レンジ
diff(getrangefromclass(A))
(既定値) | 正のスカラー
入力イメージのダイナミック レンジ。正のスカラーとして指定します。"DynamicRange"
の既定値は、イメージ A
のデータ型によって異なり、diff(
として計算されます。たとえば、既定のダイナミック レンジは、データ型 getrangefromclass
(A))uint8
のイメージに対して 255
です。データ型が double
または single
のイメージで、ピクセル値が [0, 1] の範囲であるイメージに対して既定値は 1
です。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
Exponents
— 輝度、コントラスト、構造の各項の指数
[1 1 1]
(既定値) | 非負の数値の 3 要素ベクトル
輝度、コントラスト、構造の各項の指数。[alpha beta gamma]
形式で非負の数値の 3 要素ベクトルとして指定します。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
Radius
— 等方性ガウス関数の標準偏差
1.5
(既定値) | 正の数値
等方性ガウス関数の標準偏差。正の数値として指定します。この値は、局所的な統計を推定する目的で、特定のピクセルの周囲の近傍ピクセルに重み付けするために使用します。この重み付けは、局所的な統計を推定する際のブロック歪みを防ぐために使用されます。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
RegularizationConstants
— 輝度、コントラスト、構造の各項の正則化定数
非負の数値の 3 要素ベクトル
輝度、コントラスト、構造の各項の正則化定数。[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
出力引数
ssimval
— SSIM 指数
数値スカラー | 数値配列 | dlarray
オブジェクト
SSIM 指数。次のいずれかの値として返されます。
入力イメージのタイプ | SSIM 値 |
---|---|
| 単一の SSIM 測定値をもつ数値スカラー。 |
| 単一の SSIM 測定値をもつスカラー |
| 入力イメージと同じ次元の数値配列。ssimval の空間次元は大きさが 1 の次元です。いずれかのチャネル次元またはバッチ次元の各要素には、1 つの SSIM 測定値が存在します。 |
| 入力イメージと同じ次元の dlarray オブジェクト。ssimval の空間次元は大きさが 1 の次元です。いずれかのチャネル次元またはバッチ次元の各要素には、1 つの SSIM 測定値が存在します。 |
ssimval
のデータ型は double
です。ただし、A
のデータ型が single
の場合、ssimval
のデータ型は single
になります。
ssimval
の値は一般に [0, 1] の範囲にあります。値 1 は最高画質を示し、A
と ref
が等価である場合に発生します。値が小さくなると画質が低くなります。入力と名前と値のペアの引数の組み合わせによっては、ssimval
が負になることがあります。
ssimmap
— SSIM 指数の局所的な値
数値配列 | dlarray
オブジェクト
SSIM 指数の局所的な値。次のいずれかの値として返されます。
入力イメージのタイプ | SSIM 値 |
---|---|
| 入力イメージと同じサイズの数値配列。入力イメージの各要素には、1 つの SSIM 測定値が存在します。 |
| 入力イメージと同じサイズの dlarray オブジェクト。入力イメージの各要素には、1 つの SSIM 測定値が存在します。 |
| 入力イメージと同じサイズの数値配列。入力イメージの各空間要素は、いずれかのチャネル次元またはバッチ次元ごとに 1 つの SSIM 測定値をもちます。 |
| 入力イメージと同じサイズの dlarray オブジェクト。入力イメージの各空間要素は、いずれかのチャネル次元またはバッチ次元ごとに 1 つの SSIM 測定値をもちます。 |
ssimmap
のデータ型は double
です。ただし、A
のデータ型が single
の場合、ssimmap
のデータ型は single
になります。
詳細
構造的類似性指数
イメージの 3 つの特徴である輝度、コントラスト、構造の視覚的影響を評価するイメージ画質メトリクスです。
ヒント
アルゴリズム
SSIM 指数画質評価インデックスは、3 つの項、つまり輝度項、コントラスト項および構造項の計算に基づいています。全体的なインデックスは、3 つの項を組み合わせて乗算したものです。
ここで、
ここで、μx、μy、σx、σy および σxy は、イメージ x, y の局所的な平均、標準偏差、相互共分散です。α = β = γ = 1 (Exponents
の既定値) かつ C3 = C2/2 (C3 の既定の選択肢) である場合、指数は次のように簡易化されます。
"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.
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細については、GPU でのイメージ処理を参照してください。
バージョン履歴
R2014a で導入R2021b: GPU による高速化のサポート
ssim
は、GPU による高速化をサポートするようになりました (Parallel Computing Toolbox™ が必要)。
R2021b: 深層学習配列および計算の次元指定のサポート
関数 ssim
は、深層学習アプリケーション用の dlarray
入力を受け入れます。
また、この関数は、'S'
(空間)、'C'
(チャネル)、および 'B'
(バッチ) の次元ラベルをもつ形式を整えたデータもサポートします。この関数は、チャネルとバッチ次元のインデックスごとに異なる結果を返します。
参考
psnr
| immse
| multissim
| multissim3
トピック
- さまざまな圧縮レベルでのイメージ画質の比較
- dlarray をサポートする関数の一覧 (Deep Learning Toolbox)
- カスタム学習ループ、損失関数、およびネットワークの定義 (Deep Learning 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)