看板 C_Sharp 關於我們 聯絡資訊
我想確認我的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
rainbow001:MAX代錯?2^bit-1.... 11/22 16:51
m24:那不是2^8-1=256-1=255麼? 11/22 17:16
rainbow001:你有是過單純算一種顏色嗎? 11/22 17:23
rainbow001: ^試 11/22 17:24
rainbow001:原圖為32bit PNG,不知道c#讀出來會不會有差異? 11/22 17:38
m24:我用scilab取出圖中的最大值,結果是255。但VS中的C#我還試 11/22 17:56
m24:那我是要用2^32-1麼? 11/22 17:58
m24:我明天再用好了。 11/22 17:59