细胞空间结构特征之-德劳内三角形特征(Matlab实现)

本文目的是根据细胞中心点的德劳内三角形图计算一些统计量,定量地描述细胞的空间结构特征,使用的软件为Matlab 2018b。德劳内三角形(Delaunay)的定义和特点这里不再赘述,有兴趣钻研的小伙伴请自行百度。

本文中使用例子为TCGA细胞分割数据集中的一张,原始图像(尺寸为1000×1000)如下左,相应的细胞分割图(二值图)如下右,计算德劳内三角形使用的是右边的细胞分割图,原始图像不参与计算

首先根据细胞分割图计算每个细胞(白色连通域)的中心点,并根据这些中心点得到德劳内三角形

% 读取细胞分割图像
mask = imread('C:\Users\Administrator\Desktop\mask.png');
% 将细胞分割图像转换为0-1二值图
mask = imbinarize(mask);
% 进行孔洞填充处理
mask = imfill(mask, 'hole');
% 进行连通域标号操作
L = bwlabel(mask);
% 计算每个细胞(白色连通域)的中心点坐标
C = regionprops(L, 'centroid');
% 变量centroids是一个行数为连通域个数,列数为2的矩阵
% 第一列存放的是每个细胞中心点的横坐标
% 第二列存放的是每个细胞中心点的纵坐标
centroids = cat(1, C.Centroid);
% 展示标记图像
imshow(mask);
hold on
% 求得德劳内三角图并用红色显示出来
% 变量del是一个行数为生成三角形个数,列数为3的矩阵
% 每一行上的三个数代表该三角形的三个结点在变量centroids中的行号
% 这个三角形是由这三个结点组成的
del = delaunay(centroids(:,1), centroids(:,2));
triplot(del, centroids(:,1), centroids(:,2), 'r');

运行上面的代码后会展示出如下所示的德劳内三角图,线条颜色已设为红色。

根据德劳内三角求特征只需要上述的centroids变量和del变量即可,通过计算三角形的边长、周长、面积等参数,结合统计学方法即可自由地设计并计算一些特征来描述细胞。

absc = centroids(:, 1);
ordi = centroids(:, 2);
sideidx = 1;
periidx = 1;
areaidx = 1;
for i = 1:size(del, 1)
    % 变量tri中存放三角形三个结点的坐标
    tri = [absc(del(i,:)), ordi(del(i,:))];
    % 变量side用来存储所有三角形的每条边长
    side(sideidx) = sqrt((tri(1, 1) - tri(2, 1))^2 + (tri(1, 2) - tri(2, 2))^2);
    side(sideidx + 1) = sqrt((tri(1, 1) - tri(3, 1))^2 + (tri(1, 2) - tri(3, 2))^2);
    side(sideidx + 2) = sqrt((tri(2, 1) - tri(3, 1))^2 + (tri(2, 2) - tri(3, 2))^2);
    % 变量peri用来存储所有三角形的周长
    peri(periidx) = side(sideidx) + side(sideidx + 1) + side(sideidx + 2);
    periidx = periidx + 1;
    sideidx = sideidx + 3;
    % 变量area用来存储所有三角形的面积
    area(areaidx) = polyarea(tri(:, 1), tri(:, 2));
    areaidx = areaidx + 1;
end
% 第一维特征定义为所有三角形中最短边与最长边的比值
delfeats(1) = min(side) / max(side);
% 第二维特征定义为所有三角形边长的标准差
delfeats(2) = std(side);
% 第三维特征定义为所有三角形边长的平均值
delfeats(3) = mean(side);
% 第四维特征定义为所有三角形边长的变异系数
delfeats(4) = std(side) / mean(side);
% 第五维特征定义为所有三角形中最小面积与最大面积的比值
delfeats(5) = min(area) / max(area);
% 第六维特征定义为所有三角形面积的标准差
delfeats(6) = std(area);
% 第七维特征定义为所有三角形面积的平均值
delfeats(7) = mean(area);
% 第八维特征定义为所有三角形面积的变异系数
delfeats(8) = std(area) / mean(area);

代码中的特征仅仅是例子,大家可以发挥自己的想象力,设计出更多特征用于实际任务。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongGu1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值