我想计算二进制图像的连接组件的统计信息。在matlab中我们有
形状测量
'Area' 'EulerNumber' 'Orientation'
'BoundingBox' 'Extent' 'Perimeter'
'Centroid' 'Extrema' 'PixelIdxList'
'ConvexArea' 'FilledArea' 'PixelList'
'ConvexHull' 'FilledImage' 'Solidity'
'ConvexImage' 'Image' 'SubarrayIdx'
'Eccentricity' 'MajorAxisLength'
'EquivDiameter' 'MinorAxisLength'
python中有类似的东西吗?
感谢
刚刚回答了一个类似的问题。使用scikit映像中的regionprops
函数来获取Python中的CC属性。
from scipy.ndimage.measurements import label
from skimage.measure import regionprops
label = label(img)
props = regionprops(label)
# get centroid of second object
centroid = props[1].centroid
# get eccentricity of first object
ecc = props[0].eccentricity
regionprops
输出的形状测量包括上述问题中列出的所有特征。Python中等效的'PixelIdxList'
是regionprops
输出的coords
属性。
我认为openCV的cv2接口可能就是您想要的。
正如我所知,当Matlab试图找到'PixelIdxList'
时,将数组视为1D数组,然后计算索引,但在regionprops[i].coords
中,返回一个数组数组(2D数组),每个内部数组都有两个元素,通过使用它们可以找到索引值。
类似于x = [[x1,y1],[x2,y2],....,[xn,yn]]
。我试图实现Matlab的精确代码,如果你想的话,你可以使用:
import skimage.measure as skme
import numpy as np
state = skme.regionprops(image)
for j in range(np.size(state)):
s1 = state[j].coords
flg = 0
if np.size(s1,axis=0)>1:
flg = 1
InrList = []
for k in range(np.size(s1,axis=0)):
x1, y1 = state[j].coords[k]
InrList.append(image[x1,y1])
PixelIdxList.append(InrList)
if flg == 0:
x1, y1 = state2[j].coords[0]
PixelIdxList.append(iamge[x1,y1])
# PixelIdxList is exact out put in Matlab
#STATS = regionprops(image,'PixelIdxList'); matlab
''' EACH ONE TEACH ONE '''