[問題]影像處理PSNR
我想確認我的PSNR是否正確。
所以我以WIKI的圖來做測試
http://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio
他的Q=10, PSNR 31.45dB
因此我以此張做為測試圖,算出結果如下
寬為320的PSNR=25.0154
寬為640的PSNR=25.61
寬為800的PSNR=25.99
寬為1024的PSNR=26.575
寬為1280的PSNR=27.044
寬為2028的PSNR=28.88289
...就是沒有一個是31.45dB
以下為主要程式(我不太會排版):
--------------------------
private void button2_Click(object sender, EventArgs e) {
double se = 0;
OpenFileDialog openFileDialog2 = new OpenFileDialog();
openFileDialog2.InitialDirectory = "d:\\CODE\\images\\";
if (openFileDialog2.ShowDialog() == DialogResult.OK) {
ImageForm MyImage =
new ImageForm(openFileDialog2.FileName);//create object
pictureBox2.Image =
Image.FromFile(openFileDialog2.FileName);
CurrentImage2 = MyImage;
}
if (CurrentImage1 != null) {
int[, ,] rgbData1 = CurrentImage1.getRGBData();//GEG rgb MATRIX
int[, ,] rgbData2 = CurrentImage2.getRGBData();
if (rgbData1.GetLength(1) == rgbData2.GetLength(1)
&& rgbData1.GetLength(0) == rgbData2.GetLength(0)) {
int h = rgbData1.GetLength(1);//goat:768
int w = rgbData1.GetLength(0);//goat:1024
for (int k = 0; k < 3; k++) {
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
se = se +
(rgbData1[x, y, k] - rgbData2[x, y, k]) *
(rgbData1[x, y, k] - rgbData2[x, y, k]);
}
}
}
double psnr, mse;
mse = (double)se / ((double)h * (double)w * 3);
psnr = 10 * (Math.Log10(255 * 255 / mse));
lblPSNR.Text = psnr.ToString();
} else {
MessageBox.Show("請載入正確圖形");
}
} else {
MessageBox.Show("請先載入圖形");
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.249.32.1
推
11/22 16:51, , 1F
11/22 16:51, 1F
→
11/22 17:16, , 2F
11/22 17:16, 2F
→
11/22 17:23, , 3F
11/22 17:23, 3F
→
11/22 17:24, , 4F
11/22 17:24, 4F
→
11/22 17:38, , 5F
11/22 17:38, 5F
→
11/22 17:56, , 6F
11/22 17:56, 6F
→
11/22 17:58, , 7F
11/22 17:58, 7F
→
11/22 17:59, , 8F
11/22 17:59, 8F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章