我正在研究研究人类干细胞神经元神经突退化的数据。输出数据是一对图像,一张是长而健康的神经突“之前”的图片,另一张是损坏的、营养不良的神经突“之后”的图片。我们有一个能够标记这些神经突的图像处理套件,但是该软件只能计算总神经突面积,不能有效区分前后照片。
我尝试在下面创建一个示例。左边是我们的“之前”图片,线条更少、更长、更粗。左边是“之后”的照片,线条更少、更细。
目前,图片“A”和“B”的“区域”数据输出非常相似。我正在考虑是否可以编写一个程序,该程序只计算图片 A 中出现的连续的长对象。数据的最终输出只需要为每张照片一个数字。 IE。照片 A 可能只输出“545”,而照片 B 可能输出“33”。
我能想到允许总数计数的对象识别版本,但想不出一种方法来调整程序以仅识别较长的连续线条而不是较短的 Blob 。
我们更喜欢使用 python 的唯一原因是处理管道的早期阶段使用 python 脚本,如果可能的话,我们宁愿坚持使用一种语言。 (我们在 python 方面的经验也比 matlab 多得多)。
最佳答案
一种简单的方法是使用边缘检测过滤器过滤图像。然后你可以做一些非常基本的事情,比如对输出求和,这是对图像中边缘数量的粗略测量。给定两张总面积相似的图像,具有更多“边缘性”(边缘过滤图像的标准)的图像将意味着您有更多、更小的部分。具有较小过滤输出的一个将需要更少、更大的部件。 (同样,这假设总面积相似。)
这种方法有利也有弊。首先,它非常简单。但是您必须定义“相似区域”的含义,以证明比较两个图像的过滤输出是合理的。
此外,边缘过滤方法可能大大低估了实际件数。在此处显示的图像中,右侧图像中的附加边缘仅是两幅图像中边缘的一小部分,因为这些片段垂直于其长轴“ split ”。另一方面,如果它们与其长轴平行分开,您将获得大约两倍的边。
无论如何,如果这种简单的方法对您不起作用,scikit-image
中实现了更复杂的算法,这些算法专为此目的而设计。例如,查看 approximate_polygon()
方法。 skimage.measure
模块有几种不同的方法来解决这个问题。
关于python - 使用python,如何计算图像中具有指定尺寸的对象的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46571679/