gpt4 book ai didi

python - skimage 中或 python 中一般对象凹度的度量

转载 作者:行者123 更新时间:2023-11-30 21:59:23 24 4
gpt4 key购买 nike

我有一个代码,在某些时候我得到一组 2D 二进制 numpy 数组来表示主要是椭圆和圆形(细胞核)的对象

我需要一个关于边缘粗糙程度(锯齿状)的指标。病理文献中有核轮廓指数:它是周长/sqrt(面积),这有效,但在我们的例子中,我们特别需要看看周长有多“粗糙”。椭圆和圆的核轮廓指数不同,即使两者都有光滑的边缘。 在我们的例子中,具有粗糙边缘的圆形比具有平滑边缘的椭圆更重要

我考虑过使用凸包解释here :我认为在这种情况下,对于许多次要凹陷(这对我们来说是重要的情况)和一个主要凹陷(不那么重要)的度量是否相同,如下图所示。 enter image description here

我也尝试过 openCV,但是我发现很难从数学角度理解其中实际发生的情况,而且它看起来非常像 skimage 凸包,我更愿意坚持使用 skimage

最佳答案

我认为坚固性(即对象中的像素与凸包的像素之比)可能是开始测试的一个很好的指标。可以通过函数skimage.measure.regionprops以简单的方式计算它。 。我使用这种方法获得的结果如下所示:

solidity

如果该指标不足以满足您的应用程序,您可以尝试循环方差紧致性。看看here用于形态特征的综合汇编。

这是我用来生成上面的玩具示例的代码:

import numpy as np
from skimage import io, draw, transform, measure
import matplotlib.pyplot as plt

N = 512
rr, cc = draw.circle(r=N/2, c=N/2, radius=N/3, shape=(N, N))
steps = [4, 16, 32]
smooth = np.zeros(shape=(N, N), dtype=np.uint8)
smooth[rr, cc] = 255

fig, ax = plt.subplots(1, len(steps), figsize=(12, 5))

for i, s in enumerate(steps):
jagged = transform.resize(smooth[::s, ::s], (N, N))
jagged[jagged>0] = 1
props = measure.regionprops(measure.label(jagged))
ax[i].imshow(img)
ax[i].set_title('Solidity={}'.format(props[0].solidity))

plt.show(fig)

关于python - skimage 中或 python 中一般对象凹度的度量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54604771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com