我应该使用什么函数(以及如何使用它们)来裁剪该图像的中心部分?我只想选取密度较低的部分,而不是密集的边界。
谢谢!
最后,我想计算这些区域中的小圆圈/点(单元格),或者计算第二张图像中概述的密度较低部分的面积。我之前曾使用 ImageJ 通过手动绘制区域来完成此操作,但对于大量图像来说,这是一个非常乏味的过程。
我目前已经看过 Scipy,但它们很大,我真的不知道如何解决这个问题。如果有人能指出我正确的方向,那就太好了!
最佳答案
在 Python 中,我需要花费更长的时间,但我只是在命令行上使用 ImageMagick 尝试了一些想法,它安装在大多数 Linux 发行版上,并且在 macOS 上免费提供和 Windows。
首先,我修剪了您的图像以去除无关的垃圾:
然后,我所做的步骤是:
- 放弃 Alpha/透明度 channel
- 转换为灰度,因为没有有用的颜色信息,
- 标准化以拉伸(stretch)对比度并使所有像素在 0-255 范围内,
- 查找单元格的阈值
- 用周围 49x49 像素的平均值替换每个像素(框模糊)
- 阈值再次定为 90%
该命令在终端/命令提示符中如下所示:
convert blobs.png -alpha off -colorspace gray -normalize -threshold 50% -statistic mean 49x49 -threshold 90% result.png
结果是:
如果这种方法看起来对您的其他图片很有前途,我们可以很快制定出 Python 版本,所以请告诉我。
当然,如果您知道有关图像的其他有用信息可以帮助改善情况...例如,也许您知道边缘的密度总是较高。
<小时/>如果有人想查看中间步骤,这里是灰度缩放和标准化后的图像:
这是模糊后的效果:
关于Python:沿着边界从图像中裁剪出区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013574/