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