| [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. |