[mmsecross] [Up] [mmseline] | Structuring Elements |
Implemented in Python.
mmsedisk creates a flat structuring element
B
that is disk under the metric METRIC , centered at the origin and with radius
r
or a non-flat structuring element that is a semi-sphere under the metric METRIC, centered at
(0, h)
and with radius
r
. This structuring element can be created on the 1D, 2D or 3D space.
>>> a=mmseshow(mmsedisk(10,'2D','CITY-BLOCK'))
>>> b=mmseshow(mmsedisk(10,'2D','EUCLIDEAN'))
>>> c=mmseshow(mmsedisk(10,'2D','OCTAGON'))
>>> mmshow(a)
>>> mmshow(b)
>>> mmshow(c)
![]() |
![]() |
![]() |
|
a | b | c |
>>> d=mmseshow(mmsedisk(10,'2D','CITY-BLOCK','NON-FLAT'))
>>> e=mmseshow(mmsedisk(10,'2D','EUCLIDEAN','NON-FLAT'))
>>> f=mmseshow(mmsedisk(10,'2D','OCTAGON','NON-FLAT'))
>>> mmshow(d)
Warning: Converting input image from int32 to uint16.
>>> mmshow(e)
Warning: Converting input image from int32 to uint16.
>>> mmshow(f)
Warning: Converting input image from int32 to uint16.
![]() |
![]() |
![]() |
|
d | e | f |
>>> g=mmsedisk(3,'2D','EUCLIDEAN','NON-FLAT')
>>> mmseshow(g)
array([[-2147483647, -2147483647, 1, 1, 1, -2147483647, -2147483647], [-2147483647, 2, 2, 2, 2, 2, -2147483647], [ 1, 2, 3, 3, 3, 2, 1], [ 1, 2, 3, 3, 3, 2, 1], [ 1, 2, 3, 3, 3, 2, 1], [-2147483647, 2, 2, 2, 2, 2, -2147483647], [-2147483647, -2147483647, 1, 1, 1, -2147483647, -2147483647]],'i')
>>> h=mmsedisk(3,'2D','EUCLIDEAN','NON-FLAT',5)
>>> mmseshow(h)
array([[-2147483647, -2147483647, 6, 6, 6, -2147483647, -2147483647], [-2147483647, 7, 7, 7, 7, 7, -2147483647], [ 6, 7, 8, 8, 8, 7, 6], [ 6, 7, 8, 8, 8, 7, 6], [ 6, 7, 8, 8, 8, 7, 6], [-2147483647, 7, 7, 7, 7, 7, -2147483647], [-2147483647, -2147483647, 6, 6, 6, -2147483647, -2147483647]],'i')
def mmsedisk(r=3, DIM="2D", METRIC="EUCLIDEAN", FLAT="FLAT", h=0): from string import upper from Numeric import resize, transpose, arange from Numeric import sqrt, arange, transpose, maximum METRIC = upper(METRIC) FLAT = upper(FLAT) assert DIM=='2D','Supports only 2D structuring elements' if FLAT=='FLAT': y = mmbinary([1]) else: y = int32([h]) if r==0: return y if METRIC == 'CITY-BLOCK': if FLAT == 'FLAT': b = mmsecross(1) else: b = int32([[-2147483647, 0,-2147483647], [ 0, 1, 0], [-2147483647, 0,-2147483647]]) return mmsedil(y,mmsesum(b,r)) elif METRIC == 'CHESSBOARD': if FLAT == 'FLAT': b = mmsebox(1) else: b = int32([[1,1,1], [1,1,1], [1,1,1]]) return mmsedil(y,mmsesum(b,r)) elif METRIC == 'OCTAGON': if FLAT == 'FLAT': b1,b2 = mmsebox(1),mmsecross(1) else: b1 = int32([[1,1,1],[1,1,1],[1,1,1]]) b2 = int32([[-2147483647, 0,-2147483647], [ 0, 1, 0], [-2147483647, 0,-2147483647]]) if r==1: return b1 else: return mmsedil( mmsedil(y,mmsesum(b1,r/2)) ,mmsesum(b2,(r+1)/2)) elif METRIC == 'EUCLIDEAN': v = arange(-r,r+1) x = resize(v, (len(v), len(v))) y = transpose(x) Be = mmbinary(sqrt(x*x + y*y) <= (r+0.5)) if FLAT=='FLAT': return Be be = h + int32( sqrt( maximum((r+0.5)*(r+0.5) - (x*x) - (y*y),0))) be = mmintersec(mmgray(Be,'int32'),be) return be else: assert 0,'Non valid metric' return B
mmfreedom | Control automatic data type conversion. |
mmsebox | Create a box structuring element. |
mmsecross | Diamond structuring element and elementary 3x3 cross. |
mmseline | Create a line structuring element. |
mmimg2se | Create a structuring element from a pair of images. |
mmseshow | Display a structuring element as an image. |
mmdil | Dilate an image by a structuring element. |
[mmsecross] [Up] [mmseline] | ![]() |
Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center. |