← Back to team overview

dolfin team mailing list archive

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