Main Content

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

psnr

説明

peaksnr = psnr(A,ref) は、イメージ ref を参照イメージとして使用して、イメージ A のピーク S/N 比 (PSNR) を計算します。PSNR の値が大きくなるほど、画質がより高いことを示します。

peaksnr = psnr(A,ref,peakval) は、ピーク信号値 peakval を使用して、イメージ A の PSNR を計算します。

peaksnr = psnr(___,'DataFormat',dataFormat) は、書式化されていないイメージ データの次元ラベル dataFormat も指定します。バッチ次元の各要素の PSNR を個別に返すには、この構文を使用します。

[peaksnr,snr] = psnr(___) は、単純な S/N 比 snr も返します。

すべて折りたたむ

イメージを読み取り、ノイズを追加したコピーを作成します。元のイメージは参照イメージです。

ref = imread('pout.tif');
A = imnoise(ref,'salt & pepper', 0.02);

PSNR を計算します。

[peaksnr, snr] = psnr(A, ref);
  
fprintf('\n The Peak-SNR value is %0.4f', peaksnr);
 The Peak-SNR value is 22.6437
fprintf('\n The SNR value is %0.4f \n', snr);
 The SNR value is 15.5524 

イメージをワークスペースに読み取った後、イメージ データを使用して書式化されていない dlarray オブジェクトを作成します。

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

イメージにごま塩ノイズを加えた後、ノイズを含むイメージ データを使用して書式化されていない dlarray オブジェクトを作成します。

noisy = imnoise(ref,'salt & pepper');
dlnoisy = dlarray(noisy);

元のデータに対するノイズを含むデータのピーク SNR および SNR を計算します。

[peaksnr,snr] = psnr(dlnoisy,dlref)
peaksnr = 
  1x1 single dlarray

   17.5941

snr = 
  1x1 single dlarray

   11.1265

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

ref = imread("office_1.jpg");

参照イメージと同じサイズをもつ 6 個のイメージから成るシーケンスを格納するための 2 つの配列を事前に割り当てます。

numFrames = 6;
imsOriginal = zeros([size(ref) numFrames],class(ref));
imsNoisy = zeros([size(ref) numFrames],class(ref));

イメージを読み取り、事前に割り当てた配列にそのイメージを追加します。1 つの配列には、元のイメージ データを格納します。2 番目の配列には、ごま塩ノイズが追加されたイメージ データを格納します。

for p = 1:numFrames
    filename = strcat("office_",num2str(p),".jpg");
    im = imread(filename);
    imsOriginal(:,:,:,p) = im;
    imsNoisy(:,:,:,p) = imnoise(im,"salt & pepper");
end

イメージ シーケンスをモンタージュに表示します。最初の行には、元のイメージ データのシーケンスが表示されます。2 番目の行には、ノイズを含むイメージ データのシーケンスが表示されます。

montage(cat(4,imsOriginal,imsNoisy),"Size",[2 numFrames])

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

入力配列のデータ形式を "SSCB" (空間、空間、チャネル、バッチ) として指定し、ノイズを含む各イメージと対応する初期状態のイメージの PSNR を計算します。

peak_psnrs = psnr(imsNoisy,imsOriginal,"DataFormat","SSCB");
peak_psnrs = squeeze(peak_psnrs)
peak_psnrs = 6×1

   16.3560
   16.9698
   17.8079
   18.1843
   18.0656
   17.1682

入力引数

すべて折りたたむ

解析されるイメージ。任意の次元の数値配列、または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。

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

参照イメージ。数値配列または dlarray (Deep Learning Toolbox) オブジェクトとして指定します。参照イメージのサイズとデータ型はイメージ A と同じになります。

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

ピーク信号レベル。非負の数値として指定します。指定しない場合、peakval の既定値は、A および ref のクラスによって決まります。

  • イメージのデータ型が double または single の場合、psnr はイメージ データが範囲 [0, 1] にあると想定します。peakval の既定値は 1 です。

  • イメージが整数データ型である場合、peakval の既定値は、クラスの範囲で許容される最大値になります。uint8 データの場合、peakval の既定値は 255 です。uint16 または int16 の場合、既定値は 65535 です。

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

  • S — 空間

  • C — チャネル

  • B — バッチ観測値

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

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

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

出力引数

すべて折りたたむ

デシベル単位で表された PSNR。次のいずれかの値として返されます。

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

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

  • バッチ次元 ('B') を含まない書式化された数値配列

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

単一の PSNR 測定値をもつ 1 行 1 列の dlarray オブジェクト。
  • 引数 dataFormat を使用してバッチ次元が指定された数値配列

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

  • 引数 dataFormat を使用してバッチ次元が指定された、書式化されていない dlarray オブジェクト

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

A および ref のデータ型が single である場合、peaksnr のデータ型は single になります。そうでない場合、peaksnr のデータ型は double になります。

デシベル単位で表された S/N 比。次のいずれかの値として返されます。

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

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

  • バッチ次元 ('B') を含まない書式化された数値配列

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

単一の SNR 測定値をもつ 1 行 1 列の dlarray オブジェクト。
  • 引数 dataFormat を使用してバッチ次元が指定された数値配列

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

  • 引数 dataFormat を使用してバッチ次元が指定された、書式化されていない dlarray オブジェクト

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

A および ref のデータ型が single である場合、snr のデータ型は single になります。そうでない場合、snr のデータ型は double になります。

アルゴリズム

関数 psnr は次の等式を実装して PSNR を計算します。

PSNR=10log10(peakval2/MSE)

peakval は、ユーザーが指定するか、イメージのデータ型の範囲から取得されます。たとえば、データ型が uint8 であるイメージの場合、peakval255 となります。MSE は、Aref の間の平均二乗誤差です。

拡張機能

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2014a で導入

すべて展開する