忍者ブログ
http://who7s.blog.shinobi.jp/
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

画像の圧縮等を行い、その変換後の画像がどれ程劣化したかを客観的に評価する指標の一つにPSNR(Peak Signal-to-Noise Ratio)というものがある。
式にすると以下のようになる。
PSNR
単位はデシベル[dB]
MAXは元画像がとりうる最大画素値のことである。
また、この式の中であらわされるMSEとは平均二乗誤差(Mean Squere Error)のことであり、以下の式になる。
MSE
m, nが画像の縦、横のサイズ。
Xが元画像、X'が劣化画像を示す。

平均二乗誤差 = ((原画の輝度 - デコード後の輝度) ^ 2) の総和 / 画素数
PSNR = 10 * log(255*255 / 平均二乗誤差)
引用:PSNRとは - Mov日記 - Fraternity7

一般に高画質とされるのは35~40dB以上とされている。
また0.2dB違えば、主観的にみても変化があるとされる。

参考:tobinaka's forum • トピック表示 - 画質指標 PSNR, SSIM と psy 的オプションと


このPSNRを求めるプログラムは次のとおり。
【引数】
srcImg: 元画像
trsImg: 劣化画像
rows: 行数
cols: 列数
返り値にPSNRをdouble型で返す。

#include<math.h>

double calcPSNR(double *srcImg, double *trsImg, int rows, int cols)
{
	int i, j, icols;
	double e, E, psnr, mse, max;
	
	E = max = 0.0;
	for(i = 0; i < rows; i++){
		icols = i * cols;
		for(j = 0; j < cols; j++){
			if(max < *(srcImg + icols + j)) max = *(srcImg + icols + j);
			e = *(srcImg + icols + j) - *(trsImg + icols + j);
			E += e * e;
		}
	}
	mse = E / (rows * cols);
	psnr = 10.0 * log10(max * max / mse);
	
	return psnr;
}

一般にPSNRはモノクロ画像に対して行われる。
カラー画像に対して行う場合は、Y値で取る方法や、RGBそれぞれの画素値で求める方法などがある。
参考:画像の評価法
MAXの値については、255と固定しても良いかもしれない。
(むしろ、そちらの方が正しい?)

PR
<< Google SEO スターターガイド HOME VMware PlayerによるUbuntu体験 >>
[25]  [24]  [23]  [22]  [21]  [20]  [19]  [18]  [17]  [16]  [15
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
サブカテゴリー

[プログラミング]

アルゴリズム
C
Java
VisualBasic
PHP
HTML/CSS

最新コメント
プロフィール
HN:
Juan
性別:
男性
自己紹介:
社会人1年目。
システムエンジニア見習いとなるべく勉強中。
カスタマイズに特化したブラウザ Sleipnir。上級者のために。
Mozilla Firefox ブラウザ無料ダウンロード
カウンター
バーコード
BlogParts

Copyight© who7s All Rights Reserved.
Designed by who7s.
忍者ブログ [PR]