Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 两幅图像之间的相似性度量_Matlab_Image Processing_Image Segmentation - Fatal编程技术网

Matlab 两幅图像之间的相似性度量

Matlab 两幅图像之间的相似性度量,matlab,image-processing,image-segmentation,Matlab,Image Processing,Image Segmentation,我目前正在MATLAB上实现图像分割。我有两个实现 图像被分割成两个区域-前景和背景 图像被分割成两个以上的区域-假设3个分割区域或4个 我试图通过使用骰子系数或Jaccard索引来计算分割图像和地面真相(手动分割图像)之间的相似性度量。这适用于分割为两个区域的分割图像。这是由以下代码实现的 dice = 2*nnz(segIm&grndTruth)/(nnz(segIm) + nnz(grndTruth)) 这期望segIm和grndTruth的大小相同。它们也必须是数字或逻辑的

我目前正在MATLAB上实现图像分割。我有两个实现

  • 图像被分割成两个区域-前景和背景
  • 图像被分割成两个以上的区域-假设3个分割区域或4个 我试图通过使用骰子系数或Jaccard索引来计算分割图像和地面真相(手动分割图像)之间的相似性度量。这适用于分割为两个区域的分割图像。这是由以下代码实现的

    dice = 2*nnz(segIm&grndTruth)/(nnz(segIm) + nnz(grndTruth))
    

    这期望segIm和grndTruth的大小相同。它们也必须是数字或逻辑的

    然而,我还没有找到一种方法来应用这个度量来比较多区域分割图像的相似性。有人能告诉我如何在我的应用程序中使用骰子系数吗

    编辑:关于nkjt的建议我已经完成了基本的实施,并给出了以下结果。请随时升级代码,以提高准确性

    我在考虑两个矩阵形式的两个图像。A为分割图像,B为人工地面真实值。下面给出了上述建议实现的matlab代码。请检查并给出您的想法

    A=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4]
    B=[1 3 4 4;1 1 3 4;1 2 3 4;1 2 3 1]
    %//First Suggestion
    dice = 2*nnz(A==B)/(nnz(A) + nnz(B))
    %//2nd Suggestion
    A1=(A==1);B1=(B==1);
    A2=(A==2);B2=(B==2);
    A3=(A==3);B3=(B==3);
    A4=(A==4);B4=(B==4);
    dice = (2*nnz(A1&B1)/(nnz(A1) + nnz(B1))...
            +2*nnz(A2&B2)/(nnz(A2) + nnz(B2))...
            +2*nnz(A3&B3)/(nnz(A3) + nnz(B3))...
            +2*nnz(A4&B4)/(nnz(A4) + nnz(B4)))/4
    
    请注意:我还想知道在这种情况下,Hausdorff距离度量是否可以应用于3相位和4相位分割图像

    编辑:我有一个新的查询。如果假设图像有4个区域,并且已按如下示例所示的方式正确分割:如果现在使用不同的强度值表示不同的区域,则使用骰子系数,两个分割结果将给出不同的结果。对于分段Reg 1,我有dice=1**对于**分段区域2,我有dice=0.75
    。但这两个结果都是准确的。如何修改代码,使分段结果反映骰子系数的答案

    的工作介绍了几种比较图像分割算法结果的方法。见第3.1节及其小节

    我相信在他们那里可以找到一些Matlab代码


    Berkeley segmentation dataset(bsds500)是图像分割社区中公认的基准。

    您可能需要研究为分割设计的度量,例如标准化概率随机数

    但是,我可以看到两种可能的方法来快速使用现有代码

    1) 不要使用逻辑映像和&,而是使用:

    dice = 2*nnz(segIm==grndTruth)/(nnz(segIm) + nnz(grndTruth));
    
    这里的segIm和grndTruth都应该是数字(理想情况下是整数,前景区域的值为1,2,3…等等)


    2) 为每个前景区域从segIm和grndTruth中生成一组二值图像,并为每个区域定义一个骰子系数。

    谢谢,我将研究它。假设图像分为4个区域,每个区域的地面真实值和分割图像的值分别为1、2、3和4。你认为你的代码能在这种情况下工作吗?请你再解释一下你的第二种方法好吗?这对我真的很有帮助。只要图像大小相同,这行代码就可以工作。对于第二种情况,您可以通过类似于
    segIm1=segIm==1
    的方式创建BW图像。segIm1和grndTruth1的骰子系数将是“区域1的分割有多接近”,依此类推。如果您希望某些区域比其他区域更容易分割,那么这可能会有所帮助。是的,这看起来很好——不过请注意,这种类型的比较对于某些类型的错误来说并不十分可靠。例如,如果要获得图像中有多少个对象的计数,则应该有一个度量,用于惩罚将对象连接在一起或将单个对象拆分为多个部分的错误。很大程度上取决于你的目标是什么。对于边界比较?可能(同样取决于什么类型的图像和什么度量是重要的)。以下是文献中的一个示例实现:midag.cs.unc.edu/pubs/papers/MICCAI01-gerig-valmet.pdf‎请解释我如何使用regionprops来比较图像以进行相似性度量?可能重复