我对Python完全陌生,并且在数据处理方面有些挣扎。到目前为止,我一直在使用Matlab进行大多数数据分析。
我正在使用skimage.measure.regionprops分析图像,该图像输出属性列表。现在,我在子区域中处理图像,并希望更改此列表中的项目。
具体地说,我在处理子图像时将区域切成两半。现在,我要将更新的区域包括在列表中。由于我在分区上工作,因此质心属性无法在完整图像中给我坐标。因此,我想添加偏移值以对此进行纠正。
但是,我无法编辑regionprops输出列表。我首先尝试编辑质心属性,但这是一个元组,并且这些属性显然不可更改。然后,我尝试删除质心字段并用新值替换它,但显然我也根本无法更改属性列表。
有什么方法可以操纵regionprops结果列表?
我正在研究一种解决方法,但是我想知道这是否完全可能...
答案 0 :(得分:-1)
from skimage.measure import regionprops
import numpy as np
arr = np.zeros((10, 10))
arr[[1, 4, 9], [1, 4, 9]] = 1
arr[[4, 7, 8], [2, 4, 6]] = 2
这将创建一个如下所示的数组:
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 2., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 2., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 2., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
list_from_regprops = regionprops(arr.astype(int))
这将生成您的区域列表,您可以通过索引列表并提取要更改的值来访问,然后使用相同的机制进行覆盖
#list_from_regprops = [r1, r2, r3]
old_centroid_x, old_centroid_y = list_from_regprops[0].centroid
new_centroid_x, new_centroid_y = old_centroid_x + 4, old_centroid_y - 4#for example
list_from_regprops[0].centroid = new_centroid_x, new_centroid_y
这应该可以满足您的需要,只需将0替换为您需要更改的任何索引即可。