如何计算Octave中的红细胞/圆圈3.8.2

时间:2015-04-15 10:51:26

标签: image-processing count octave

我有一组细胞的图像,我需要计算它们。我使用bwlabel进行了类似的练习,但是这个练习更具挑战性,因为有些小细胞我不想算。此外,一些细胞彼此重叠。我在网上看到了一些MATLAB示例,但它们都涉及到无法使用的功能。您对如何分离重叠细胞有什么想法吗?

这是图像:

Erythrocytes

为了更清楚:请帮助我计算一下红细胞(圆形)的数量:

Red blood cell

图像为灰度,但我认为您可以区分哪些是红细胞。它们具有独特的双凹形状......其他一切都无关紧要。但更具体地说,这是一个图像,其中包含我想忽略/丢弃/不用红色突出显示的所有内容。

Not to count

主要问题是细胞重叠。

2 个答案:

答案 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");

这种方法给出了这个结果:

screenshoot of the ROIs found

点击点击相当于:

  1. 图片>输入> 8位
  2. 图片>调整>阈值
  3. 选择“默认”并在阈值对话框上取消“黑暗背景”。然后单击“应用”。
  4. 过程>二元>填补孔
  5. 过程>二元>分水
  6. 分析>分析粒子...... 7在“分析粒子”对话框中将“100-Infinity”设置为有效粒径范围
  7. 在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

对于重叠单元格,可以设置单个单元格大小的上限。所以当你有两个细胞重叠时,它会把它归类为“大于一个细胞”或类似的东西。所以它至少承认了形状,但无法准确确定那里有多少个细胞