| [mmframe] [Up] [mmtext] | Image Creation |
Implemented in Python.
| f | Image Gray-scale (uint8 or uint16) or binary image. |
| data | Image Gray-scale (uint8 or uint16) or binary image.
vector of points. Each row gives information regarding a geometrical primitive. The interpretation of this data is dependent on the parameter GEOM. The line drawing algorithm is not invariant to image transposition. |
| value | Image Gray-scale (uint8 or uint16) or binary image.
pixel gray-scale value associated to each point in parameter data. It can be a column vector of values or a single value. |
| GEOM | String geometrical figure. One of 'point','line', 'rect', or 'frect' for drawing points, lines, rectangles or filled rectangles respectively. |
| y | Image Gray-scale (uint8 or uint16) or binary image.
|
mmdrawv creates the image
y by a superposition of points, rectangles and lines of gray-level
k1 on the image
f. The parameters for each geometrical primitive are defined by each line in the 'data' parameter. For
points, they are represented by a matrix where each row gives the point's row and column, in this order. For
lines, they are drawn with the same convention used by points, with a straight line connecting them in the order given by the
data matrix. For
rectangles and
filled rectangles, each row in the
data matrix gives the two points of the diagonal of the rectangle, where the points use the same row, column convention.
>>> f=uint8(zeros((3,5)))
>>> pcoords=uint16([[0,2,4],
[0,0,2]])
>>> pvalue=uint16([1,2,3])
>>> print mmdrawv(f,pcoords,pvalue,'point')
[[1 0 2 0 0] [0 0 0 0 0] [0 0 0 0 3]]
>>> print mmdrawv(f,pcoords,pvalue,'line')
[[1 1 2 0 0] [0 0 0 2 0] [0 0 0 0 2]]
>>> rectcoords=uint16([[0],
[0],
[3],
[2]])
>>> print mmdrawv(f,rectcoords, uint16(5), 'rect')
[[5 5 5 5 0] [5 0 0 5 0] [5 5 5 5 0]]
>>> f=mmreadgray('blob3.tif')
>>> pc=mmblob(mmlabel(f),'centroid','data')
>>> lines=mmdrawv(mmintersec(f,0),transpose(pc),uint8(1),'line')
Warning: Converting input image from int32 to binary uint8.
>>> mmshow(f,lines)
![]() |
|
| f,lines |
def mmdrawv(f, data, value, GEOM):
from Numeric import array, NewAxis, zeros, Int, put, ravel, arange, floor
from string import upper
GEOM = upper(GEOM)
data = array(data)
value = array(value)
y = array(f)
lin, col = data[1,:], data[0,:]
i = lin*f.shape[1] + col; i = i.astype(Int)
if len(f.shape) == 1: f = f[NewAxis,:]
if value.shape == (): value = value + zeros(lin.shape)
if len(lin) != len(value):
print 'Number of points must match n. of colors.'
return None
if GEOM == 'POINT':
put(ravel(y), i, value)
elif GEOM == 'LINE':
for k in range(len(value)-1):
delta = 1.*(lin[k+1]-lin[k])/(1e-10 + col[k+1]-col[k])
if abs(delta) <= 1:
if col[k] < col[k+1]: x_ = arange(col[k],col[k+1]+1)
else : x_ = arange(col[k+1],col[k]+1)
y_ = floor(delta*(x_-col[k]) + lin[k] + 0.5)
else:
if lin[k] < lin[k+1]: y_ = arange(lin[k],lin[k+1]+1)
else : y_ = arange(lin[k+1],lin[k]+1)
x_ = floor((y_-lin[k])/delta + col[k] + 0.5)
i_ = y_*f.shape[1] + x_; i_ = i_.astype(Int)
put(ravel(y), i_, value[k])
elif GEOM == 'RECT':
for k in range(data.shape[1]):
d = data[:,k]
x0,y0,x1,y1 = d[1],d[0],d[3],d[2]
y[x0:x1,y0] = value[k]
y[x0:x1,y1] = value[k]
y[x0,y0:y1] = value[k]
y[x1,y0:y1+1] = value[k]
elif GEOM == 'FRECT':
for k in range(data.shape[1]):
d = data[:,k]
x0,y0,x1,y1 = d[1],d[0],d[3],d[2]
y[x0:x1+1,y0:y1+1] = value[k]
else:
print "GEOM should be 'POINT', 'LINE', 'RECT', or 'FRECT'."
return y
| [mmframe] [Up] [mmtext] | |
| Copyright (c) 2003, Roberto A. Lotufo, UNICAMP-University of Campinas; Rubens C. Machado, CenPRA-Renato Archer Research Center. |