dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #11963
Re: Image to Function data structure conversion
>
> Let me know when you have created debian packages. It seems I have to
> rebuild everything, even cmake. Compilation is in principle no problem,
> but I already compile a decent number of packages on a regular basis and
> being non-bleeding edge on packages I don't know well seems tempting.
>
> I might download and compile, but not today.
>
> Kent
>
>
python-itk debian, based on the new WrapITK, is just published:
http://code.google.com/p/wrapitk/wiki/WrapITKBinaries .The 32 bit
version is ready, the 64 bit version is being built on opensuse build
service and will be available in a few hours.
I have tried the [itk]->[numpy]->[dolfin] example, and it already
looks great, here is the output:
Checking mesh ordering (finished).
211 * 212 = 44732 pixels took 246.780 ms transfering from itk to
dolfin through numpy
That is 5.516854 us per pixel.
I am going to add the itk-dolfin interface in c++ in the next few
days, which should make the conversion even faster leading to more
reasonable performance for 3D data. Below is an updated version of the
example. Let me know if there are any problems.
-Ali
----------------------------------------------------------
# [itk]->[numpy]->[dolfin] test
from dolfin import *
from numpy import *
import itk
import time
dim = 2
inType = itk.Image[itk.D, dim]
reader = itk.ImageFileReader[inType].New(FileName="/path/to/file.bmp")
reader.Update()
t1 = time.time()
itk2numpy = itk.PyBuffer[inType]
numpy_arr = itk2numpy.GetArrayFromImage( reader.GetOutput() )
shape = numpy_arr.shape
mesh = UnitSquare(shape[0]-1, shape[1]-1)
class ImageFunction(Function):
def eval(self, value, x):
i = int((self.A.shape[0]-1)*x[0])
j = int((self.A.shape[1]-1)*x[1])
# print i,j
value[0] = self.A[(i,j)]
V = FunctionSpace(mesh, "CG", 1)
f = ImageFunction(V)
f.A = numpy_arr
t2 = time.time()
print '%i * %i = %i pixels took %0.3f ms transfering from itk to
dolfin through numpy'% (shape[0], shape[1], shape[0]*shape[1],
(t2-t1)*1e3)
print 'That is %f us per pixel.'% ((t2-t1) * 1e6 / (shape[0]*shape[1]))
plot(f) # can viper plot 2d images better than this?
interactive()
Follow ups
References