我有一组细胞的图像,我需要计算它们。我使用bwlabel进行了类似的练习,但是这个练习更具挑战性,因为有些小细胞我不想算。此外,一些细胞彼此重叠。我在网上看到了一些MATLAB示例,但它们都涉及到无法使用的功能。您对如何分离重叠细胞有什么想法吗?
这是图像:
为了更清楚:请帮助我计算一下红细胞(圆形)的数量:
图像为灰度,但我认为您可以区分哪些是红细胞。它们具有独特的双凹形状......其他一切都无关紧要。但更具体地说,这是一个图像,其中包含我想忽略/丢弃/不用红色突出显示的所有内容。
主要问题是细胞重叠。
答案 0 :(得分:5)
以下是执行此操作的ImageJ宏(也是免费软件)。我建议你使用ImageJ(或斐济)来探索这类东西。然后,如果你真的需要它,你可以写一个Octave程序来做它。
run ("8-bit");
setAutoThreshold ("Default");
setOption ("BlackBackground", false);
run ("Convert to Mask");
run ("Fill Holes");
run ("Watershed");
run ("Analyze Particles...", "size=100-Infinity exclude clear add");
这种方法给出了这个结果:
点击点击相当于:
在ImageJ上,如果你有一个bianry图像,分水岭实际上执行了距离变换,然后是分水岭。
Octave具有除分水岭之外的所有上述功能(我计划尽快实施)。
如果你不能将ImageJ用于你的问题(为什么不呢?它也可以在无头模式下运行),那么另一种方法是获取每个对象的区域,如果太高,则假设它是多个单元格。它有点取决于您的问题,是否可以生成平均单元格大小(和错误)的值。
另一种选择是测量所识别的每个物体的圆度。重叠的单元格将不那么圆,您可以通过这种方式识别它们。
这取决于您愿意在程序输出中接受多少错误。
答案 1 :(得分:1)
这只是为了帮助解决“噪音问题”,但为什么不继续使用bwlabel并尝试使用bwareaopen
来摆脱小物件?看起来单元格非常大,只需设置一些大小阈值即可去除小对象http://www.mathworks.com/matlabcentral/answers/46398-removing-objects-which-have-area-greater-and-lesser-than-some-threshold-areas-and-extracting-only-th
对于重叠单元格,可以设置单个单元格大小的上限。所以当你有两个细胞重叠时,它会把它归类为“大于一个细胞”或类似的东西。所以它至少承认了形状,但无法准确确定那里有多少个细胞