图像质量评价指标详解(半参考图像质量评价)

一、峰值信噪比(PSNR)

PSNR是最常用的图像质量评价指标之一,它可以衡量信号与噪声的比率,进而反映出图像的失真程度。

PSNR的公式为:

void psnr(unsigned char* img1, unsigned char* img2, int width, int height, float* v_psnr)
{
    double mse = 0;
    for(int i=0; i<height; ++i)
    {
        for(int j=0; j<width; ++j)
        {
            int t = img1[i*width+j] - img2[i*width+j];
            mse += (double)(t*t);
        }
    }
    mse /= (width*height);
    v_psnr[0] = 10 * log10((255.0 * 255.0) / mse);
}

其中,img1和img2为比较的两张图像,width和height分别为图像的宽度和高度,v_psnr为输出的PSNR值。该函数计算img1和img2之间的均方误差(MSE),并将结果代入PSNR公式中计算得到PSNR值。

二、结构相似性(SSIM)

SSIM能够更好地反映图像的感知质量,它可以同时考虑图像的亮度、对比度和结构等方面的失真程度,进而生成最终的感知质量评价。

SSIM的公式为:

void ssim(unsigned char* img1, unsigned char* img2, int width, int height, float* v_ssim)
{
    const double alpha = 1.0;
    const double beta = 1.0;
    const double gamma = 1.0;

    double mu1 = 0, mu2 = 0, mu1_2 = 0, mu2_2 = 0, mu1_mu2 = 0;
    double sigma1_2 = 0, sigma2_2 = 0, sigma12 = 0;

    for(int i=0; i<height; ++i)
    {
        for(int j=0; j<width; ++j)
        {
            mu1 += img1[i*width+j];
            mu2 += img2[i*width+j];
            mu1_2 += img1[i*width+j] * img1[i*width+j];
            mu2_2 += img2[i*width+j] * img2[i*width+j];
            mu1_mu2 += img1[i*width+j] * img2[i*width+j];
        }
    }
    mu1 /= (width*height);
    mu2 /= (width*height);
    mu1_2 /= (width*height);
    mu2_2 /= (width*height);
    mu1_mu2 /= (width*height);

    sigma1_2 = mu1_2 - mu1 * mu1;
    sigma2_2 = mu2_2 - mu2 * mu2;
    sigma12 = mu1_mu2 - mu1 * mu2;

    v_ssim[0] = (float)((2 * mu1 * mu2 + alpha) * (2 * sigma12 + beta) * (gamma*gamma + sigma1_2 + sigma2_2 + beta) / ((mu1*mu1 + mu2*mu2 + alpha) * (sigma1_2 + sigma2_2 + beta) * (gamma*gamma + alpha)));
}

其中,img1和img2为比较的两张图像,width和height分别为图像的宽度和高度,v_ssim为输出的SSIM值。该函数分别计算img1和img2的均值、方差、协方差等参数,并代入SSIM公式中计算得到SSIM值。注:该函数中的alpha、beta、gamma分别为3个常数,可根据不同需求进行调整。

三、均方误差(MSE)

均方误差是衡量图像质量的一种常用指标,它可以衡量参考图像与被测图像的差距,该指标值越小,表示两张图像越相似。

均方误差的公式为:

void mse(unsigned char* img1, unsigned char* img2, int width, int height, float* v_mse)
{
    double mse = 0;
    for(int i=0; i<height; ++i)
    {
        for(int j=0; j<width; ++j)
        {
            int t = img1[i*width+j] - img2[i*width+j];
            mse += (double)(t*t);
        }
    }
    mse /= (width*height);
    v_mse[0] = (float)mse;
}

其中,img1和img2为比较的两张图像,width和height分别为图像的宽度和高度,v_mse为输出的MSE值。该函数计算img1和img2之间的均方误差(MSE),并将结果返回。

四、峰值信噪比与结构相似性的比较

PSNR和SSIM是两种常用的图像质量评估指标,下面进行简单的比较:

PSNR指标可以较好地反映出信号像素值的不同,但是没有考虑人类视觉系统的感知方式,因此对于具有较强纹理的图像效果评估会有一定的局限性;而SSIM指标不仅考虑了图像的像素值,还考虑了图像结构的相似性,可以更好地反映人类视觉的感知过程,因此比PSNR对图像质量评价更加准确。

五、总结

图像质量评价指标是对图像失真程度进行客观化评价的重要手段,目前主流的评价指标有PSNR和SSIM等。针对不同的应用场景,可以根据具体需求选择适合的评价指标进行评估。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平