我正在研究从人类干细胞衍生的神经元神经突变性的数据。输出数据是一对图像,一个"之前"长而健康的神经突起的图片,以及一个"之后的#34;破碎,营养不良神经突的图片。我们有一个能够标记这些神经突的图像处理套件,但是该软件只能计算总神经突区域,这不能有效地区分前后照片。
我试图在下面创建一个示例。在左边是我们的"之前"图片,线条更少,更长,更粗。在左边是"之后"照片用更少,更细的线条。
目前," area"的数据输出对于图片" A"和" B"非常相似。我正在考虑是否有可能编写一个程序,只计算图片A中存在的连续长对象。每张照片的最终输出数据只需要一个数字。即照片A可能只输出" 545",vs照片B可以输出" 33" 。
我可以想到允许完全计数的对象识别版本,但是无法想出一种方法来调整程序以仅识别较长的连续线而不是短的blob。
我们更喜欢使用python的唯一原因是处理管道的早期阶段使用python脚本,如果可能的话我们宁愿坚持使用一种语言。 (我们在python中也有比matlab更多的经验)。
答案 0 :(得分:2)
一种简单的方法是使用边缘检测滤波器对图像进行滤波。然后,您可以执行一些非常基本的操作,例如对输出求和,这是对图像中边缘数量的粗略测量。给定两个具有相似总面积的图像,具有更多"边缘的图像" (边缘滤波图像的标准)意味着你有更多更小的碎片。具有较小滤波输出的一个将需要更少,更大的块。 (同样,这假设总面积相似。)
这种方法有利有弊。首先,它非常简单。但是你必须定义你的意思和类似的区域",以证明比较两个图像的滤波输出。
此外,边缘过滤方法可能大大低估了实际的碎片数量。在您在此处显示的图像中,右图中的附加边缘仅是两个图像中边缘的一小部分,因为这些图像是"分割"垂直于它们的长轴。另一方面,如果它们被平行分割成它们的长轴,你的边缘量大约是两倍。
无论如何,如果这种简单的方法对你不起作用,scikit-image
中实现了更复杂的算法,这些算法就是为此而设计的。例如,查看approximate_polygon()
方法。 skimage.measure
模块有几种不同的方法可以解决这个问题。