mercredi 20 décembre 2006

ITK (Insight Toolkit) : utilisation du wrapper python "WrapITK"

ITK inclue un wrapper python. Petit citation du site web :

ITK is implemented in C++. ITK is cross-platform, using the CMake build environment to manage the compilation process. In addition, an automated wrapping process generates interfaces between C++ and interpreted programming languages such as Tcl, Java, and Python (using CableSwig).

Mais un autre wrapper appelé "WrapITK" a été développé.


Ressources

Documentation INRA de WrapITK :
WrapITK_-_Enhanced_languages_support_for_the_Insight_Toolkit.pdf

WrapITK dans le "Insight Journal" :
Fiche de présentation
Revue
Download

Site INRA :
http://voxel.jouy.inra.fr/mima2/informatique/devel/
http://voxel.jouy.inra.fr/darcs/contrib-itk/
http://voxel.jouy.inra.fr/darcs/contrib-itk/WrapITK/

Exemples en python d'utilisation de ITK :
http://www.vtk.org/Wiki/ITK_Scripting
http://www.doc.ic.ac.uk/~dr/software/wrapping.html


Chargement

Le mieux est sans doute de le faire direrectement à la source, à savoir sur le site de l'INRA : http://voxel.jouy.inra.fr/darcs/contrib-itk/WrapITK/WrapITK.tar.gz


Compilation

Tout ce que j'en sais pour l'instant, c'est que ca peut prendre 8 heures... voir plus...

mardi 19 décembre 2006

Scipy : traitement du signal et de l'image

Ressources

Site officiel :
http://www.scipy.org/

Documentation :
http://www.scipy.org/Documentation

Utilisation en traitement d'image :
http://www.scipy.org/Cookbook/SignalSmooth
http://www.scipy.org/SciPyPackages/Ndimage
http://www.scipy.org/Cookbook/Matplotlib/LoadImage
http://www.scipy.org/Cookbook/Matplotlib/converting_a_matrix_to_a_raster_image


Présentation de Scipy

Le but de Scipy est de regrouper les outils python utiles dans le domaine scientifique. Il rassemble donc plusieurs modules.

La brique de base de ce travail est le module "numpy" (scipy-core). On peut se contenter de charger et utiliser directement numpy, mais il est préférable de charger le module "scipy" (qui s'occupe de charger numpy de facon transparente) et d'utiliser numpy indirectement, à travers Scipy.

Scipy comporte un certain nombre de sous modules, dont on ne peut utiliser les fonction que si on les charge explicitement. Les sous modules nécessaires au traitement d'images sont :

  • misc,
  • ndimage,
  • signal.

Premiers pas : charger une image et l'afficher

Une solution est de faire appel à l'artillerie lourde, et d'utiliser "matplotlib" pour ce qui est du chargement et de l'affichage des images.

Nos besoins étant très simples, on va pour l'instant se contenter d'utiliser les fonctions imread() et imshow() qui se trouvent dans le sous module "misc" de "scipy".

Ces fonctions sont en fait dans "scipy.misc.pilutil", un sous module qui regroupe des fonctions faisant appel à la bilbliothéque PIL (cf "import Image").

Le code :

import scipy
from scipy import misc

filename = sys.argv[1]

im = scipy.misc.imread(filename)
scipy.misc.imshow(im)

La fonction "imshow()" fait appel (comme PIL qui est ici utilisé) au programme externe "XV" pour l'affichage des images.

lundi 18 décembre 2006

PIL : blibliothéque de traitement d'image pour python


Ressources

La page Officielle de la bibliothèque PIL (Python Imging Library) :
http://www.pythonware.com/products/pil/

Une mini FAQ en français :
http://python.developpez.com/faq/?page=Pil

Le manuel :
http://www.pythonware.com/library/pil/handbook/
http://effbot.org/imagingbook/image.htm (le même ailleurs)


Premiers pas : afficher une image

Le manuel contient en particulier le tutorial :
http://www.pythonware.com/library/pil/handbook/introduction.htm

Le code pour charger une image et l'afficher :

from Image import *
im = open("lena.ppm")
im.show()

J'obtiens l'erreur suivante :

sh: xv : commande introuvable

La commande
Image.show() utilise sur mon système linux "ubuntu dapper" la commande "xv" pour afficher les images. Comme XV n'est pas installé chez moi, j'ai contourné le problème en créant un lien symbolique vers un autre programme d'affichage d'image, à savoir la commande "display" (qui fait parti de ImageMagic).

ln -s /usr/bin/display /home/silene/bin/xv

Cela affiche l'image sans problème. Appuyer sur la touche "q" pour fermer.


Premiers pas : créer une image

On va créer une mini image de test en suivant l'explication donnée ici :
http://python.developpez.com/faq/?page=Pil#PilSave

En plus, on va utiliser numpy pour mettre les données sous forme d'une matrice. Le code est le suivant :

from Image import *
import numpy

im_new = new( "L", (4,5) )
print im_new.format, im_new.size, im_new.mode

data = range(1,4*5+1)
im_new.putdata(data)

mat = list( im_new.getdata() )
mat = numpy.reshape(mat, (4,5))
print mat