[mmlabel] [Up] [mmgrain] | Measurements |
Implemented in Python.
y | Image Gray-scale (uint8 or uint16) or binary image. |
Take measurements from the labeled image
fr
. The measurements are: area, centroid, or bounding rectangle. The parameter
option
controls the output format: 'IMAGE': the result is an image; 'DATA': the result is a double column vector with the measurement for each blob. The region with label zero is not measured as it is normally the background. The measurement of region with label 1 appears at the first row of the output.
>>> fr=uint8([ [1,1,1,0,0,0], [1,1,1,0,0,2], [1,1,1,0,2,2]])
>>> f_area=mmblob(fr,'area')
>>> print f_area
[[9 9 9 0 0 0] [9 9 9 0 0 3] [9 9 9 0 3 3]]
>>> f_cent=mmblob(fr,'centroid')
>>> print f_cent
[[0 0 0 0 0 0] [0 1 0 0 1 0] [0 0 0 0 0 0]]
>>> f_bb=mmblob(fr,'boundingbox')
>>> print f_bb
[[1 1 1 0 0 0] [1 0 1 0 1 1] [1 1 1 0 1 1]]
>>> d_area=mmblob(fr,'area','data')
>>> print d_area
[[9] [3]]
>>> d_cent=mmblob(fr,'centroid','data')
>>> print d_cent
[[1 1] [4 1]]
>>> d_bb=mmblob(fr,'boundingbox','data')
>>> print d_bb
[[0 0 2 2] [4 1 5 2]]
>>> f=mmreadgray('blob3.tif')
>>> fr=mmlabel(f)
>>> g=mmblob(fr,'area')
>>> mmshow(f)
>>> mmshow(g)
![]() |
![]() |
|
f | g |
>>> f=mmreadgray('blob3.tif')
>>> fr=mmlabel(f)
>>> centr=mmblob(fr,'centroid')
>>> mmshow(f,mmdil(centr))
![]() |
|
f,mmdil(centr) |
>>> f=mmreadgray('blob3.tif')
>>> fr=mmlabel(f)
>>> box=mmblob(fr,'boundingbox')
>>> mmshow(f,box)
![]() |
|
f,box |
def mmblob(fr, measurement, option="image"): from Numeric import NewAxis, ravel, zeros, sum, nonzero, sometrue, array from string import upper measurement = upper(measurement) option = upper(option) if len(fr.shape) == 1: fr = fr[NewAxis,:] n = max(ravel(fr)) if option == 'DATA': y = [] else : y = zeros(fr.shape) if measurement == 'AREA': for i in range(1,n+1): aux = fr==i area = sum(ravel(aux)) if option == 'DATA': y.append(area) else : y = y + area*aux elif measurement == 'CENTROID': for i in range(1,n+1): aux = fr==i ind = nonzero(ravel(aux)) indx = ind / fr.shape[1] indy = ind % fr.shape[1] centroid = [sum(indx)/len(ind), sum(indy)/len(ind)] if option == 'DATA': y.append([centroid[1],centroid[0]]) else : y[centroid] = 1 elif measurement == 'BOUNDINGBOX': for i in range(1,n+1): aux = fr==i aux1, aux2 = sometrue(aux,0), sometrue(aux,1) col , row = nonzero(aux1) , nonzero(aux2) if option == 'DATA': y.append([col[0],row[0],col[-1],row[-1]]) else: y[row[0]:row[-1],col[0] ] = 1 y[row[0]:row[-1],col[-1]] = 1 y[row[0], col[0]:col[-1]] = 1 y[row[-1],col[0]:col[-1]] = 1 else: print "Measurement option should be 'AREA','CENTROID', or 'BOUNDINGBOX'." if option == 'DATA': y = array(y) if len(y.shape) == 1: y = y[:,NewAxis] return y
mmlabel | Label a binary image. |
mmgrain | Gray-scale statistics for each labeled region. |
mmlabelflat | Label the flat zones of gray-scale images. |
mmstats | Find global image statistics. |
mmdrawv | Superpose points, rectangles and lines on an image. |
[mmlabel] [Up] [mmgrain] | ![]() |
Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center. |