我想计算二进制图像的连通分量的统计数据。在matlab中我们有
形状测量
'Area' 'EulerNumber' 'Orientation'
'BoundingBox' 'Extent' 'Perimeter'
'Centroid' 'Extrema' 'PixelIdxList'
'ConvexArea' 'FilledArea' 'PixelList'
'ConvexHull' 'FilledImage' 'Solidity'
'ConvexImage' 'Image' 'SubarrayIdx'
'Eccentricity' 'MajorAxisLength'
'EquivDiameter' 'MinorAxisLength'
python中有没有等效的东西?
由于
答案 0 :(得分:1)
刚回答similar question。使用scikit-image中的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'
等效项是coords
输出的regionprops
属性。
答案 1 :(得分:0)
我认为openCV的cv2接口是你可能正在寻找的。 p>
答案 2 :(得分:0)
据我所知,当Matlab尝试查找'PixelIdxList'
时,将数组视为一维数组,然后对索引进行计数,但是在regionprops[i].coords
中,带回每个内部数组都具有的arrays(2D array)数组两元素,并使用它们可以找到索引值。
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 '''