Python:沿边界从图像中裁剪区域

Python: Crop out area from image along borders

我应该使用什么函数(以及我应该如何使用它们)来裁剪这张图片的中心部分?我想只取密度较低的部分,而不是密集的边界。

谢谢!

最后,我想计算区域中的微小 circles/dots(细胞)或计算密度较低部分的面积,如第二张图片所示。我之前用 ImageJ 手动绘制过该区域,但这是一个非常繁琐的过程,有很多图像。

Original

Area traced

我目前看过 Scipy,但它们很大,我真的不知道如何处理。如果有人能指出我正确的方向,那就太好了!

在 Python 中我会花更长的时间来做,但我只是在命令行上使用 ImageMagick 尝试了一些想法,它安装在大多数Linux 发行版,可免费用于 macOS 和 Windows。

首先,我对您的图片进行了裁剪以去除多余的垃圾:

那么,我做的步骤是:

  • 放弃 alpha/transparency 频道
  • 转换为灰度,因为没有有用的颜色信息,
  • 标准化以拉伸对比度并使所有像素都在 0-255 范围内,
  • 找到细胞的阈值
  • 用周围 49x49 像素的平均值替换每个像素(框模糊)
  • 再次达到 90% 的阈值

该命令在 Terminal/Command 提示中看起来像这样:

convert blobs.png -alpha off -colorspace gray -normalize -threshold 50% -statistic mean 49x49 -threshold 90%  result.png

结果是:

如果这种方法对您的其他图片看起来很有希望,我们可以很快制定出 Python 版本,所以请告诉我。

当然,如果您了解有关您的图像的其他有用信息,可以帮助改善事物......也许您知道边缘处的密度总是更高,例如。


如果有人想看中间步骤,这里是灰度缩放和归一化后的图像:

这是模糊之后的样子: