图像质量评估
2016-04-28 11:52
323 查看
图像质量评估
http://jingyan.baidu.com/article/cbf0e500f5505a2eab28936e.html
【客观评价方法】
图像质量的客观评价方法是根据人眼的主观视觉系统建立数学模型,并通过具体的公式计算图像的质量。传统的图像质量客观评价方法主要包括均方误差(MSE,mean squared error)和峰值信噪比(PSNR,peak signal to noise rate)。均方误差法首先计算原始图像和失真像象素差值的均方值,然后通过均方值的大小来确定失真图像的失真程度。计算公式如图。
其中M、N为图像的长和宽,ijf表示原始图像的象素值,‘ijf表示降质后图像的象素值。
PSNR作为衡量图像质量的重要指标,基于通信理论而提出,是最大信号量与噪声强度的比值。由于数字图像都是以离散的数字表示图像的像素,因此采用图像的最大象素值来代替最大信号量。具体公式如图。
其中 L 为图像中像素的最大灰度值,一般采用255。
自己写的图像质量评估软件平台:
截图(测试图片来源网络)
http://jingyan.baidu.com/article/cbf0e500f5505a2eab28936e.html
【客观评价方法】
图像质量的客观评价方法是根据人眼的主观视觉系统建立数学模型,并通过具体的公式计算图像的质量。传统的图像质量客观评价方法主要包括均方误差(MSE,mean squared error)和峰值信噪比(PSNR,peak signal to noise rate)。均方误差法首先计算原始图像和失真像象素差值的均方值,然后通过均方值的大小来确定失真图像的失真程度。计算公式如图。
其中M、N为图像的长和宽,ijf表示原始图像的象素值,‘ijf表示降质后图像的象素值。
PSNR作为衡量图像质量的重要指标,基于通信理论而提出,是最大信号量与噪声强度的比值。由于数字图像都是以离散的数字表示图像的像素,因此采用图像的最大象素值来代替最大信号量。具体公式如图。
其中 L 为图像中像素的最大灰度值,一般采用255。
自己写的图像质量评估软件平台:
截图(测试图片来源网络)
//计算 void CImagesQualityEvaluationToolDlg::OnBnClickedButton2() { if((image_in_1.rows != image_in_2.rows)||(image_in_1.cols != image_in_2.cols) ||(image_in_1.rows != image_in_2.rows)||(image_in_1.cols != image_in_2.cols)) { CString str_Problem("图片1和2大小不一致"); GetDlgItem(IDC_EDIT1)->SetWindowText(str_Problem); return; } //unsigned char***imgrow= NULL; //imgrow=ZL_allocu_3(image_in_1.rows,image_in_1.cols,3); //allocate memory double MSE_b=0.,MSE_g=0.,MSE_r=0.,MSE=0.,PSNR_b=0.,PSNR_g=0.,PSNR_r=0.,PSNR=0.; for (int row = 0; row < image_in_1.rows; row++) { for (int col = 0; col < image_in_1.cols; col++) { /* //[row, col]像素的第 1 通道地址被 * 解析(b通道) imgrow[row][col][2] = *(image_in_1.data + image_in_1.step[0] * row + image_in_1.step[1] * col); //[row, col]像素的第 2 通道地址被 * 解析(g通道) imgrow[row][col][1] = *(image_in_1.data + image_in_1.step[0] * row + image_in_1.step[1] * col + image_in_1.elemSize1()); //[row, col]像素的第 3 通道地址被 * 解析(r通道) imgrow[row][col][0] = *(image_in_1.data + image_in_1.step[0] * row + image_in_1.step[1] * col + image_in_1.elemSize1() * 2); */ MSE_b += pow((double)(*(image_in_2.data + image_in_2.step[0] * row + image_in_2.step[1] * col) - *(image_in_1.data + image_in_1.step[0] * row + image_in_1.step[1] * col)),2); MSE_g += pow((double)(*(image_in_2.data + image_in_2.step[0] * row + image_in_2.step[1] * col + image_in_2.elemSize1()) - *(image_in_1.data + image_in_1.step[0] * row + image_in_1.step[1] * col + image_in_1.elemSize1())),2); MSE_r += pow((double)(*(image_in_2.data + image_in_2.step[0] * row + image_in_2.step[1] * col + image_in_2.elemSize1() * 2) - *(image_in_1.data + image_in_1.step[0] * row + image_in_1.step[1] * col + image_in_1.elemSize1() * 2)),2); } } int WH = image_in_1.rows * image_in_1.cols; MSE_b = MSE_b/WH; MSE_g = MSE_g/WH; MSE_r = MSE_r/WH; if(MSE_b != 0.) { PSNR_b = 10*log(pow(255.,2)/MSE_b); } if(MSE_g != 0.) { PSNR_g = 10*log(pow(255.,2)/MSE_g); } if(MSE_r != 0.) { PSNR_r = 10*log(pow(255.,2)/MSE_r); } PSNR = (PSNR_b+PSNR_g+PSNR_r)/3; CString str_PSNR; str_PSNR.Format("%f",PSNR); GetDlgItem(IDC_EDIT1)->SetWindowText(str_PSNR); }
//加载图像 void CImagesQualityEvaluationToolDlg::OnBnClickedButton1() { CFileDialog Dlg(1,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("TXT Files(*.PNG)|*.JPG|All Files(*.*)|*.*")); //打开文件 if(Dlg.DoModal() == IDOK) //是否打开成功 { CString FilePathName; //文件名参数定义 //FilePathName(_T("")); //初始化 FilePathName = Dlg.GetPathName(); //取得文件路径及文件名 SetDlgItemText(IDC_EDIT3,FilePathName); //在一个地址为IDC_EDIT3的editbox中显示文件名 char *p =(LPSTR)(LPCSTR)FilePathName; image_in_1 = imread(p); IplImage *Ipl_image_in; Ipl_image_in=&IplImage(image_in_1); DrawPicToHDC(Ipl_image_in, IDC_STATIC_P);//IDC_STATIC } else //打开失败处理 { MessageBox(_T("打开失败"),NULL,MB_OK); } }
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- JSON转化不完全,持续更新
- 【java】获取一年里某季、某月、某周的第一天及最后一天时间(日期工具类)
- oracle.jbo.JboException: JBO-29000: JBO-29000: Bad version number in .class file
- Install Docker Machine
- Elasticsearch 基础笔记
- Myeclipse10运行web程序时报java.lang.OutOfMemoryError: PermGen space时比较
- 如何搭建一台 通过SVN 提交代码自动发布的 nodeJs 服务器.
- 坑
- {a:A;b:B}---放入ArrayList中------------
- Slickflow.NET 开源工作流引擎基础介绍(六)--模块化架构设计和实践
- 团队项目:学习四则运算,团队准备 2.0
- 团队作业五
- Java设计模式详解之门面模式(外观模式)
- mysql 日期相减
- Docker compose操作指南
- play framework框架(二)
- 从第三方打开APP
- iosGCD基本用法
- [opencv]5.获取视频流并保存到本地