细胞形态特征(Matlab实现)

本文的目的是根据细胞的分割图像定义一些特征用于定量地描述细胞形态,使用的编程工具为Matlab 2018b。

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

具体方法为:先对二值化后的细胞分割图寻找连通域,每个连通域都视作一个细胞,计算每个连通域的面积、中心点、最短径、最长径、最大内接圆面积、最小外接圆面积等信息,结合统计学方法设计一些特征用于描述细胞的形态,代码如下:’

% 读取细胞分割图像
mask = imread('C:\Users\Administrator\Desktop\mask.png');
% 将细胞分割图像转换为0-1二值图
mask = imbinarize(mask);
% 进行孔洞填充处理
mask = imfill(mask, 'hole');
% 寻找二值图像中连通域的边缘坐标,不包括孔洞
% 本例中求得B是一个尺寸为341×1的元胞数组
% 代表这个二值图像中共有341个白色连通域(即341个细胞)
% 每个元胞中存放的是对应的连通域边缘所有点的横坐标和纵坐标
% 变量L是对连通区域进行标号的结果
[B, L] = bwboundaries(mask, 'noholes');
% 计算每个细胞(白色连通域)的中心点坐标
C = regionprops(L, 'centroid');
% 变量centroids是一个行数为连通域个数,列数为2的矩阵
% 第一列存放的是每个细胞中心点的横坐标
% 第二列存放的是每个细胞中心点的纵坐标
centroids = cat(1, C.Centroid);
imshow(mask);
hold on
% 对每个细胞单独考虑,计算一些可能用到的信息量
for i = 1:length(B)
    % 变量xc中存放的是第i个细胞中心点的横坐标
    % 变量yc中存放的是第i个细胞中心点的纵坐标
    xc = centroids(i, 1);
    yc = centroids(i, 2);
    plot(xc, yc, '*', 'Color', 'r');
    hold on
    % 变量x中存储的是第i个细胞边缘所有点的横坐标
    x = B{i}(:,2);
    % 变量y中存储的是第i个细胞边缘所有点的纵坐标
    y = B{i}(:,1);
    % 变量area中存放的是第i个细胞的面积
    area = sum(sum(L==i));
    % 变量distance中存储的是第i个细胞边缘所有点到中心点的距离
    distance = sqrt((x-xc).^2 + (y-yc).^2);
    % 变量distmin中存储的是变量distance中最短的距离(细胞最短径)
    % 变量distmax中存储的是变量distance中最长的距离(细胞最长径)
    distmin = min(distance);
    distmax = max(distance);
    % 求第i个细胞的光滑度
    dislen = length(distance);
    for j = 1:dislen
        if j == 1
            smoo(j) = abs(distance(1) - ((distance(2) + distance(dislen)) / 2));
        elseif j == dislen
            smoo(j) = abs(distance(dislen) - ((distance(1) + distance(dislen-1)) / 2));
        else
            smoo(j) = abs(distance(j) - ((distance(j-1) + distance(j+1)) / 2));
        end
    end
    smooth = sum(smoo);
    % 求第i个细胞的最大内接圆和最小外接圆
    t = 0:0.1:2*pi;
    xinner = xc + distmin*cos(t);
    yinner = yc + distmin*sin(t);
    xouter = xc + distmax*cos(t);
    youter = yc + distmax*sin(t);
    plot(xinner, yinner, 'Color', 'g');
    plot(xouter, youter, 'Color', 'y');
    % 计算最大内接圆和最小外接圆的面积
    areainner = pi*distmin*distmin;
    areaouter = pi*distmax*distmax;
    % 保存上面算得的有用的变量
    % 将每个细胞(连通域)的面积保存到变量cell_area中
    % 将每个细胞的平均径保存到变量dist_mean中
    % 将每个细胞的最短径保存到变量dist_min中
    % 将每个细胞的最长径保存到变量dist_max中
    % 将每个细胞的最短径与最长径的比值保存到变量dist_ratio中
    % 将每个细胞的光滑度保存到变量cell_smooth中
    % 将每个细胞的最大内接圆面积保存到变量area_inner中
    % 将每个细胞的最小外接圆面积保存到变量area_outer中
    % 将每个细胞的最大内接圆面积与最小外接圆面积的比值保存到变量area_ratio中
    cell_area(i) = area;
    dist_mean(i) = mean(distance);
    dist_min(i) = distmin;
    dist_max(i) = distmax;
    dist_ratio(i) = distmin/distmax;
    cell_smooth(i) = smooth;
    area_inner(i) = areainner;
    area_outer(i) = areaouter;
    area_ratio(i) = areainner/areaouter;
end

至此,计算特征的工程已经完成了大半,上述代码的可视化图形如下所示,接下来的任务就是根据代码最后的九个有效变量结合统计学方法计算一些特征用于描述细胞的形态了。

% 定义第一维特征为图中所有细胞面积的均值
formfeats(1) = mean(cell_area);
% 定义第二维特征为图中所有细胞平均径的均值
formfeats(2) = mean(dist_mean);
% 定义第三维特征为图中所有细胞最短径的均值
formfeats(3) = mean(dist_min);
% 定义第四维特征为图中所有细胞最长径的均值
formfeats(4) = mean(dist_max);
% 定义第五维特征为图中所有细胞长短径之比的均值
formfeats(5) = mean(dist_ratio);
% 定义第六维特征为图中所有细胞光滑度的均值
formfeats(6) = mean(cell_smooth);
% 定义第七维特征为图中所有细胞最大内接圆面积的均值
formfeats(7) = mean(area_inner);
% 定义第八维特征为图中所有细胞最小外接圆面积的均值
formfeats(8) = mean(area_outer);
% 定义第九维特征为图中所有细胞内外接圆面积之比的均值
formfeats(9) = mean(area_ratio);
% 定义第十维特征为图中所有细胞面积的标准差
formfeats(10) = std(cell_area);
% 定义第十一维特征为图中所有细胞平均径的标准差
formfeats(11) = std(dist_mean);
% 定义第十二维特征为图中所有细胞最短径的标准差
formfeats(12) = std(dist_min);
% 定义第十三维特征为图中所有细胞最长径的标准差
formfeats(13) = std(dist_max);
% 定义第十四维特征为图中所有细胞长短径之比的标准差
formfeats(14) = std(dist_ratio);
% 定义第十五维特征为图中所有细胞光滑度标准差
formfeats(15) = std(cell_smooth);
% 定义第十六维特征为图中所有细胞最大内接圆面积的标准差
formfeats(16) = std(area_inner);
% 定义第十七维特征为图中所有细胞最小外接圆面积的标准差
formfeats(17) = std(area_outer);
% 定义第十八维特征为图中所有细胞内外接圆面积之比的标准差
formfeats(18) = std(area_ratio);

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

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SongGu1996

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

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

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

打赏作者

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

抵扣说明:

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

余额充值