首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中使用regionprops

在Python中使用regionprops
EN

Stack Overflow用户
提问于 2018-07-10 00:06:35
回答 1查看 12.4K关注 0票数 2

我正在尝试分析灰度TIFF堆栈,在这些堆栈中,给定的帧看起来像this。我对其进行过滤(使用高斯模糊),然后将其二值化(使用Otsu的阈值方法)。

MATLAB代码,它工作得很好:

代码语言:javascript
复制
image_conncomp = bwconncomp(image_binary); # entire stack is held in image_binary

for i=1:image_conncomp.NumObjects
    object_size = length(image_conncomp.PixelIdxList{i});
end

示例图像中的每个白点都会被拾取,其体积(以像素为单位)由object_size非常准确地给出。

Python代码:

代码语言:javascript
复制
from skimage import measure

labels = measure.label(image_binary, background=1) # same image_binary as above
propsa = measure.regionprops(labels)

for label in propsa:
    object_size = len(label.coords)

Python代码似乎工作得很好……除了大多数检测到的对象的object_size将为1- 200,然后少数几个对象的大小将为数千像素。

这些函数有哪些不同之处?我很乐意尝试Python中的另一种方法来计算对象大小,但我很难找到另一种方法。如果我能找到一个很好的方法来替代Matlab的bwconncomp函数,那么能有一个Python版本的代码就太好了。

EN

回答 1

Stack Overflow用户

发布于 2019-10-20 18:47:58

我们可以通过首先在阈值二值图像上应用scipy.ndimage的形态关闭,然后使用label()函数合并二值图像中的连接区域来完成相同的操作,如下所示(区域的大小略有不同,将取决于形态内核的大小):

代码语言:javascript
复制
from scipy.ndimage import label
from scipy.ndimage.morphology import binary_closing
from skimage.filters import threshold_otsu
import matplotlib.pylab as plt

original = plt.imread('https://i.stack.imgur.com/nkQpj.png')
thres = threshold_otsu(original)
binary = original > thres
binary_closed = binary_closing(binary, structure=np.ones((2,2)))
labeled_image, num_features = label(binary_closed)
feature_areas = np.bincount(labeled_image.ravel())[1:]   
print(feature_areas) # if we use 3x3 SE we shall get two regions with areas 24, 46
# [24 42  1]

plt.figure(figsize=(8,7))
plt.gray()
plt.subplot(221), plt.imshow(original), plt.axis('off'), plt.title('original')
plt.subplot(222), plt.imshow(binary), plt.axis('off'), plt.title('binray')
plt.subplot(223), plt.imshow(binary_closed), plt.axis('off'), plt.title('binray closed')
plt.subplot(224), plt.imshow(labeled_image, cmap='inferno'), plt.axis('off'), plt.title('labelled')
plt.show()

要获得以下输出:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51249781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档