[問題]影像處理PSNR

看板C_Sharp (C#)作者 (m24)時間12年前 (2012/11/22 14:53), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
我想確認我的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
MAX代錯?2^bit-1....
11/22 16:51, 1F

11/22 17:16, , 2F
那不是2^8-1=256-1=255麼?
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
原圖為32bit PNG,不知道c#讀出來會不會有差異?
11/22 17:38, 5F

11/22 17:56, , 6F
我用scilab取出圖中的最大值,結果是255。但VS中的C#我還試
11/22 17:56, 6F

11/22 17:58, , 7F
那我是要用2^32-1麼?
11/22 17:58, 7F

11/22 17:59, , 8F
我明天再用好了。
11/22 17:59, 8F
文章代碼(AID): #1GhSln0V (C_Sharp)
文章代碼(AID): #1GhSln0V (C_Sharp)