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

Posted

技术标签:

【中文标题】Python:沿边界从图像中裁剪区域【英文标题】:Python: Crop out area from image along borders 【发布时间】:2019-01-31 11:20:35 【问题描述】:

我应该使用哪些功能(以及我应该如何使用它们)来裁剪此图像的中心部分?我想只取密度较低的部分,而不是密集的边界。

谢谢!

最后,我想计算区域中的小圆圈/点(细胞),或者计算第二张图像中概述的密度较小部分的面积。我之前使用 ImageJ 通过手动追踪该区域来完成此操作,但这是一个非常乏味的过程,需要大量图像。

Original

Area traced

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

【问题讨论】:

作物是否必须有一个弯曲的边界,或者你能把它近似为一个矩形吗?就气泡而言,您可以查看 OpenCV 库。 OpenCV 有一些用于检测气泡的功能,您可能能够自动检测气泡。 【参考方案1】:

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

首先,我修剪了您的图像以去除多余的垃圾:

然后,我做的步骤是:

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

该命令在终端/命令提示符中如下所示:

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

结果是:

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

当然,如果您知道其他有助于改进图像的有用信息……也许您知道边缘处的密度总是较高。


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

这是模糊后的:

【讨论】:

马克,我无法使用 IM 6.9.10.10 Q16 Mac OSX 从您的命令中重现您的结果。您是否可能忘记了某些内容或更改了您所写内容的任何值。原始输入中还有一个外部白色边框可能需要移除。 @fmw42 抱歉,是的 - 我忘记了这一点,因为我在回答的过程中出去做了其他事情。原始图像修剪得很差。我会添加修剪过的给你玩。 谢谢,现在看来可以了。但是如果你仔细看,右下角有一个小的白色区域。您可以在命令末尾使用 -morphology open octagon:2 删除它。 @fmw42 是的,谢谢弗雷德。目前,我无法知道这种方法是否最适合 OP,因为我只看到了一张图像 - 它可能会与其他图像平齐,所以我会在过早优化和微调之前等待反馈!谢谢你,我一直很感激你的意见。

以上是关于Python:沿边界从图像中裁剪区域的主要内容,如果未能解决你的问题,请参考以下文章

在图像 Python 中裁剪自定义区域 [关闭]

使用OpenCV(Python)找到具有最大封闭区域的轮廓

使用 php 从图像中裁剪多边形

使用python从二进制图像中裁剪感兴趣区域

如何使用 Python 图像库裁剪通过鼠标单击选择的区域?

裁剪区域不是矩形时裁剪图像