我有一个代码,在某个点上,我得到了一组二维二维numpy数组来表示主要是椭圆和圆(细胞核)的对象

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

我考虑过使用here解释的凸包:在这种情况下,如果度量标准对于许多次要凹面(对我们来说是重要的情况)和一次主要凹面(不那么重要)相同,下图。python - skimage或python中对象的凹度度量-LMLPHP

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

最佳答案

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

python - skimage或python中对象的凹度度量-LMLPHP

如果该度量标准不足以适合您的应用程序,则可以尝试圆方差的紧凑性。查看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/

10-11 14:02