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 版本,所以请告诉我。
当然,如果您了解有关您的图像的其他有用信息,可以帮助改善事物......也许您知道边缘处的密度总是更高,例如。
如果有人想看中间步骤,这里是灰度缩放和归一化后的图像:
这是模糊之后的样子:
我应该使用什么函数(以及我应该如何使用它们)来裁剪这张图片的中心部分?我想只取密度较低的部分,而不是密集的边界。
谢谢!
最后,我想计算区域中的微小 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 版本,所以请告诉我。
当然,如果您了解有关您的图像的其他有用信息,可以帮助改善事物......也许您知道边缘处的密度总是更高,例如。
如果有人想看中间步骤,这里是灰度缩放和归一化后的图像:
这是模糊之后的样子: