接到網友桑尼的委託,我重操舊業,在Dev C++上安裝OpenCV 2.0,之前寫的PSNR (Peak Signal to Noise Ratio)程式碼馬上可以編譯執行,真的是讓我感到欣慰,因為當時舉手之勞記錄研究細節,至今還能派上用場!
桑尼所說的工具ImageJ和Photoshop有計算SNR 與 PSNR的工具,可惜前者下載回來不會用,後者找不到功能,只好我自己來寫!好在因為先前的研究記錄,讓我省下許多時間。
/**
Theme: SNR (Signal to Noise Ratio) & PSNR (Peak Signal to Noise Ratio)
compiler: Dev C++ 4.9.9.2
Library: OpenCV 2.0
Date: 103/12/10
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;
int main(){
IplImage *src1= cvLoadImage("moon_o.BMP");
IplImage *src2= cvLoadImage("moon_m.BMP");
long long int sigma = 0;
long long int squre = 0;
double MSE = 0.0;
double SNR = 0.0;
double PSNR = 0.0;
int frameSize = src1->height*src1->width*3;
int blue1=0, blue2=0;
int green1=0, green2=0;
int red1=0, red2=0;
// width x height -> [height][width]
for(int i=0;i<src1->height;i++){
for(int j=0;j<src1->widthStep;j=j+3){
blue1=(int)(uchar)src1->imageData[i*src1->widthStep+j];//Blue
green1=(int)(uchar)src1->imageData[i*src1->widthStep+j+1];//Green
red1=(int)(uchar)src1->imageData[i*src1->widthStep+j+2];//Red
blue2=(int)(uchar)src2->imageData[i*src2->widthStep+j];//Blue
green2=(int)(uchar)src2->imageData[i*src2->widthStep+j+1];//Green
red2=(int)(uchar)src2->imageData[i*src2->widthStep+j+2];//Red
sigma+=(blue1-blue2)*(blue1-blue2)+
(green1-green2)*(green1-green2)+
(red1-red2)*(red1-red2);
squre += blue1*blue1 + green1*green1 + red1*red1;
}
}
MSE=sigma/(double)frameSize;
PSNR=10*log10(255*255/MSE);
SNR = 10*log10(squre/sigma);
cout<<"sigma: "<<sigma<<endl;;
cout<<"MSE: "<<MSE<<endl;;
cout<<"PSNR: "<<PSNR<<endl;;
cout<<"SNR: "<<SNR<<endl;;
system("pause");
cvWaitKey(0);
return EXIT_SUCCESS;
}
與原始圖比較而得SNR與PSNR:
sigma: 33315106
MSE: 47.0664
PSNR: 31.4037
SNR: 21.038
sigma: 48069077
MSE: 67.9103
PSNR: 29.8114
SNR: 19.4448
這是第一次人家請我幫忙,主動要給我報酬的網友,雖然沒有報酬我也會幫忙,只是我只會給點提示,畢竟我時間有限,要去做更重要的事情!於是我更想幫助他~
以後若有網友請求協助,若能給點回饋,我願意撥出時間幫忙喔。現在的我報酬要求不高,然而會慢慢地朝目標時薪1000元,做越有意義價值的事情,就該得到越多的報酬回饋!想想我兩年的功力,濃縮成2小時的精華,你會覺得沒有賺到嗎?
話說,桑尼在南部是個夜間部大二的學生,早上去公司工作晚間去學校上課,有個八個月大的女兒。雖然我不知道他幾歲,但是學習真的不分年齡呢!






Comments on: "[OpenCV] SNR 與 PSNR" (1)
[…] [OpenCV] SNR 與 PSNR […]
讚讚