• 【图像分割】图像分割质量分数,如 TP、FP、TN、FN、Accuracy、Sensitivity、Precision、MCC、Dice、Jaccard


    1 内容介绍

    随着移动成像设备的快速增长,数字图像已经成为了信息表示和交互的重要载体。然而,数字图像在整个生存周期中的不同阶段都有可能造成不同程度的质量衰减。这些衰减将会导致视觉信息的损失,从而造成无法令观察者满意的感官体验,同时也会对后续的图像处理和分析步骤造成困难。图像质量的评价问题在大量的图像/视频处理和机器视觉应用上起到了至关重要的作用,包括图像压缩、传输、获取、显示、增强、去噪、分割、检测、照片分类等。图像的质量包括保真度和可懂度两方面,其中保真度测量了待测图像与标准图像之间的偏离情况;可懂度表示了人类或者机器能够从图像中获取相关信息的能力。图像质量评价一般分为主观评价和客观评价。主观评价的目标是通过设计实验来获取人类对图像的主观评价分数,而客观评价的目标是通过设计计算模型,从而能够精确和自动地预测与人类感知相关的失真图像的质量。相比于客观评价中的全参考和半参考图像质量评价,无参考图像质量评价是指在不知道任何关于参考图像信息的情况下能够对待测图像质量进行评价,这也是最具有挑战性和难度最大的客观评价方法。近年来,深度学习领域的蓬勃发展促使了机器视觉领域取得了许多令人瞩目的突破性成果,例如图像识别、图像分类、目标检测,目标跟踪、图像分割、图像超分辨率重建、图像去噪、图像质量评价等。

    2 完整代码

    function [Accuracy, Sensitivity, Fmeasure, Precision, MCC, Dice, Jaccard, Specitivity] = EvaluateImageSegmentationScores(A, B)
        % ===================================================================
        % A and B need to be binary images
        % A is the ground truth, B is the segmented result.
        % MCC - Matthews correlation coefficient
        % Note: Sensitivity = Recall
        % TP - true positive, FP - false positive, 
        % TN - true negative, FN - false negative
        
        % If A, B are binary images, but uint8 (0, 255),
        % Need to convert to logical images.
        if(isa(A,'logical'))
            X = A;
        else
            X = imbinarize(A);
        end
        if(isa(B,'logical'))
            Y = B;
        else
            Y = imbinarize(B);
        end
        
        % Evaluate TP, TN, FP, FN
        sumindex = X + Y;
        TP = length(find(sumindex == 2));
        TN = length(find(sumindex == 0));
        substractindex = X - Y;
        FP = length(find(substractindex == -1));
        FN = length(find(substractindex == 1));

        Accuracy = (TP+TN)/(FN+FP+TP+TN);
        Sensitivity = TP/(TP+FN);
        Precision = TP/(TP+FP);
        Fmeasure = 2*TP/(2*TP+FP+FN);
        MCC = (TP*TN-FP*FN)/sqrt((TP+FP)*(TP+FN)*(TN+FP)*(TN+FN));
        
        % If you use MATLAB2017b+, you can call: Dice = dice(A, B), but A, B
        % need to be converted to the logical form
        % If you use MATLAB2017b+, you can call: Jaccard = jaccard(A, B), but
        % A, B need to be converted to the logical form
        Dice = 2*TP/(2*TP+FP+FN);
        Jaccard = Dice/(2-Dice);
        Specitivity = TN/(TN+FP);
    end

    博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

    部分理论引用网络文献,若有侵权联系博主删除。

  • 相关阅读:
    Hadoop2.7.3三种安装模式环境搭建
    基于go-micro微服务的实战-Gateway网关层的限流降级(八)
    Java常见面试题21-30(集合类)
    每日一题 1222. 可以攻击国王的皇后
    BUUCTF WEB filejava
    数据库和sql语句
    对数线性模型用于序列标注
    【C/C++】STL——深度剖析list容器
    编译原理—词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式
    深度学习(十)——神经网络:非线性激活
  • 原文地址:https://blog.csdn.net/qq_59747472/article/details/126924925