Python图像处理:从电子显微照片测量层宽度

2024-05-19 09:46:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张电子显微照片上的图像,描绘了生物系统中的致密和稀有层,如下所示。在

VDTap.png

有问题的图层位于图像的中间,开始时刚好靠近标签“re”,然后逐渐变细到左侧。我想:

1)计算深色/致密和浅色/稀有层的总数

2)测量每层的宽度,假设右下角的黑色比例尺长1微米

我一直在尝试用Python来做这个。如果我预先裁剪图像,使其仅包含几层的一部分,如图中所示的3个暗层和3个亮层:

test.png

我可以使用代码计算层数:

import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage
from PIL import Image

tap = Image.open("VDtap.png").convert('L')
tap_a = np.array(tap)

tap_g = ndimage.gaussian_filter(tap_a, 1)
tap_norm = (tap_g - tap_g.min())/(float(tap_g.max()) - tap_g.min())
tap_norm[tap_norm < 0.5] = 0
tap_norm[tap_norm >= 0.5] = 1

result = 255 - (tap_norm * 255).astype(np.uint8)

tap_labeled, count = ndimage.label(result)

plt.imshow(tap_labeled)
plt.show()

但是,我不确定如何合并比例尺和测量这些层的宽度,我已经计数。更糟糕的是,当分析整个图像以包含比例尺时,我甚至无法区分图像中的所有图层。在

如果你能在解决这个问题上有什么见解,我将不胜感激。提前谢谢。在

编辑1:

到目前为止,我在这个问题上取得了一些进展。如果我预先裁剪图像以便只包含一点图层,我就可以使用下面的代码来获得每个图层的厚度。在

^{pr2}$

本质上,我发现了Python模块skimage,它可以获取一个带标签的图像数组,并为每个标记的对象返回边界框的四个坐标;1和[3]位置给出了边界框的x坐标,因此它们的差分产生了x维中每个层的范围。此外,for循环的第一部分(if-else条件)用于获取每个深色/致密层之前的浅色/稀有层,因为只有深色层被标记为nImage.label. 在

不幸的是,这仍然不理想。首先,我不想事先裁剪图像,因为我打算对许多这样的图像重复这个过程。我考虑过也许可以使用某种过滤器来突出显示图层的(粗略的)周期性,但是我不确定是否存在这样的过滤器?第二,上面的代码实际上只给出了每层的相对宽度-我还没有找到一种方法来合并比例尺,从而得到实际的宽度。在


Tags: 代码图像import图层norm宽度asnp
1条回答
网友
1楼 · 发布于 2024-05-19 09:46:49

我不想在派对上扫兴,但我觉得你的问题比你最初想的要难。我不能发布一个有效的代码片段,因为你的文章有太多的部分需要深入关注。我曾在几家生物/医学实验室工作过,这项工作通常是由人来标记特定的图像点和计算机来计算距离。也就是说,我们应该试着自动化=D

对你来说,问题是一个简单却乏味的工作,拿出一把尺子,做几百个测量。非常适合电脑,对吧?好吧,是的,也不是。计算机不知道如何识别图片中的任何一个波段,必须准确地告诉它在寻找什么,这将是一个棘手的问题。在

识别比例尺

你对所有图片中的比例尺了解多少。他们总是相同数量的垂直和水平图片,他们总是实心黑色?总是只有一条横线吗(字母r的实线呢)?我的建议是试试wavelet transform。想象一下二维模拟函数

(可能有助于绘制此函数) f(x)= 0如果| x | gt;1, 如果| x |<;1&;x | gt;0.5,则为1 -1如果| x |<;0.5

当我们的小波f(x,y)卷积到图像上时,输出图像只有在找到黑色比例尺时才会有较高的值。同样,我设置为1的长度也可以针对小波进行调整,这也将帮助您找到比例尺。在

找到山脊

我会先解决上面的问题,因为这看起来比较容易,而且会让你为这个问题做好准备。我会为这个构造另一个小波,但只是作为一个预处理步骤。对于这个小波,我再次尝试2d的0和盒函数,但这次尝试匹配相邻的三个(或更多)方框。另外,除了框的高度和宽度参数外,我们还需要一个间距和倾斜角度参数。你可能不需要非常接近实际值,只要足够接近图像的其余部分就可以了。在

测量脊线

有很多方法可以做到这一点,但是为了简单起见,让我们使用前面的步骤。取你的3盒小波答案,它应该在中间脊的中心,并报告一个方框“宽度”,这是它捕捉到的三个脊的平均宽度。考虑到宽度变化有多慢,可能已经足够接近了!在

打猎不错!在

相关问题 更多 >

    热门问题