本文的目的是根据细胞的分割图像计算一些特征用于描述细胞的集群情况,细胞集群特征是细胞空间结构特征的一种,使用的编程工具为Matlab 2018b。

本文中使用例子为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);
% 变量N存放的是图中所有细胞(白色连通域)的个数
N = length(C);
% 变量D存放的是所有细胞中心点两两之间的欧氏距离
% 变量D中共有N(N-1)/2个元素,每个元素都代表一个距离
D = pdist(centroids, 'euclidean');
% 变量cluster是一个尺寸为N×N的矩阵
% 若cluster(m,n)==1,则表示第m个细胞和第n个细胞中心点的距离小于50(像素),称它们为“非孤立细胞”
% (m,n)和(n,m)不重复计算,即1值只存在于变量cluster的上半三角形
cluster= triu(true(N), 1) & squareform(D < 50);
% 变量cluster_all是将矩阵cluster扩展到下半三角后的结果,即将(m,n)和(n,m)重复考虑
cluster_all = cluster | cluster';
% 变量cluster_num中存放的是非孤立细胞的个数
[row, col, V] = find(cluster_all ~= 0);
cluster_num = length(unique(row));
% 将变量D改写为矩阵形式
% D(m,n)表示第m个细胞与第n个细胞中心点之间的距离
D = squareform(D);
% 变量cluster_D是稀疏矩阵,保存的是所有非孤立细胞两两之间的序号和中心点距离
cluster_D = sparse(D.*cluster_all);
% 变量distances是一个尺寸为1×N的元胞数组
% 若第i个细胞是孤立细胞,则distances(i)为空
% 若第i个细胞是非孤立细胞,则distances(i)中保存的是第i个细胞到它邻居,和它邻居的邻居,和它邻居的
% 邻居的邻居等等等等等的最短路径长度
for i = 1:Ndistance = graphshortestpath(cluster_D, i);distances{i} = nonzeros(distance(isfinite(distance))).';
end
% 变量distances_noempty中存放的是非孤立细胞到它邻居们的最短路径
distances_noempty = distances;
distances_noempty(cellfun(@isempty, distances_noempty, 'UniformOutput', true)) = [];
% 变量distances_max中存放的是每个非孤立细胞到邻居们最短路径的最大值
distances_max = cellfun(@max, distances_noempty, 'UniformOutput', true);
% 变量network中存放的是一个N维向量,表示每个细胞属于第几个小集群
[~, network] = graphconncomp(sparse(cluster_all));
% 变量nodes中存放的是第n个小集群中细胞的序号
% 变量En中存放的是每个细胞所属的小集群共有多少条连接通路
% 变量Kn中存放的是每个细胞所属的小集群中有多少细胞
for n = 1:Nnodes = find(network == n);En(nodes) = sum(sum(cluster(nodes, nodes)));Kn(nodes) = length(nodes);
end

根据上面计算到的变量,结合统计学方法设计一些特征,用于表示细胞的集群特点:

% 定义第一维特征为图像中的细胞的数目(白色连通域个数)
ccfeats(1) = N;
% 定义第二维特征为图像中孤立细胞的数目
ccfeats(2) = N - cluster_num;
% 定义第三维特征为图像中孤立细胞的占比
ccfeats(3) = (N - cluster_num) / N;
% 定义第四维特征为非孤立细胞到邻居们距离最大值的平均
ccfeats(4) = sum(distances_max) / cluster_num;
% 定义第五维特征为非孤立细胞到邻居们距离最大值的最大值
ccfeats(5) = max(distances_max);
% 定义第六维特征为非孤立细胞到邻居们距离最大值的最小值
ccfeats(6) = min(distances_max);
% 定义第七维特征为非孤立细胞到邻居们距离的平均值
ccfeats(7) = sum(cellfun(@sum, distances, 'UniformOutput', true)) / sum(cellfun(@length, distances, 'UniformOutput', true));
% 定义第八维特征为一种计算集群系数的方法
Cn = 2 * En ./ (Kn .* (Kn - 1));
Cn(isnan(Cn)) = 0;
ccfeats(8) = sum(Cn) / N;
% 定义第九维特征为另一种计算集群系数的方法
Dn = 2 * (Kn + En) ./ (Kn .* (Kn + 1));
Dn(isnan(Dn)) = 0;
ccfeats(9) = sum(Dn) / N;
% 定义第十维特征为第三种计算集群系数的方法
% 变量iso_nodes中存放的是孤立细胞的个数
iso_nodes = sum(Kn == 1);
if iso_nodes == Nccfeats(10) = NaN;fprintf('所有细胞都是孤立细胞');
elseccfeats(10) = sum(Cn(Kn > 1)) / (N - iso_nodes);
end
% 定义第十一维特征为非孤立细胞的个数
ccfeats(11) = sum(Kn > 1);
% 定义第十二维特征为最大的细胞集群中细胞个数占细胞总个数的比
ccfeats(12) = max(Kn) / N;
% 定义第十三维特征为所有细胞集群中细胞个数的平均
if N == iso_nodesccfeats(13) = 1;
elseccfeats(13) = mean(Kn(Kn > 1));
end
% 定义第十四维特征为孤立细胞的个数
ccfeats(14) = iso_nodes;
% 定义第十五维特征为孤立细胞个数占总细胞个数的比
ccfeats(15) = iso_nodes / N;
% 定义第十六维特征为只含有两个细胞的集群个数
ccfeats(16) = sum(Kn == 2);
% 定义第十七维特征为两细胞集群中的细胞个数占总细胞个数的比
ccfeats(17) = sum(Kn == 2) / N;
% 定义第十八维特征为非孤立细胞到邻居们距离最大值中有几个细胞取到最小值
ccfeats(18) = sum(distances_max == min(distances_max));
% 定义第十九维特征为非孤立细胞到邻居们距离最大值中取到最小值的细胞个数占总细胞个数的比
ccfeats(19) = sum(distances_max == min(distances_max)) / N;
% 定义第二十维特征为非孤立细胞之间距离的平均值
% 定义第二十一维特征为非孤立细胞之间距离的方差
% 定义第二十二维特征为非孤立细胞之间距离的偏度
% 定义第二十三维特征为非孤立细胞之间距离的峰度
% 变量edge_lengths中存放的是非孤立细胞两两之间的距离
if N == iso_nodesccfeats(20) = 0;ccfeats(21) = 0;ccfeats(22) = 0;ccfeats(23) = 0;
elseedge_lengths = D .* cluster_all;edge_lengths(edge_lengths == 0) = [];ccfeats(20) = sum(edge_lengths) / length(edge_lengths);ccfeats(21) = std(edge_lengths);ccfeats(22) = skewness(edge_lengths);ccfeats(23) = kurtosis(edge_lengths);
end

