实例1:计算二值分割图像的dice相似系数
实例2:计算多区域分割图像的dice相似系数
本例程的配套完整源码和图片素材下载
描述:
similarity
= dice(BW1
,BW2
)
计算二进制图像BW1
和BW2
之间的Sørensen-Dice相似系数(BW为二值图像)
similarity
= dice(BW1
,BW2
)similarity
= dice(L1
,L2
)
计算标签图像L1
和L2
中的每个标签的Dice索引(L为标签图像)
similarity
= dice(L1
,L2
)similarity
= dice(C1
,C2
)
计算分类图像C1
和 C2
中的每个类别的Dice索引(C为分类图像)
similarity
= dice(C1
,C2
)
实例1:计算二值分割图像的dice相似系数
close all;clear all;
A = imread('hands1.jpg');%读取一张带有对象的RGB图像以进行分割
I = im2gray(A);%将RGB图像A转换为灰度图像I
figure
imshow(I)%显示灰度图像I
title('Original Image')%添加标签
%使用主动轮廓(snakes)方法去分割这只手
mask = false(size(I));%创建一个与图像I一样尺寸大小的值都为0(纯黑)的图像mask
%调整mask区域值,x轴为(25~X_max_size-25),y轴为(25~Y_max_size-25)的区域赋值为1(纯白)
mask(25:end-25,25:end-25) = true;
BW = activecontour(I, mask, 300);%调用activecontour函数,默认300次迭代进行图像I的分割
figure
imshow(BW)%显示活动轮廓分割后的二值图像BW
title('Activecontour_segmentation Image')%添加标签
BW_groundTruth = imread('hands1-mask.png');%读取一张真实分割了的手的二值图像
%计算活动轮廓分割后的图像BW与真实分割图像BW_groundTruth之间的dice相似系数
similarity = dice(BW, BW_groundTruth);%调用dice函数
figure
imshowpair(BW, BW_groundTruth)%以不同颜色显示图像BW和BW_groundTruth
title(['Dice Index = ' num2str(similarity)])%添加标签,显示dice相似系数
输入初始图像I 活动轮廓(300次迭代)分割图像BW 比较两张图像(BW和BW_groundTruth)的相似系数
将活动轮廓方法的迭代次数设定为100、500、3000次时效果分别为:
比较两张图像的相似系数(100次迭代) 比较两张图像的相似系数(500次迭代) 比较两张图像的相似系数(3000次迭代)
注:BW_groundTruth 为真实分割了的手的二值图像
注:关于基于Matlab的主动轮廓 (snake) 方法进行图像分割介绍及实例效果前点击
实例2:计算多区域分割图像的dice相似系数
%计算多区域分割图像的dice相似系数
%这个例子展示了读取一幅有多个区域要分割的图像,然后将其分割到多个区域
%并计算每个区域的dice相似系数
close all;clear all;
RGB = imread('yellowlily.jpg');%读取一张RGB图像
figure,
imshow(RGB)
title('Original Image')%添加标签
%创建三个区域的涂鸦,以区分他们的典型颜色特征,区域由一个4元素的向量指定
%其元素表示(选取区域ROI左上角的x坐标,选取区域ROI左上角的y坐标,ROI的宽度,ROI的高度)
%创建区域1,将黄花进行分类
region1 = [350 700 425 120]; %区域1 [x y w h] format
BW1 = false(size(RGB,1),size(RGB,2));%创建一个与RGB图像一样尺寸的值都为0(纯黑)的图像BW1
%将BW1图像中region1区域范围值赋值为1(纯白)
BW1(region1(2):region1(2)+region1(4),region1(1):region1(1)+region1(3)) = true;
figure,
imshow(BW1)
title('Seed Regions 1:黄花')%添加标签
%创建区域2,将绿色的茎和叶进行分类
region2 = [800 1124 120 230];%区域2
BW2 = false(size(RGB,1),size(RGB,2));%创建一个与RGB图像一样尺寸的值都为0(纯黑)的图像BW2
%将BW2图像中region2区域范围值赋值为1(纯白)
BW2(region2(2):region2(2)+region2(4),region2(1):region2(1)+region2(3)) = true;
figure,
imshow(BW2)
title('Seed Regions 2:绿色的茎和叶')%添加标签
%创建区域3,对棕色的污物进行分类
region3 = [20 1320 480 200; 1010 290 180 240];%区域3(两个独立小块组成)
BW3 = false(size(RGB,1),size(RGB,2));%创建一个与RGB图像一样尺寸的值都为0(纯黑)的图像BW3
%将BW3图像中region3区域范围值赋值为1(纯白)
BW3(region3(1,2):region3(1,2)+region3(1,4),region3(1,1):region3(1,1)+region3(1,3)) = true;
BW3(region3(2,2):region3(2,2)+region3(2,4),region3(2,1):region3(2,1)+region3(2,3)) = true;
figure,
imshow(BW3)
title('Seed Regions 3:棕色的污物')%添加标签
figure,
imshow(RGB)%显示图像RGB
hold on
%visboundaries(BW)表示在当前轴上绘制二进制图像BW中前景区域的边界。
%BW是二维的二进制图像,其中逻辑为真的像素属于前景区域,逻辑为假的像素构成背景
visboundaries(BW1,'Color','r');%在RGB图像上以红色显示种子区域图像BW1的前景区域
visboundaries(BW2,'Color','g');%在RGB图像上以绿色显示种子区域图像BW2的前景区域
visboundaries(BW3,'Color','b');%在RGB图像上以蓝色显示种子区域图像BW3的前景区域
title('Seed Regions')%添加标签
%对选取了三个种子区域的图像RGB使用基于测地距离的颜色分割方法进行分割
L = imseggeodesic(RGB,BW1,BW2,BW3,'AdaptiveChannelWeighting',true);
%读取一张真实分割了的二值图像
L_groundTruth = double(imread('yellowlily-segmented.png'));
%直观比较基于测地距离的颜色分割和真实分割图像结果,label2rgb(L)根据标记矩阵L转换为不同颜色的RGB图像
Z = label2rgb(L);
D = label2rgb(L_groundTruth);
figure,
imshow(Z)
title('基于测地距离的颜色方法分割结果')%添加标签
figure,
imshow(D)
title('真实分割了的分割结果')%添加标签
% montage({label2rgb(L),label2rgb(L_groundTruth)})%将两张标签图像进行单副显示
% title('Comparison of Segmentation Results (Left) and Ground Truth (Right)')
%计算每个分割区域的dice相似系数
similarity = dice(L, L_groundTruth)
区域1(Seed Regions 1) 区域2(Seed Regions 2) 区域3(Seed Regions 3)
输入初始图像I 各区域对应输入图像位置图像
基于测地距离的颜色方法分割结果图 真实分割了的分割结果图 各分割区域的dice相似系数(分别对应区域1-3)
结论:可见第二个区域的dice相似系数明显较小。这一结果与分割结果的视觉对比是一致的,分割结果错误地将图像右下角的污垢也分类为绿叶
注:
1、dice相似系数,以数值标量或数值向量的形式返回,其值在[0,1]范围内。相似系数( similarity )为1所表示的是,在两个图像中的分割是一个完美的匹配。
2、如果输入数组是二进制图像,相似系数( similarity )是一个标量。
3、如果输入数组是标签图像,相似系数( similarity )是向量,其中第一个系数是标签1的Dice索引,第二个系数是标签2的Dice索引,依此类推。
4、如果输入数组是分类图像,相似系数( similarity )是向量,其中第一个系数是第一类的Dice索引,第二个系数是第二类的Dice索引,依此类推