精华内容
下载资源
问答
  • 图像评价指标

    万次阅读 2017-06-25 17:24:30
    1.图像评价指标 图像评价指标用来客观评价图像处理中算法的优劣性,一般在对比实验中突出自己提出的算法的亮点。一般来说,每个细分的领域都有相应的指标,如边缘检测,有PFOM(Pratt’s Figure Of Merit)[1][2]...
    1.图像评价指标

      图像评价指标用来客观评价图像处理中算法的优劣性,一般在对比实验中突出自己提出的算法的亮点。一般来说,每个细分的领域都有相应的指标,如边缘检测,有PFOM(Pratt’s Figure Of Merit)[1][2](第一个引用是它的来源,第二个引用是使用它的例子);图像增强,有EEME(Evaluating image Enhancement Measure by Entropy)[3][4]。
      还有一个比较大的领域–图像复原,包括图像去噪、去模糊、去雾等的评价指标基本上是通用的,都可以用复原后图像与参考图像对比来进行评价,即有参考图像评价指标。相应地提出一系列的指标:(R)MSE, (M)SSIM, PSNR(CSNR)等等,这些指标比较常见。原则上来说,采用越通用的指标,如去噪大家都采用PSNR和SSIM,这样得到的结果也越令人信服。#每种指标都有具体针对的情况,根据评价的目的和情况来设计评价算法。
      接下来介绍几种评价指标:

    2.SMD2[5]

      图像的清晰度可以这样得到:对于模糊的图像,其整个图像的灰度较为均匀,相邻像素之间的差值会很小,相乘之后的结果会很小;图像越清晰,那么,边缘跟其周围像素灰度的差值也越大,相乘之后的值也会更大,这样就可以定义一个指标:灰度方差乘积(SMD2),它可以快速准确地来判断一副图像清晰的程度。

    SMD2=|I(x,y)I(x+1,y)||I(x,y)I(x,y+1)|

    用代码实现如下:
    double getSMD2(const Mat& test)//SMD2=sum(|test(x,y)-test(x+1,y)|*|test(x,y)-test(x,y+1)|)
    {
        double temp = 0;
        const uchar* ix;
        const uchar* ix1;
        for (int i = 0; i < test.rows-1; ++i)
        {
            ix = test.ptr<uchar>(i);
            ix1 = test.ptr<uchar>(i + 1);
            for (int j = 0; j < test.cols-1; ++j)
            {
                temp += abs(ix[j] - ix1[j])*abs(ix[j] - ix[j + 1]);
            }
        }
        return temp / (test.rows * test.cols);
    }
    
    3. 人眼特性评价指标HVSNR[6]

      人类的视觉感知有3个显著的特性,即视觉非线性特性(Weber定律)、视觉敏感度带通和视觉多通道及掩盖效应。利用小波变换与HVS多通道特性相匹配的特点,建立一种和人的视觉评价保持良好一致的方法,其评价结果与主观评价平均评价分数的相关系数达0.95,而对应的客观评价方法与主观评价平均评价分数的相关系数为0.81。利用对比度敏感度函数的带通特性以简化HVS模型,将不同空间频带失真用Minkowski求和进行非线性合并,最后仿照峰值信噪比的定义,得到结果。具体的步骤是:
      (1)将待测图像和标准图像选用D9/7小波进行分解,分解为4级;
      (2)将4级小波分为5个频带,对不同空间频带乘于对应的CSF系数;
      (3)待测图像和标准图像相减得到5个频带的误差E,然后按照下面公式进行求和:

    S=(n=1N|En|β)1/β

      (4)根据信噪比的定义得到基于人眼视觉特性的信噪比结果:
    HVSRN=10log[(2552)/s]
    double **fwt97(double** matrix, int width, int height)
    {
        //9 / 7 Coefficients:
        double a1 = -1.586134342;
        double a2 = -0.05298011854;
        double a3 = 0.8829110762;
        double a4 = 0.4435068522;
    
        //Scale coeff:
        double k1 = 0.81289306611596146; // 1 / 1.230174104914
        double k2 = 0.61508705245700002; // 1.230174104914 / 2
    
        for (int col = 0; col < width; ++col)
        {
            //Predict 1. y1
            for (int row = 1; row < height - 1; row += 2)//奇数列
            {
                matrix[row][col] += a1 * (matrix[row - 1][col] + matrix[row + 1][col]);
            }
            matrix[height - 1][col] += 2 * a1 * matrix[height - 2][col];
    
            //Update 1. y0
            for (int row = 2; row < height; row += 2)//偶数列
            {
                matrix[row][col] += a2 * (matrix[row - 1][col] + matrix[row + 1][col]);//这里注意不要越界
            }
            matrix[0][col] += 2 * a2 * matrix[1][col];
    
            //Predict 2.
            for (int row = 1; row < height - 1; row += 2)//奇数列
            {
                matrix[row][col] += a3 * (matrix[row - 1][col] + matrix[row + 1][col]);
            }
            matrix[height - 1][col] += 2 * a3 * matrix[height - 2][col];
    
            //Updata 2.
            for (int row = 2; row < height; row += 2)//偶数列
            {
                matrix[row][col] += a4 * (matrix[row - 1][col] + matrix[row + 1][col]);//
            }
            matrix[0][col] += 2 * a4 * matrix[1][col];
        }
    
        double **temp;
        createMatrix(temp, Size(width, height));
        for (int row = 0; row < height; ++row)
        {
            for (int col = 0; col < width; ++col)
            {
                if (row % 2 == 0)
                    temp[col][row / 2] = k1 * matrix[row][col];
                else
                    temp[col][row / 2 + height / 2] = k2 * matrix[row][col];
            }
        }
        for (int row = 0; row < height; ++row)
        {
            for (int col = 0; col < width; ++col)
            {
                matrix[row][col] = temp[row][col];
            }
        }
    
        releaseMatrix(temp, Size(width, height));
    
        return matrix;
    }
    
    Mat fwt97_2d(Mat image, int nlevels)
    {
        int iWidth = image.rows, iHeight = image.cols;
        double **matrix;
        createMatrix(matrix, image.size());
    
        //convert mat to 2d matrix
        const uchar *ix;
        for (int row = 0; row < iHeight; ++row)
        {
            ix = image.ptr<uchar>(row);
            for (int col = 0; col < iWidth; ++col)
            {
                matrix[row][col] = double(uchar(ix[col]));
            }
        }
    
        int width = iWidth, height = iHeight;
        //do the wavelet decompose
        for (int i = 0; i < nlevels; ++i)
        {
            matrix = fwt97(matrix, width, height);
            matrix = fwt97(matrix, width, height);
            width /= 2;
            height /= 2; 
        }
    
    #ifdef SHOW_WAVELET
        Mat im1(image.size(), CV_8UC1);
        for (int row = 0; row < iHeight; ++row)
        {
            for (int col = 0; col < iWidth; ++col)
            {
                if (matrix[row][col] < 0)
                    im1.at<uchar>(row, col) = 0;
                else if (matrix[row][col] > 255)
                    im1.at<uchar>(row, col) = 255;
                else
                    im1.at<uchar>(row, col) = uchar(matrix[row][col]);
            }
        }
        imshow("97wavelet", im1);
    #endif
        //multiple the CSF coefficient with different frequence band
        double csf[4] = { 2.16, 2.87, 3.16, 2.56 };
        for (int i = 0; i < nlevels; ++i)
        {
            int tHeight = 0, tWidth = 0;
            for (int row = tHeight; row < height; ++row)
            {
                for (int col = tWidth ; col < width; ++col)
                {
                    matrix[row][col] = csf[i] * matrix[row][col];
                }
            }
            tWidth = width;
            tHeight = height;
            width *= 2;
            height *= 2;
        }
    
        Mat im(image.size(), CV_64FC1);
        for (int row = 0; row < iHeight; ++row)
        {
            double * dm = im.ptr<double>(row);
            for (int col = 0; col < iWidth; ++col)
            {
                dm[col] = matrix[row][col];
            }
        }
        releaseMatrix(matrix, image.size());
        return im;
    }
    
    double getHVSNR(const Mat &test, const Mat &reference, int nlevels)//the image size must be 2^n*2^n
    {
        Mat _test(test.size(), CV_64FC1), _ref(reference.size(), CV_64FC1);
        _test = fwt97_2d(test, nlevels);
        _ref = fwt97_2d(reference, nlevels);
    
        //Minkovski nonlinear summation
        Mat diff(test.size(), CV_64FC1), powImg(test.size(), CV_64FC1);
        absdiff(_test, _ref, diff);
        pow(diff, 4, powImg);
    
        double temp = 0;
        temp = mean(diff).val[0];
        temp = pow(temp, 1. / 4);
    
        return 10 * log10(255*255 / (temp+0.000001)); //add a small number avoiding the divider to be zero
    }
    
    4.PFOM

      PFOM是由三种因子的组合来定义的:真实边缘的漏检测,伪边缘的误检测及边缘的定位误差,三种因子按下式组合起来就是Pratt品质因素:

    PFOM=1/max(Ne,Nd)Ndk=11/(1+βd(k)2)

      其中,Ne是设定为参考边缘点的数目,Nd是算法提取到的边缘点的数目,β设为常数1/9,d(k)是第k个真实边缘点到检测到边缘点之间的欧式距离:
    d(k)=||NeNd||Eucild

      Pratt品质因素是一个范围从0到1的保真函数,这里的真实边缘Ne是有监督的人为数据,即为参考边缘。通常的做法有以Canny检测的结果作为参考边缘来计算,还有一种是,采用BSD dataset中的ground truth来作为true edge map。
    function [F, fac, msc] = pratt(Ea,Ed)
    
    % Function EDPM : Edge detector performance measure function. 
    %             Calculates for a given edge image the false alarm 
    %         count, miss count and figure of merit (F) values.             
    %
    %  
    %    Input(s)... Ea : Actual edge image         
    %        Ed : Detected edge image.
    %
    %    Output(s).. fac: False alarm count
    %        msc: miss count
    %        F  : Figure of merit
    Ea=double(Ea);
    Ed=double(Ed);
    
    [N,M]=size(Ea);
    if [N,M]~=size(Ed) 
      error('Actual and detected edge image sizes must be same');
    end;
    a=0.1; % edge shift penalty constant;
    fac=length(find((Ea-Ed)==-1)); % False Alarm Count
    msc=length(find((Ea-Ed)==1));  % Miss Count
    Na=sum(sum(Ea));Nd=sum(sum(Ed));
    c=1/max(Na,Nd);
    [ia,ja]=find(Ea==1);
    for l=1:Na
      Aes(l)=Ed(ia(l),ja(l));
    end;
    mi=ia(find(Aes==0));
    mj=ja(find(Aes==0));
    F=c*sum(Aes);
    for k=1:length(mi) 
      n1=0;n2=0;m1=0;m2=0; 
      while sum(sum(Ed(mi(k)-n1:mi(k)+n2,mj(k)-m1:mj(k)+m2)))<1
        if mi(k)-n1>1 n1=n1+1;end;  
        if mi(k)+n2<N n2=n2+1;end;  
        if mj(k)-m1>1 m1=m1+1;end;  
        if mj(k)+m2<M m2=m2+1;end;  
      end;
      di=max([n1 n2 m1 m2]);
      F=F+c/(1+a*di^2);
    end;
    
    F = F*100;
    5.EEME

      EEME借用了 Michelson对比度公式[7]:
      

    Modulation=(LmaxLmin)/(Lmax+Lmin)

      增大Lmin就能减小对比度
    EME==maxϕ{ϕ}(EME(ϕ))maxϕ{ϕ}1k1k2l=1k2k=1k120lnIWmax;k,lIWmin;k,lIWmax;k,l+IWmin;k,l+c

      因此,对比度越高,EME相应地越大,图像增强的效果也越明显。

    [1] Pratt W K. Digital Image Processing[M]. Wiley-Interscience, 1978.
    [2] Sheng Y, Dementrio L, EasleyR, Hamid K. A Shearlet Approach to Edge Analysis and Detection[J], IEEE Transactions on Image Processing. 2009, 18(5):929-941.
    [3] S.S. Agaian, B. Silver, K.A. Panetta, Transform coefficient histogram-based image enhancement algorithms using contrast entropy, IEEE Trans. Image Process. 16 (3) (2007) 741–758.
    [4] A. Ghani, N. Isa. Enhancement of low quality underwater image through integrated global and local contrast correction. Elsevier Applied Soft Computing. 37(2015) 332-344.
    [5] 李郁峰, 陈念年, 张佳成. 一种快速高灵敏度聚焦评价函数. 计算机应用研究, 2010, 4.
    [6] 丁绪星, 朱日宏, 李建欣. 一种基于人眼视觉特性的图像质量评价. 中国图象图形学报, 2004, 2.
    [7] Michelson A. Studies in optics[M]. University of Chicago Press, 1927.

    展开全文
  • 图像评价指标及方法

    千次阅读 2016-09-03 11:53:48
    图像评价指标及方法 最近在调研如何评价图像的质量,从而方便对相机进行选型,经过一番查找,整理出一下资源。 先来看一下评价图像质量有哪些指标,我主要参考了IEEE P1858 CPIQ标准: ...该标准中主要使用了七...
    图像评价指标及方法
    最近在调研如何评价图像的质量,从而方便对相机进行选型,经过一番查找,整理出一下资源。

    先来看一下评价图像质量有哪些指标,我主要参考了IEEE P1858 CPIQ标准:
    该标准中主要使用了七个指标:



    各个指标以及一些其他指标,可以在以下链接中查找:

    清晰度(Sharpness)

    噪点(Noise)

    镜头畸变(Lens Distortion)

    动态范围(Dynamic Range)

    色彩精度(Color Accuracy)

    亮度均匀性(Uniformity)

    色彩均匀性(ColorShading)

    横向色差(Lateral Chromatic Aberration)

    炫光(Veiling Glare)

    彩色摩尔(Color Moire)

    数据压缩(Data Compressino)

    打印机质量参数(Printer Quality Factors )

    打印最大密度(Print Dmax)

    打印色域(Print Color Gamut)


    用于图像性能指标分析的软件有很多,该标准中列出如下软件:



    其中比较广泛应用的是Imatest,下面列一些该软件的说明和资源:

    imatest官网:

    http://www.imatest.com/products/imatest-it/


    中国代理公司:

    http://www.colorspace.com.cn/Product/7381642718.html


    imatest软件介绍:


    Imatest 是一个专门用来对数码相机图像进行数据测试的软件包,这个软件的功能是:镜头分辨率测试(SFR-MTF)、色差、色彩还原度、色彩空间等等。这是目前最权威的成像分析软件,跟MTF曲线一

    样从微观上量化分析,且更加细致深入,一针见血直打要害,有不少摄影网站都在用。


    Imatest master是完全功能的软件,即可用于检测数字相机、摄像机、工业相机拍摄的图像质量,也可用于交流检测结果。其功能包括:

    SFRplus:可以与SFRplus测试卡配合使用,检测MTF,横向色差,畸变,阶调响应和颜色还原。

    SFR:配合测试卡,可检测相机和镜头的锐度,噪音,色差。可以在相对条件下比较不同相机的表现。比较的最小区域可达10X10个像素。

    MTF:使用SFR的结果比较不同相机、镜头和影像系统的MTF性能。

    Stepchart:配合灰阶测试卡检测相机的阶调响应,噪音,动态范围。还可用于检测曝光的准确性,镜头眩光。

    Distortion:检测镜头的畸变,使用可打印的正方形和矩形网格计算矫正系数。

    Uniformity:检测镜头的渐晕,检测多种图像传感器的不均匀性,包括色彩阴影,具体的噪音分部,可见的不均匀性,灰尘污点。标识出有问题的像素。 显示选项包括叠生在图像上的轮廓线,或伪彩色的色条。

    Test Charts:可以生成图像文件用打于打印测试图。生成的测试卡包括SFR斜边图像,星形测试图,各种频率和反差的图样。可选项包括:反差,高光色彩,正弦线和条纹模式。可输出位图或 可绽放矢量图 (SVG).  

    Print:打印检测,可以检测打印机、纸张、墨水的质量,包括色彩响应,色域,阶调响应,最大密度,ICC描述文件和呈色意图。



    imatest论坛:(资源很少)

    http://www.coloreye.cn/bbs/search.php?mod=forum&searchid=1&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=imatest


    图像测试实验室全景:(太专业了,咱们公司不会建)

    http://www.colorspace.com.cn/upload/IQ%20Lab_Shen%20Zhen/iql.html


    图像测试卡:

    ISO测试卡

    清晰度测试卡

    畸变测试卡

    色彩测试卡

    动态范围测试卡

    纹理细节测试卡

    横向色差测试卡

    红外图像测试卡

    灰卡




    成像系统知识

    http://www.coloreye.cn/wiki/category-view-30.html



    图像质量相关标准:

    ISO标准

    CPIQ标准

    Skypelync标准

    CIPA

    手机行业标准

    医疗行业标准

    安防监控行业标准

    汽车行业标准


    以上的评价方法十分专业,而在另一篇博客中,看到其他评价指标,——峰值性噪比PSNR、模糊系数K、质量因素Q

    定义如下:


    Matlab实现代码:
    %说明:本文件为计算两幅视频图象相对于高清晰图象的质量,其中:
    
    %eyechart1.bmp为未处理前质量较差图象,核心区域的截图保存为area_eyechart1.bmp
    
    %eyechart2.bmp为某种算法处理后质量较好图象,核心区域的截图保存为area_eyechart2.bmp
    
    %eyechart3.bmp为高清晰参考图象,核心区域的截图保存为area_eyechart3.bmp
    
     
    
    %程序流程为
    
    %第一步:先分别从eyechart1.bmp、eyechart2.bmp、eyechart3.bmp中截取出核心区域,并分别保存为area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp
    
    %第二步:以area_eyechart3.bmp为参考图象,计算area_eyechart1.bmp的PSNR、模糊系数KBlur、质量指数Q
    
    %第三步:以area_eyechart3.bmp为参考图象,计算area_eyechart2.bmp的PSNR、模糊系数KBlur、质量指数Q
    
     
    
    %程序可直接运行,运行结果为:
    
    %1.保存并显示生成的截图文件area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp
    
    %2、在控制台先显示第二步的计算结果,即area_eyechart1.bmp的三个质量指标,然后接着显示第三步的计算结果,即area_eyechart2.bmp的三个质量指标
    
     
    
    %运行结果分析:area_eyechart2.bmp的PSNR和质量指数Q高,表明其质量较好,而area_eyechart1.bmp的模糊系数KBlur较大
    
    %这是因为其有很多噪声被当着了边缘能量来计算,这也从一个方面说明模糊系数KBlur的应用具有局限性,但前者KBlur>1,后者<1,理论上只有模糊的情况下
    
    %KBlur是<=1的,这也可根据KBlur与1的关系来判定图象收噪声污染的程度.
    
     
    
    %******************从eyechart1.bmp,eyechart2.bmp两个文件中截取测试图象区域,可保证两图象截取的区域严格对准*****
    
    a=imread('eyechart1.bmp','bmp');
    
    b=a([203:396],[249:440]);
    
    a=imread('eyechart2.bmp','bmp');
    
    c=a([203:396],[249:440]);
    
     
    
    %*******************从eyechart3.bmp中截取测试参考图象,截取部分需要进行缩放,使之与eyechart1.bmp,eyechart2.bmp截取部分大小匹配*******************************************************************
    
    a=imread('eyechart3.bmp','bmp');
    
    d=a([62:406],[60:395]);
    
    e=imresize(d,[length(b(:,1)),length(b(1,:))], 'bicubic');%由于eyechart3.bmp和eyechart1.bmp,eyechart2.bmp比例不一样,这里要进行比例调整
    
    imwrite(b,'area_eyechart1.bmp','bmp');
    
    imwrite(c,'area_eyechart2.bmp','bmp');
    
    imwrite(e,'area_eyechart3.bmp','bmp');
    
     
    
    subplot(1,3,1);
    
    imshow(e);
    
    title('eyechart3.bmp截取部分,参考图象');
    
    hold on;
    
    subplot(1,3,2);
    
    imshow(b);
    
    title('eyechart1.bmp截取部分');
    
    hold on;
    
    subplot(1,3,3);
    
    imshow(c);
    
    title('eyechart2.bmp截取部分');
    
    %*******************以下部分为计算截取图象area_eyechart1.bmp和area_eyechart1.bmp的PSNR、模糊系数、质量指数Q*
    
    % 本文件功能为对计算污染图象相对于源图象的质量
    
    clc;
    
    clear;
    
    PSNRenable=1;%PSNR计算使能,为0不计算,为1,计算
    
    KBlurenable=1;%模糊系数KBlur计算使能,为0不计算,为1,计算
    
    Qenable=1;%质量指数Q计算使能,为0不计算,为1,计算
    
     
    
    for m=1:2
    
    imsrcnamehead='area_eyechart3';%源图象文件名头
    
    imsrcnameext='bmp';%源图象文件名扩展
    
    if m==1 %以area_eyechart1.bmp为测试图象
    
    imdstname=strcat('area_eyechart1','.',imsrcnameext);%污染图象文件名,可修改
    
    elseif m==2%以area_eyechart2.bmp为测试图象
    
      imdstname=strcat('area_eyechart2','.',imsrcnameext);%污染图象文件名,可修改
    
    end
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    iminfo=imfinfo(strcat(imsrcnamehead,'.',imsrcnameext));%源图象信息读取
    
    imsrc=imread(strcat(imsrcnamehead,'.',imsrcnameext));%源图象读取
    
    imdst=imread(imdstname,imsrcnameext);%污染图象读取
    
    doubleimsrc=double(imsrc);%转换为浮点类型
    
    doubleimdst=double(imdst);%转换为浮点类型
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%源图象和污染图象读取
    
    W=iminfo.Width;%图象度
    
    H=iminfo.Height;%图象高
    
    %///PSNR计算/
    
    if PSNRenable==1
    
    PSNR=0.0;%PSNR赋初值
    
    for j=1:H
    
      for i=1:W
    
          PSNR=PSNR+double((doubleimsrc(j,i)-doubleimdst(j,i))*(doubleimsrc(j,i)-doubleimdst(j,i)));
    
      end
    
    end
    
    PSNR=PSNR/W/H;
    
    PSNR=10*log10(255*255/PSNR)
    
    %PSNR计算完毕//
    
    end
    
    %///模糊系数KBlur计算/
    
    if KBlurenable==1
    
    Sin=0.0;%Sin赋初值
    
    Sout=0.0;
    
    for j=2:H-1
    
      for i=2:W-1
    
          t=doubleimsrc(j-1,i+1)+doubleimsrc(j+1,i-1)-doubleimsrc(j-1,i-1)-doubleimsrc(j+1,i+1);
    
          if t<0 t=-t;
    
          end
    
          Sin=Sin+t;%源图象邻域边缘能量计算
    
          t=doubleimdst(j-1,i+1)+doubleimdst(j+1,i-1)-doubleimdst(j-1,i-1)-doubleimdst(j+1,i+1);
    
          if t<0 t=-t;
    
          end
    
          Sout=Sout+t;%污染图象邻域边缘能量计算
    
      end
    
    end
    
    KBlur=Sout/Sin
    
    end
    
    %KBlur计算完毕
    
     
    
    %///质量指数Q计算//
    
    if Qenable==1
    
    Q=0.0;%Q赋初值
    
    Qnum=0;%图象以7X7块大小计算每块的Q,逐象素的移动块窗口,这里Qnum为块数量的计数
    
    for j=4:H-3
    
      for i=4:W-3
    
          midsrc=0.0;
    
          middst=0.0;
    
          varsrc=0.0;
    
          vardst=0.0;%源图象和污染图象块内的平均值和方差赋初值
    
          varsrcdst=0.0;%源图象和污染图象块内的协方差赋初值
    
          for n=-3:3
    
              for m=-3:3
    
                  midsrc=midsrc+doubleimsrc(j+n,i+m);
    
                  middst=middst+doubleimdst(j+n,i+m);
    
              end
    
          end
    
          midsrc=midsrc/49;
    
          middst=middst/49;
    
          %源图象和污染图象块内的平均值计算
    
          for n=-3:3
    
              for m=-3:3
    
                 varsrc=varsrc+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimsrc(j+n,i+m)-midsrc);
    
                 vardst=vardst+(doubleimdst(j+n,i+m)-middst)*(doubleimdst(j+n,i+m)-middst);
    
                 varsrcdst=varsrcdst+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimdst(j+n,i+m)-middst);
    
              end
    
          end
    
          varsrc=varsrc/48;
    
          vardst=vardst/48;
    
          varsrcdst=varsrcdst/48;
    
          if ((varsrc+vardst)*(midsrc*midsrc+middst*middst))~=0 %分母不为零的块才计算质量指数Q
    
          Q=Q+4*varsrcdst*midsrc*middst/((varsrc+vardst)*(midsrc*midsrc+middst*middst));
    
          %源图象和污染图象块内Q计算完毕
    
          Qnum=Qnum+1;%块计数加1
    
          end
    
      end
    
    end
    
    Q=Q/Qnum
    
    end
    
    %质量指数Q计算完毕/
    
    end
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图象质量计算完毕
    

    参考文献

    [1]袁飞,黄联芬,姚彦,视频质量客观评价技术研究,标准、检测与仪器,2007(3):91-94

    [2]黄文辉 ,陈仁雷 ,张家谋,数字视频图像质量客观测量方法的改进与实现,北京邮电大学学报,2005(4):87-90

    [3]Zhou Wang, Hamid R.Sheikh , Alan C. Bovik,Objective video quality assessment(Chapter 41 in The Handbook of Video Databases: Design and Applications)., CRC Press, 2003(1041-1078)




    展开全文
  • 包含有一些对图像评价的方法指标: 均值、标准差、信息熵、色彩分量相关性、色彩分量百分比、水下彩色图像质量评价(UCIQE)
  • 多种常见的图像评价指标峰值信噪比,结构相似性指数,光谱角等PSNR,SSIM,QNR,SAM,ERGAS
  • 无参考图像评价指标NIQE——自然图像质量欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格...

    NIQE(Natural Image Quality Evaluator)

    为何引入NIQE

           在进行图像重建任务后通常还要做图像质量评价,常用的判断指标有峰值信噪比(PSNR)结构相似性(SSIM) 等。在大部分任务中,通过这些指标可以证明图像重建任务是否更加有效。但在超分辨重建任务里,在近些年引入生成对抗网络后,人们发现高的PSNR或SSIM不一定能代表更好重建质量,因为在高PSNR或SSIM的图片中,它们图像的纹理细节并不一定符合人眼的视觉习惯。因此,研究者们找到了这种更有效的图像重建质量的指标NIQE

    NIQE的背景

    NIQE原文DOI号:https://doi.org/10.1109/LSP.2012.2227726
                百度网盘:https://pan.baidu.com/s/1pWk5Zneh5YxpZxlLjFQ2ZA
                    提取码:223a

    文中特定缩写:

    缩写 全称
    IQA(Image Quality Assessment) 图像质量评价
    NSS(Natural Scene Statistic) 自然图像统计
    FR(Full Reference) 全参考
    NR(No Reference) 无参考
    OA(Option Aware) 有感知意见
    OU(Option Unaware) 无感知意见
    DA(Distortion Aware) 有感知失真
    DU(Distortion Unaware) 无感知失真
    MVG(Multivariate Gaussian) Model 多元(变量)高斯模型
    GGD(Generalized Gaussian Distribution) 广义高斯分布

    对上面部分名词解释:

    • 全参考(FR):把内容相同的自然图像与失真图像比较质量,如:PSNR与SSIM。
    • 无参考(NR):只拿失真图像去评价质量。

    • 有感知意见(OA):即已经被训练的在人为排序失真图像数据集,和结合人们主观意见得分的一种无参考图像质量评价模型。
    • 无感知意见(OU):由于获得用人类判断分数的失真图像数据集在实际中难实现,不寻求找人类在失真图像上判断的数据集的训练就叫无意意见。这也是大家更感兴趣的。

    • 有感知失真(DA):一些源于OU思想的算法,在IQA模型的创建或者训练期间,可能会也可能不会出现失真图像。在训练(并调整到)特定失真的模型就称为有感知失真。
    • 无感知失真(DU):无感知失真只依赖于曝光自然源图像或图像模型指导质量评估的过程。

            NIQE既不寻求曝光失真图像的先验信息也不用训练任何人类意见得分。它是一个全新的 NR OU-DU IQA 模型。

    NIQE算法的具体过程

           NIQE基于一组“质量感知”特征,并将其拟合到MVG模型中。质量感知特征源于一个简单但高度正则化的NSS模型。然后,将给定的测试图像的NIQE指标表示为从测试图像中提取的NSS特征的MVG模型与从自然图像语料中提取的质量感知特征的MVG模型之间的距离。整个过程由五步操作完成:

    1. 空域NSS特征提取
      一个经典的空域NSS模型:
      I^(i,j)=I(i,j)μ(i,j)σ(i,j)+1(1)\hat{I}(i,j)=\frac{I(i,j)-{\mu}(i,j)}{{\sigma}(i,j)+1}\tag{1}
      式中,i{1,2,...M}i\in\left\{1,2,...M\right\}j{1,2,...N}j\in\left\{1,2,...N\right\}为图像的空间坐标,MMNN为图像的空间维度。且:
      μ(i,j)=k=KKl=LLwk,lI(i+k,j+l)(2){\mu}(i,j)=\sum_{k=-K}^K\sum_{l=-L}^L{w_{k,l}I(i+k,j+l)}\tag{2}
      σ(i,j)=k=KKl=LLwk,l[I(i,j)μ(i,j)]2(3){\sigma}(i,j)=\sqrt{\sum_{k=-K}^K\sum_{l=-L}^L{w_{k,l}\left[I(i,j)-{\mu}(i,j)\right]^2}}\tag{3}
      在(2)与(3)中,{wk,lk=K,...K;l=L,...L}\left\{w_{k,l}|k=-K,...K;l=-L,...L\right\}是一个从3个标准差(K=L=3)(K=L=3)中采样并重新缩放到单位体积的二维循环对称高斯权函数。

    2. 图像块选取
             一旦图像的系数由(1)式计算出,整张图像会被分割成P×PP\times{P}的块。然后从每个块的系数中计算出特殊的NSS特征。方差(3)在之前 的基于NSS的图片分析中常常被忽视。但是它在结构话图片信息上有丰富的内容。这些内容可以被用来量化局部图片的锐利度。(从美学上认为一幅图片越锐利它的成像效果会越好,平滑模糊代表一种视觉信息的潜在损失。)将P×PP\times{P}的图像块用b=1,2,...,Bb=1,2,...,B做标记,再用一种直接的方法计算每一块bb平均局部偏移范围:
      δ(b)=(i,j)patchbσ(i,j)(4){\delta}(b)={\sum\sum}_{(i,j)\in{patchb}}{{\sigma}(i,j)}\tag{4}
      式中,δ{\delta}表示局部活跃(锐利)度。
             在求得每块的锐利度后,超过门限 TTδ{\delta} 将被选中(即:δ>T{\delta}>T)。门限 TT 由块的峰值锐利度 pp 得到,在原文中p=0.75p=0.75,按照作者的观察 pp 在一个小范围[0.6,0.9]\left[0.6,0.9\right]变化。

    3. 特征化图像块
             先前以NSS为基础图像质量的研究表明广义高斯分布可以有效捕捉自然图像与失真图像公式(1)的联系。
      以0为均值的广义高斯分布公式(GGD)为:
      f(x;α,β)=α2βΓ(1/α)exp((xβ)α)(5)f(x;{\alpha},{\beta})=\frac{{\alpha}}{2{\beta}{\Gamma}(1/{\alpha})}\exp{(-(\frac{\left|x\right|}{\beta})^{\alpha})}\tag{5}
      式中的Gamma函数Γ(){\Gamma}(\cdot)为:
      Γ(a)=0ta1etdt(a>0)(6){\Gamma}(a)=\int_0^\infty{t^{a-1}e^{-t}dt}{\quad}(a>0)\tag{6}
             GGD的参数(α,β)({\alpha},{\beta})可以使用一种moment-matching方法估计出。
             这样,我们用一个均值为0的对称广义高斯分布(AGGD)将领域系数的乘积很好的建模:
      f(x;γ,βl,βr)={γβl+βrΓ(1γ)exp((xβl)γ)(x0)γβl+βrΓ(1γ)exp((xβr)γ)(x0)(7)f(x;{\gamma},{\beta}_l,{\beta}_r)=\begin{cases} \frac{\gamma}{{\beta}_l+{\beta}_r{\Gamma}(\frac{1}{\gamma})\exp(-(\frac{-x}{{\beta}_l})^{\gamma})}{\quad}(\forall{x}\leq{0})\\ \frac{\gamma}{{\beta}_l+{\beta}_r{\Gamma}(\frac{1}{\gamma})\exp(-(\frac{-x}{{\beta}_r})^{\gamma})}{\quad}(\forall{x}\ge{0})\end{cases}\tag{7}
      AGGD的参数(γ,βl,βr)({\gamma},{\beta}_l,{\beta}_r),可以被“Mutiscale skewed heavy tailed model for texture analysis”这篇文章中的方法计算出。AGGD的均值也很有用:
      η=(βrβl)Γ(2γ)Γ(1γ)(8){\eta}=({\beta}_r-{\beta}_l)\frac{{\Gamma}(\frac{2}{\gamma})}{{\Gamma}(\frac{1}{\gamma})}\tag{8}

    4. MVG模型
             通过将自然图像块与MVG模型密度函数拟合,可以得到一个简单的NSS特征模型,MVG模型密度函数为:
      fX(x1,...,xk)=1(2π)k/2Σ1/2exp(12(xv)TΣ1(xv))(9)f_X(x_1,...,x_k)=\frac{1}{(2{\pi})^{k/2}\left|{\Sigma}\right|^{1/2}}\exp(-\frac{1}{2}(x-v)^T{\Sigma}^{-1}(x-v))\tag{9}
      式中(x1,..,xk)(x_1,..,x_k)是有(5)~(8)式3得出的NSS特征。vvΣ{\Sigma}分别表示MVG模型的均值与协方差矩阵,可由标准最大似然估计得到。

    5. NIQE指标
             用NSS特征模型与提取自失真图像特征的MVG间的距离来表示失真图像的质量:
      D(v1,v2,Σ1,Σ2)=((v1v2)T(Σ1+Σ22)1(v1v2))(10)D(v_1,v_2,{\Sigma}_1,{\Sigma}_2)=\sqrt{((v_1-v_2)^T(\frac{{\Sigma}_1+{\Sigma}_2}{2})^{-1}(v_1-v_2))}\tag{10}
      其中v1v_1v2v_2Σ1{\Sigma}_1Σ2{\Sigma}_2分别表示自然MVG模型与失真图像MVG模型的均值向量和协方差矩阵。

    代码实现

    上述算法由Matlab实现,共有7个文件:

    1. estimateaggdparam.m
    function [alpha betal betar] = estimateaggdparam(vec)
    	gam   = 0.2:0.001:10;
    	r_gam = ((gamma(2./gam)).^2)./(gamma(1./gam).*gamma(3./gam));
    	leftstd = sqrt(mean((vec(vec<0)).^2));
    	rightstd = sqrt(mean((vec(vec>0)).^2));
    	gammahat = leftstd/rightstd;
    	rhat = (mean(abs(vec)))^2/mean((vec).^2);
    	rhatnorm = (rhat*(gammahat^3 +1)*(gammahat+1))/((gammahat^2 +1)^2);
    	[min_difference, array_position] = min((r_gam - rhatnorm).^2);
    	alpha = gam(array_position);
    	betal = leftstd *sqrt(gamma(1/alpha)/gamma(3/alpha));
    	betar = rightstd*sqrt(gamma(1/alpha)/gamma(3/alpha));
    
    1. estimatemodelparam.m
    function  [mu_prisparam cov_prisparam]  = estimatemodelparam(folderpath,...
        blocksizerow,blocksizecol,blockrowoverlap,blockcoloverlap,sh_th)   
    % Input
    % folderpath      - Folder containing the pristine images
    % blocksizerow    - Height of the blocks in to which image is divided
    % blocksizecol    - Width of the blocks in to which image is divided
    % blockrowoverlap - Amount of vertical overlap between blocks
    % blockcoloverlap - Amount of horizontal overlap between blocks
    % sh_th           - The sharpness threshold level
    %Output
    %mu_prisparam  - mean of multivariate Gaussian model
    %cov_prisparam - covariance of multivariate Gaussian model
    
    % Example call
    
    %[mu_prisparam cov_prisparam] = estimatemodelparam('pristine',96,96,0,0,0.75);
    
    %----------------------------------------------------------------
    % Find the names of images in the folder
    current = pwd;
    cd(sprintf('%s',folderpath))
    names        = ls;
    names        = names(3:end,:);
    cd(current)
    % ---------------------------------------------------------------
    %Number of features
    % 18 features at each scale
    featnum      = 18;
    % ---------------------------------------------------------------
    % Make the directory for storing the features
    mkdir(sprintf('local_risquee_prisfeatures'))
    % ---------------------------------------------------------------
    % Compute pristine image features
    for itr = 1:size(names,1)
    itr
    im               = imread(sprintf('%s\\%s',folderpath,names(itr,:)));
    if(size(im,3)==3)
    im               = rgb2gray(im);
    end
    im               = double(im);             
    [row col]        = size(im);
    block_rownum     = floor(row/blocksizerow);
    block_colnum     = floor(col/blocksizecol);
    im               = im(1:block_rownum*blocksizerow, ...
                       1:block_colnum*blocksizecol);               
    window           = fspecial('gaussian',7,7/6);
    window           = window/sum(sum(window));
    scalenum         = 2;
    warning('off')
    
    feat = [];
    
    
    for itr_scale = 1:scalenum
        
    mu = imfilter(im,window,'replicate');
    mu_sq = mu.*mu;
    sigma = sqrt(abs(imfilter(im.*im,window,'replicate') - mu_sq));
    structdis = (im-mu)./(sigma+1);
                  
                   
                   
    feat_scale               = blkproc(structdis,[blocksizerow/itr_scale blocksizecol/itr_scale], ...
                               [blockrowoverlap/itr_scale blockcoloverlap/itr_scale], ...
                               @computefeature);
    feat_scale               = reshape(feat_scale,[featnum ....
                               size(feat_scale,1)*size(feat_scale,2)/featnum]);
    feat_scale = feat_scale';
    
    if(itr_scale == 1)
    sharpness = blkproc(sigma,[blocksizerow blocksizecol], ...
                               [blockrowoverlap blockcoloverlap],@computemean);
    sharpness = sharpness(:);
    end
    
    
    feat = [feat feat_scale];
    
    im =imresize(im,0.5);
    end
    
    save(sprintf('local_risquee_prisfeatures\\prisfeatures_local%d.mat',...
        itr),'feat','sharpness');
    end
    
    %----------------------------------------------
    % Load pristine image features
    prisparam    = [];
    current      = pwd;
    cd(sprintf('%s','local_risquee_prisfeatures'))
    names        = ls;
    names        = names(3:end,:);
    cd(current)
    for itr      = 1:size(names,1)
    % Load the features and select the only features     
    load(sprintf('local_risquee_prisfeatures\\%s',strtrim(names(itr,:))));
    IX               = find(sharpness(:) >sh_th*max(sharpness(:)));
    feat             = feat(IX,:);
    prisparam        = [prisparam; feat];
    
    end 
    %----------------------------------------------
    % Compute model parameters
    mu_prisparam       = nanmean(prisparam);
    cov_prisparam      = nancov(prisparam);
    %----------------------------------------------
    % Save features in the mat file
    save('modelparameters_new.mat','mu_prisparam','cov_prisparam');
    %----------------------------------------------
    
    1. convert_shave_image.m
    function shaved = convert_shave_image(input_image,shave_width)
    
    	% Converting to y channel only
    	image_ychannel = rgb2ycbcr(input_image);
    	image_ychannel = image_ychannel(:,:,1);
    	
    	% Shaving image
    	shaved = image_ychannel(1+shave_width:end-shave_width,...
    	        1+shave_width:end-shave_width);
    end
    
    1. computemean.m
    function val = computemean(patch)
    	val = mean2(patch);
    
    1. computequality.m
    function  quality = computequality(im,blocksizerow,blocksizecol,...
        blockrowoverlap,blockcoloverlap,mu_prisparam,cov_prisparam)
       
    % Input
    % im              - Image whose quality needs to be computed
    % blocksizerow    - Height of the blocks in to which image is divided
    % blocksizecol    - Width of the blocks in to which image is divided
    % blockrowoverlap - Amount of vertical overlap between blocks
    % blockcoloverlap - Amount of horizontal overlap between blocks
    % mu_prisparam    - mean of multivariate Gaussian model
    % cov_prisparam   - covariance of multivariate Gaussian model
    
    % For good performance, it is advisable to use make the multivariate Gaussian model
    % using same size patches as the distorted image is divided in to
    
    % Output
    %quality      - Quality of the input distorted image
    
    % Example call
    %quality = computequality(im,96,96,0,0,mu_prisparam,cov_prisparam)
    
    % ---------------------------------------------------------------
    %Number of features
    % 18 features at each scale
    featnum      = 18;
    %----------------------------------------------------------------
    %Compute features
    if(size(im,3)==3)
    im               = rgb2gray(im);
    end
    im               = double(im);                
    [row col]        = size(im);
    block_rownum     = floor(row/blocksizerow);
    block_colnum     = floor(col/blocksizecol);
    
    im               = im(1:block_rownum*blocksizerow,1:block_colnum*blocksizecol);              
    [row col]        = size(im);
    block_rownum     = floor(row/blocksizerow);
    block_colnum     = floor(col/blocksizecol);
    im = im(1:block_rownum*blocksizerow, ...
                       1:block_colnum*blocksizecol);               
    window           = fspecial('gaussian',7,7/6);
    window           = window/sum(sum(window));
    scalenum         = 2;
    warning('off')
    
    feat             = [];
    
    
    for itr_scale = 1:scalenum
    
        
    mu = imfilter(im,window,'replicate');
    mu_sq = mu.*mu;
    sigma = sqrt(abs(imfilter(im.*im,window,'replicate') - mu_sq));
    structdis = (im-mu)./(sigma+1);
                  
                   
                   
    feat_scale = blkproc(structdis,[blocksizerow/itr_scale blocksizecol/itr_scale], ...
                               [blockrowoverlap/itr_scale blockcoloverlap/itr_scale], ...
                               @computefeature);
    feat_scale = reshape(feat_scale,[featnum ....
                               size(feat_scale,1)*size(feat_scale,2)/featnum]);
    feat_scale = feat_scale';
    
    
    if(itr_scale == 1)
    sharpness = blkproc(sigma,[blocksizerow blocksizecol], ...
                               [blockrowoverlap blockcoloverlap],@computemean);
    sharpness = sharpness(:);
    end
    
    
    feat = [feat feat_scale];
    
    im =imresize(im,0.5);
    
    end
    
    
    % Fit a MVG model to distorted patch features
    distparam = feat;
    mu_distparam = nanmean(distparam);
    cov_distparam = nancov(distparam);
    
    % Compute quality
    invcov_param = pinv((cov_prisparam+cov_distparam)/2);
    quality = sqrt((mu_prisparam-mu_distparam)* ...
        invcov_param*(mu_prisparam-mu_distparam)');
    
    
    1. computefeature.m
    function feat = computefeature(structdis)
    
    % Input  - MSCn coefficients
    % Output - Compute the 18 dimensional feature vector 
    feat = [];
    
    [alpha betal betar] = estimateaggdparam(structdis(:));
    
    feat = [feat;alpha;(betal+betar)/2];
    
    shifts = [ 0 1;1 0 ;1 1;1 -1];
    
    for itr_shift =1:4
    shifted_structdis = circshift(structdis,shifts(itr_shift,:));
    pair = structdis(:).*shifted_structdis(:);
    [alpha betal betar] = estimateaggdparam(pair);
    meanparam = (betar-betal)*(gamma(2/alpha)/gamma(1/alpha));                       
    feat = [feat;alpha;meanparam;betal;betar];
    end
    
    1. calc_NIQE
    function NIQE = calc_scores(input_image_path,shave_width)
    %% Loading model
    load modelparameters.mat
    blocksizerow    = 96;
    blocksizecol    = 96;
    blockrowoverlap = 0;
    blockcoloverlap = 0;
    %% Calculating scores
    NIQE = [];
        input_image = convert_shave_image(imread(input_image_path),shave_width);      
        % Calculating scores
        NIQE = computequality(input_image,blocksizerow,blocksizecol,...
            blockrowoverlap,blockcoloverlap,mu_prisparam,cov_prisparam);
    end
    

    自然图像语料模型参数为:
    modelparameters.mat,获取地方如下

    百度网盘:https://pan.baidu.com/s/1XVNJCQdWFkbQBKQAq89Y-w
    提取码:4x3o

    展开全文
  • 本程序包括主程序和调用函数,每一个函数都是经过多次测试,没有出现问题。包括图像信息熵、标准差、平均梯度、均方根误差、空间频率、清晰度、互信息、峰值信噪比 、平均绝对误差:MAE 、结构相似性
  • 超分辨率图像处理中利用峰值信噪比对图像进行处理的代码
  • SSIM这个图像评价指标可以用在低照度图像和其增强后的图像吗?自己目前很迷惑,增强后的图像肯定不会和之前很黑的图片的结构很相似啊,所以不能表明越大越好吧,请问哪位高手用过这个指标,指点一下啊!谢谢了哦!
  • 医学图像评价指标

    千次阅读 2018-09-26 10:50:23
    前言 在论文阅读的过程中,经常遇到使用特异性(specificity)和灵敏度(sensitivity)这两个指标来描述分类器的性能。对这两个指标表示的含有一些模糊,这里查阅了相关...从这个表格中可以引出一些其它的评价指标...

    前言

    在论文阅读的过程中,经常遇到使用特异性(specificity)和灵敏度(sensitivity)这两个指标来描述分类器的性能。对这两个指标表示的含有一些模糊,这里查阅了相关资料后记录一下。

    分类问题

    考虑一个二分类的情况,类别为1和0,我们将1和0分别作为正类(positive)和负类(negative),则实际分类的结果有4种,表格如下:

    image.png
    从这个表格中可以引出一些其它的评价指标:
    - ACC:classification accuracy,描述分类器的分类准确率
    计算公式为:ACC=(TP+TN)/(TP+FP+FN+TN)
    - BER:balanced error rate
    计算公式为:BER=1/2*(FPR+FN/(FN+TP))
    - TPR:true positive rate,描述识别出的所有正例占所有正例的比例,敏感度(sensitivity)、查全率(Recall)
    计算公式为:TPR=TP/ (TP+ FN)
    - FPR:false positive rate,描述将负例识别为正例的情况占所有负例的比例
    计算公式为:FPR= FP / (FP + TN)
    - TNR:true negative rate,描述识别出的负例占所有负例的比例,特异度(specificity)
    计算公式为:TNR= TN / (FP + TN)
    - PPVPositive predictive value阳性预测值、查准率(Precision)
    计算公式为:PPV=TP / (TP + FP)
    - NPVNegative predictive value阴性预测值
    计算公式:NPV=TN / (FN + TN)

    维基百科的附图

     

    下面以医学中糖尿病人的筛查为例对敏感度和特异度进行解释。在这个例子中,我们只将病人血糖水平作为判断是否患有糖尿病的指标。下图为正常人和糖尿病患者血糖水平的统计图:

    我们发现两个人群中有重叠的部分,这个时候判定标准定的不同,得到的结果就会不同。
    如果我们把标准定在最左边的虚线上,则低于这条线的为正常人,高于这条线的包含了两类人:正常人和糖尿病患者。这种时候就是灵敏度最高的时候,即实际有病而被诊断出患病的概率,没有放过一个患病的人。如果将标准定在最右边的虚线上,则是特异度最高的时候,即实际没病而被诊断为正常的概率,没有冤枉一个没病的人。
    终上所述,敏感度高=漏诊率低,特异度高=误诊率低。
    理想情况下我们希望敏感度和特异度都很高,然而实际上我们一般在敏感度和特异度中寻找一个平衡点,这个过程可以用ROC(Receiver Operating Characteristic)曲线来表示:

    即图中V34点,具有较高的灵敏度和特异度。

    分割问题

    符号定义:

             :  代表 ground truth的分割结果

             :代表预测的分割结果

    (1)DICE(值域为[0,1]): 使用频率最高。数学定义如下,具体表示两个物体相交的面积占总面积的比值,完美分割该值为1。 

    (2)VOE(volumetric overlap error): 与DICE类似,数学定义如下,它将and操作换成了减法操作,以此来代表错误率。

                                                                           

    (3)RVD(relative volume difference):表示两者体积之间的差异,数学定义如下。

    (4)ASD(average symmetric surface distance: 先定义 代表的是预测的中的边界的像素,同样地可以得到的定义。然后对的定义,同理可得的定义。那么ASD的数学定义为: 

    (5)MSD(maximum symmetric surface distance):与ASD定义比较类似,只不过把计算平均的操作替换成了计算最大值的操作。其数学定义为:

     

    参考资料

    https://blog.csdn.net/A_a_ron/article/details/79051077?utm_source=copy

    https://blog.csdn.net/zichen_ziqi/article/details/80408465

    https://github.com/Visceral-Project/EvaluateSegmentation

    展开全文
  • UCIQE方法一致认为具有更好的清晰度、对比度和亮度,更加丰富的色彩和自然的表面,并且远景目标得到更好揭示的图像具有更高的质量分数,这一点符合人类的视觉感知。
  • 目录均方误差 (MSE)PSNR峰值信噪比(Peak Signal to Noise Ratio)PSNR优缺点:针对灰度图像彩色图像针对超光谱图像,SSIM (Structural SIMilarity) 结构相似性针对超光谱图像评价指标Precision与Recall参考: ...
  • 含psnr,rmse, ergas, sam, uiqi,ssim,DD,CCS,matlab版图片评估指标,适用与高光谱图像,多波段图像 Computes a number of quality indices from the remote sensing literature, namely the RMSE, ERGAS, SAM and ...
  • psnr ssim图像评价指标解释

    千次阅读 2015-05-06 16:47:31
    全参考客观视频质量评价方法是指把原始参考视频与失真视频在每一个对应帧中的每一个对应像素之问进行比较。准确的讲,这种方法得到的并不是真正的视频质量,而是失真视频相对于原始视频的相似程度或保真程度。最简单...
  • labels = [0,1,2,3,4] #金标准里标签类别,0是背景区域 Dice_Ratio_average = 0 for label in labels: Dice_Ratio_average += Jaccard(seg, gt, label) print('Dice_Ratio_average: {:.4f}%'.format(Dice_Ratio...
  • 图像处理评价指标

    2015-05-20 16:31:21
    图像处理结果所需评价指标,matlab源代码,包括图像的熵,互信息,离散度,空间散度,自相关系数,梯度等等评价指标评价指标完善。
  • 图像融合评价指标.zip

    2021-07-23 17:32:35
    图像客观评价指标文件
  • 图像质量的客观评价方法是根据人眼的主观视觉系统建立数学模型,并通过具体的公式计算图像的质量。传统的图像质量客观评价方法主要包括均方误差(MSE,mean squared error)和峰值信噪比(PSNR,peak signal to ...
  • 图像融合评价标准13项指标,matlab源代码,用于图像融合后关键指标的测试
  • 图像修复评价指标.zip

    2021-07-01 09:35:55
    课题是深度学习图像修复的评价指标,包括L1 error,PSNR,SSIM,FID,使用方法在压缩包里已经注明了,编程语言是python
  • 图像去噪评价指标代码
  • 这是图像质量评价指标边缘保持度的matlab实现代码,里面包括算法实现和测试图像,边缘保持度一般作为融合图像的质量评价
  • 自己编写的图像性能参数程序,使用matlab软件实现,最全的图像质量评价函数,包括计算均值、标准差、熵、平均梯度、相关系数、扭曲程度、偏差指数、峰值信噪比...等性能指标,几乎包含目前所有常用的图像评价性能参数。
  • 图像质量评价指标函数,包含psnr 信息熵 空间频率 平均梯度 均值 标准差等等 MATLAB实现
  • 图像融合的评价指标

    2018-12-20 16:34:26
    各种图像融合的评价指标,包括了方差在内的多种指标,可以根据需要更改,引用时A是融合图像之一。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,935
精华内容 15,174
关键字:

图像评价标准