细胞空间结构特征之-细胞集群特征(Matlab实现)相关推荐

  1. 解决集群中MATLAB无法启动并行池的问题

    MATLAB无法启动并行(parpool)Failed to locate and destroy old interactive jobs. 起因 尝试 解决方法 起因 最近在集群中使用MATLAB ...

  2. oracle集群服务创建表空间,Oracle数据库集群添加表空间操作规范

    Oracle数据库集群添加表空间操作规范 Oracle数据库集群添加表空间操作规范 1.首先检查dg空间是否充足SQL> select name,total_mb,free_mb,USABLE_ ...

  3. Redis 九种数据结构及其底层实现 持久化 缓存机制 过期键与内存淘汰 集群等相关知识

    参考内容: B站尚硅谷Redis视频教程 <Redis 6 入门到精通 超详细 教程> B张黑马程序员Redis视频教程 <黑马程序员Redis入门到实战教程,全面透析redis底层 ...

  4. RabbitMQ --- 惰性队列、MQ集群

    一.惰性队列 1.1.消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限.之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题. ...

  5. 分布式缓存——Redis高级彻底搞懂(Redis原理+主从+集群)

    -- 基于Redis集群解决单机Redis存在的问题 一.Redis持久化 Redis有两种持久化方案: RDB持久化 AOF持久化 1.RDB持久化 RDB全称Redis Database Back ...

  6. 七、redis分布式集群

    文章目录 一.redis持久化 1.1.RDB持久化 1.1.1.执行时机 1.1.2.RDB原理 1.1.3.小结 1.2.AOF持久化 1.2.1.AOF原理 1.2.2.AOF配置 1.2.3. ...

  7. Tomcat5集群中的SESSION复制详解

    Tomcat 5服务器为集群和SESSION复制提供了集成的支持.本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的 内在工作机制一个概要认识.我将会讨论SE ...

  8. 容器编排技术 -- Kubernetes从零开始搭建自定义集群

    容器编排技术 -- Kubernetes从零开始搭建自定义集群 1 设计和准备 1.1 学习 1.2 Cloud Provider 1.3 节点 1.4 网络 1.4.1 网络连接 1.4.2 网络策 ...

  9. 高可用集群HA之双机集群

    高可用集群HA之双机集群 HA:High Availability  高可用性:主要目的就是让运行在服务器上的服务尽可能减少的中断的技术,保证服务运行的连续性:原理如上图所示,本文实现双机集群系统,首 ...

最新文章

  1. Google Chrome 超详细使用教程
  2. C#中的“收益率突破”是什么?
  3. CSS样式表margin和padding的区别
  4. java getbasicremote_Vue+Java 通过websocket实现服务器与客户端双向通信操作
  5. 新浪微博Python客户端接口OAuth2
  6. sublime text 3在windows中配置ctags插件
  7. linux内存和缓冲区,linux – 内存消失了(不,不是缓冲区或缓存)
  8. tfw文件如何导入cad_教你三维家3d设计软件如何导入cad文件
  9. 拼接图像亮度均匀调整_品质不变 价格更香 | 爆款拼接屏新品上市
  10. SpringBoot 简单实现仿CAS单点登录系统
  11. c语言 动态数组_C语言的学习笔记!助你一路成长!
  12. 有关胶囊网络你所应知道的一切
  13. 图像检索:图像相似性度量
  14. SUBSTRING_INDEX
  15. Modbus转Profinet网关连接英威腾变频器方法
  16. linux~tar压缩文件夹到指定文件夹 --- 相对路径
  17. JavaWeb kuangshen汇总
  18. 性能分析 -- 各种毛刺
  19. 巧用千寻位置GNSS软件|CAD功能全解析
  20. 软件测试之python高级软件测试开发第13期柠檬班,重写unittest

热门文章

  1. [HSCSEC 2023] rev,pwn,crypto,Ancient-MISC部分
  2. Imagine— 让图片再小一点点
  3. hg和git命令对照表
  4. Google Earth Engine(GEE)——Landsat 8TI/TOA/SR影像对比分析区别和去云即NDVI计算
  5. 研发效能度量实践之有赞篇
  6. 3d Max 一些操作技巧
  7. 绝对干货:微信小程序有哪些模式能够让你快速盈利?
  8. Windows环境下的RTX实时操作系统学习记录
  9. 魔兽世界服务器名称修改,魔兽世界怀旧服新增6组服务器 新服务器名称一览
  10. 太爽啦,GitHub网站1S变VS Code