问题是这样的,有一幅经过二值化处理之后的图像,我们希望统计其中细胞的个数,和不同粘连情况的细胞个数,比如,下图中有1个细胞组成连通区域的,也有2个细胞组成连通区域的,也有更多个细胞组成连通区域的,我们希望分别统计不同的情况。
我想出的一种可行的方法是这样的:
  1. 通过图像形态学的处理erode,将一些邻接的细胞分离开来,并减少单个像素的噪声干扰
  2. 计算其中的连通域
  3. 计算每一个连通域的面积
  4. 根据面积计算其中的聚类,其中聚类算法采用kmeans,其中k,由用户设定
  5. 根据聚类的情况计算其中细胞数
里面的采用聚类的思想是根据不同类型的重叠细胞,其中的面积应该有相应的分布,比如,两个重叠的细胞面积往往会显著的小于三个重叠的细胞(但是肯定会有例外),我们基于以上的想法通过计算聚类的方法计算其中的细胞数。
  1. import cv2
  2. from numpy import *
  3. from scipy.cluster.vq import *
  4.  
  5. img=cv2.imread('FigProb9.27.jpg',0)
  6. kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
  7. img=cv2.erode(img,kernel,iterations=5)
  8. contour,h=cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
  9. cv2.drawContours(img,contour,-1,(255,0,0),1)
  10. cv2.imshow('img',img)
  11.  
  12. ContourArea=[]
  13. for cnt in contour:
  14. Area=cv2.contourArea(cnt)
  15. ContourArea.append(Area)
  16. ContourArea=array(ContourArea)
  17. ContourArea=ContourArea[ContourArea>20]
  18. #print len(ContourArea)
  19. # print ContourArea
  20. # print min(ContourArea)
  21. # print max(ContourArea)
  22. # print average(ContourArea)
  23. #print sort(ContourArea)
  24. centroid,dis=kmeans(ContourArea,5)#calculate 5 cluster
  25. label,dis=vq(ContourArea,sort(centroid))#calculate label in 5 cluster
  26. clusterNum=[]#the amount cluster
  27. classNum=[]#the total amount cell in this kind of cluster
  28. for i in range(len(label)):
  29. clusterNum.append(len(label[label==i]))
  30. classNum.append(clusterNum[i]*(i+1))
  31.  
  32. print ("In picture,we can see Total amount of cell is %d.\n ")%(sum(classNum))
  33. print("%d in one;%d in two;%d in three;%d in four;%d in five.")%(classNum[0],classNum[1],classNum[2],classNum[3],classNum[4])
  34. cv2.waitKey()


【OpenCV】基于kmeans的细胞检测方法的更多相关文章

  1. opencv:基于颜色空间的肤色检测方法

    参考链接:https://www.cnblogs.com/skyfsm/p/7868877.html

  2. 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法

    SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...

  3. 异常值检测方法(Z-score,DBSCAN,孤立森林)

     机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&sh ...

  4. 人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)

    1.Easily Create High Quality Object Detectors with Deep Learning 2016/10/11 http://blog.dlib.net/201 ...

  5. AIOps探索:基于VAE模型的周期性KPI异常检测方法——VAE异常检测

    AIOps探索:基于VAE模型的周期性KPI异常检测方法 from:jinjinlin.com   作者:林锦进 前言 在智能运维领域中,由于缺少异常样本,有监督方法的使用场景受限.因此,如何利用无监 ...

  6. 基于YOLO-V2的行人检测(自训练)附pytorch安装方法

    声明:本文是别人发表在github上的项目,并非个人原创,因为那个项目直接下载后出现了一些版本不兼容的问题,故写此文帮助解决.(本人争取在今年有空的时间,自己实现基于YOLO-V4的行人检测) 项目链 ...

  7. 【目标检测】基于传统算法的目标检测方法总结概述 Viola-Jones | HOG+SVM | DPM | NMS

    "目标检测"是当前计算机视觉和机器学习领域的研究热点.从Viola-Jones Detector.DPM等冷兵器时代的智慧到当今RCNN.YOLO等深度学习土壤孕育下的GPU暴力美 ...

  8. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  9. ​综述 | SLAM回环检测方法

    本文作者任旭倩,公众号:计算机视觉life成员,由于格式原因,公式显示可能出问题,建议阅读原文链接:综述 | SLAM回环检测方法 在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿 ...

随机推荐

  1. 如何查看MySQL中每张表占用的空间大小

    如题,找到MySQL中的information_schema表,这张表记录了所有数据库中表的信息,主要字段含义如下: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE: ...

  2. TDirectory.GetFileSystemEntries获取指定目录下的目录和文件

    使用函数: System.IOUtils.TDirectory.GetFileSystemEntries 所有重载: class function GetFileSystemEntries(const ...

  3. tar 分包压缩与合并

    要将目录logs打包压缩并分割成多个1M的文件,可以用下面的命令: tar cjf - logs/ |split -b 1m - logs.tar.bz2.完成后会产生下列文件: logs.tar.b ...

  4. iOS各种系统通知Name

    当了一次搬运工,原地址:http://blog.csdn.net/db905517804/article/details/50569949 用法: - (void) viewWillAppear:(B ...

  5. Android用户界面 UI组件--TextView及其子类(一) TextView

    1.TextView android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none /web/email/phone/map/a ...

  6. 2.5.5 使用DatePickerDialog, TimePickerDialog

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  7. 协助ScriptCase7.1做些汉化矫正工作

    之前帮助Script.net做了一部分网站的汉化工作,不过我对ScriptCase自己做的网站不满意,对其汉化网站更是不满意. ScriptCase7出来之后,比较让人头疼的就是汉化的问题,较之v6, ...

  8. perl静态编译DBD

    编译DBD 项目中经常使用perl,但perl在连接数据库时,需要依赖DBI,DBD驱动,但默认安装DBD驱动时,需要依赖数据库的lib库. 比如perl连接MySQL,需要安装MySQL clien ...

  9. xcode5.1 cocoapods报错

    Xcode升级到5.1了,apple默认让所有app都通过64位编译器编译,所以会报各种错误信息,关闭64位编译就好了. 选中Targets—>Build Settings—>Archit ...

  10. Android Http Server

    Android Http Server 1 引言          Android如何构建Http服务器呢?本文的小例子,约莫着,还是能做个参考的^^.恩,例子实现的是PC浏览手机文件,支持了下载和删 ...