python - Regionprops 总是找到一个区域 - python
问题描述
我有一个包含多个 glob 的图像,当我使用 regionprops 来查找每个 glob 的质心和 BB 时。但是,它总是只为所有这些找到 1。更具体地说,我在左侧图像上得到结果,但我想要右侧图像上的结果: regions_problem
我的代码:
regions = regionprops(itk_label)
fig, ax = plt.subplots()
ax.imshow(itk_label, cmap=plt.cm.gray)
i=0
for props in regions:
i=i+1
print(str(i))
y0, x0 = props.centroid
ax.plot(x0, y0, '.r', markersize=5)
minr, minc, maxr, maxc = props.bbox
bx = (minc, maxc, maxc, minc, minc)
by = (minr, minr, maxr, maxr, minr)
ax.plot(bx, by, '-b', linewidth=1.0)
ax.axis((0, 600, 600, 0))
plt.show()
谁能告诉我我做错了什么?
有趣的是,右边的图像也是我过去创造的。但是,我不能再这样做了。
解决方案
您的要素可能具有相同的标签值。regionprops
要求您的功能独立标记,即。1, 2, 3, ...
. 这是一个例子:
在这种情况下,两个特征都有标签值1
,因此它们被测量为好像它们是一个对象:
import numpy as np
from skimage import measure
from matplotlib import pyplot as plt
im = np.zeros((600, 600), dtype=int)
im[350:400, 350:400] = 1
im[510:530, 200:240] = 1
np.unique(im)
>>> array([0, 1])
plt.matshow(im)
regions = measure.regionprops(im)
for r in regions:
plt.plot(*r.centroid[::-1], marker='x', color='r')
如果您使用该measure.label
功能,您可以独立标记分离的特征,即。标签值1, 2
:
plt.matshow(im)
labelled = measure.label(im)
np.unique(labelled)
>>> array([0, 1, 2])
regions = measure.regionprops(labelled)
for r in regions:
plt.plot(*r.centroid[::-1], marker='x', color='r')
这会给你你想要的结果。
推荐阅读
- python - Python pip 安装
- python - 如何使用 Tkinter asktosavefile 模块保存 pandasProfile 报告?
- python - 如何在 JupyterLab 上指定笔记本字体
- azure - Azure QnA Maker [下载知识库] 删除“changeStatus”?
- excel - 过滤表格内的单元格值
- javascript - Javascript:从对象数组中获取对象的子集
- git - git找不到要推送到的存储库
- tailwind-css - 为什么顺风中没有多少百分比单位?
- plotly - 有没有办法为绘图图设置动态宽度和高度?
- sql - HANA SQL 为 id 选择计数和数组