python中连接的组件属性

时间:2014-11-07 00:00:29

标签: python matlab image-processing binary-image connected-components

我想计算二进制图像的连通分量的统计数据。在matlab中我们有

  

形状测量

    'Area'              'EulerNumber'       'Orientation'               
    'BoundingBox'       'Extent'            'Perimeter'          
    'Centroid'          'Extrema'           'PixelIdxList' 
    'ConvexArea'        'FilledArea'        'PixelList'
    'ConvexHull'        'FilledImage'       'Solidity' 
    'ConvexImage'       'Image'             'SubarrayIdx'            
    'Eccentricity'      'MajorAxisLength' 
    'EquivDiameter'     'MinorAxisLength' 

python中有没有等效的东西?

由于

3 个答案:

答案 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接口是你可能正在寻找的。

答案 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 '''