tiilab : Les formats et les programmes Version β du 21 août 2015



Documents pareils
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

TP : Gestion d une image au format PGM

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

Projet Matlab : un logiciel de cryptage

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Présentation du langage et premières fonctions

Introduction à NetCDF

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Rappels Entrées -Sorties

TD : Codage des images

Programmation impérative

Conservation des documents numériques

Informatique Générale

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

TP 1. Prise en main du langage Python

Chap17 - CORRECTİON DES EXERCİCES

UE Programmation Impérative Licence 2ème Année

Introduction au langage C

Traitement numérique de l'image. Raphaël Isdant

Jeux de caracte res et encodage (par Michel Michaud 2014)

Analyse d images. Edmond.Boyer@imag.fr. Edmond Boyer UFRIMA 1

LOGICIEL DC4D MONITOR

Cours d Algorithmique et de Langage C v 3.0

Structure fonctionnelle d un SGBD

Expérience 3 Formats de signalisation binaire

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Transmission d informations sur le réseau électrique

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Codage d information. Codage d information : -Définition-


Conventions d écriture et outils de mise au point

La solution à vos mesures de pression

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Logiciel de Base. I. Représentation des nombres

UE C avancé cours 1: introduction et révisions

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Programmation C. Apprendre à développer des programmes simples dans le langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ELO Office / Pro Les avantages : Archivage et gestion documentaire

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Traitement bas-niveau

Architecture des ordinateurs

HP Color LaserJet Pro MFP M476dn

CONFIGURATION DE L AUTOMATE SIEMENS

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Chapitre 13 Numérisation de l information

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Le langage C. Introduction, guide de reference

Création de maquette web

Rappels d architecture

Structurer ses données : les tableaux. Introduction à la programmation

VIBXPERT Collecteur et Analyseur de données FFT

Chap III : Les tableaux

as Architecture des Systèmes d Information

Purkinje Dossier Configuration requise. Version 5.11

LES TYPES DE DONNÉES DU LANGAGE PASCAL

IRL : Simulation distribuée pour les systèmes embarqués

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Bases de programmation. Cours 5. Structurer les données

Claude Delannoy. 3 e édition C++

La technologie Java Card TM

la solution vidéo numérique qui offre une surveillance simple et puissante t: +44 (0) e: w:

2 Comment fonctionne un ordinateur, dans les grandes lignes

Formats d images. 1 Introduction

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Structure du format BMP, sa lecture, sa construction et son écriture

Mode d emploi de la clef USB de l I.P.I. Philosophie de la clef USB

Evaluation de la conformité du Système de validation Vaisala Veriteq vlog à la norme 21 CFR Part 11

1 Description générale de VISFIELD

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Création et Gestion des tables

Manuel d utilisation Enregistreur autonome de poche. Version 1.1 TRO-TR-BADL100C-03-F

Programmer en JAVA. par Tama

OS Réseaux et Programmation Système - C5

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Manuel du logiciel PrestaTest.

Clé USB. Quel type de données peut contenir une clé USB?

Les chaînes de caractères

JPEG, PNG, PDF, CMJN, HTML, Préparez-vous à communiquer!

MODULES 3D TAG CLOUD. Par GENIUS AOM

IV- Comment fonctionne un ordinateur?

Optimiser les s marketing Les points essentiels

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Sur trois couches, on obtient donc 2563 = de couleurs, soit 24bpp (Bit Per Pixel).

Back up Server DOC-OEMSPP-S/6-BUS-FR-17/05/11

Programmation Bas Niveau

Fonctions de plusieurs variables

Calcul Scientifique avec 3

Python - introduction à la programmation et calcul scientifique

Projet Matlab/Octave : segmentation d'un ballon de couleur dans une image couleur et insertion d'un logo

REALISATION D UNE CALCULATRICE GRACE AU LOGICIEL CROCODILE CLIPS 3.

Opérations de base sur ImageJ

1 Introduction et installation

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Transcription:

1 Prémiminaires tiilab : Les formats et les programmes Version β du 21 août 2015 Dans l équipe TII, la manipulation d images de toutes sortes et de tout format a toujours été une étape fastidieuse et requise pour effectuer des traitements numériques, aussi bien pour lire (et découper) des images de diverses sources (agences spatiales, partenaires industriels,...) que pour archiver des données traitées. Aussi, dès l origine du traitement d images numériques à Télécom ParisTech, une philosophie (copiée d ailleurs par bien d industriels) s est dégagée et consiste à archiver les données image en deux fichiers: le premier, d extension.ima, renferme les données au format machine dans l ordre d un balayage vidéo (ou celui d une bande magnétique), le second, en ASCII et donc lisible et modifiable par n importe quel éditeur, d extension.dim, renferme les informations sur l image réduites au strict minimum (c est à dire le nombre de colonne et le nombre de lignes, soit deux paramètres). Ce format historique a évolué, en particulier pour suivre les évolutions des acquisitions en imagerie médicale (systèmes volumiques,...) et en imagerie radar (données sur 16bits, en demi-float, en float, en complexe,...). Pour l imagerie médicale, les évolutions ont conduit au format Tivoli (Traitement d Images VOLumIques). Par quelques légères modifications du fichier.dim, il est alors possible de traiter des données multicoupes (troisième paramètre) et multitemporelles (quatrième paramètre), ainsi que divers format (données sur 16bits, 32 bits, en float, en double) ainsi que l endian des données. Le nom du fichier binaire de l image a toujorus l extension.dim. Pour l imagerie radar, longtemps limitée à des images uniques sur un site donné, les priorités ont conduit à modifier l extension pour reconnaître le type de données (réelles ou complexes) et l endian (l extension de l image est en minuscule pour les données archivées sur SUN et en majuscule pour les données archivées sur PC) : le fichier.dim est alors réduit à sa pls simple expression (le nombre de colonnes et le nombre de lignes). Ensuite, pour pouvoir traiter de données multitemporelles, le format a été rendu Tivolicompatible tout en ajoutant les types de données spécifiques à l imagerie radar. L idée essentielle est que la donnée image est un fichier dont on ne modifie pas le contenu, et que, en revanche, le fichier.dim peut être édité (avec n importe quel éditeur puisqu il est en ASCII) selon les besoins : il est par exemple très facile d écrire un.dim correspondant à une image 16 bits radar et de modifier l extension de cette image pour la rendre Tivoli-lisible. Pour simplifier le problème de lecture d images Tivoli/Xima, des outils élémentaires sont proposés dans divers langages actuels : Matlab : voir le paragraphe 3.1 Scilab : voir le paragraphe 3.2 Python : voir le paragraphe 3.3 C : voir le paragraphe 3.4 Java : voir le paragraphe 3.5 A chaque fois, des procédures/méthodes élémentaires sont proposées et un exemple est donné. L utilisateur pourra ainsi s inspirer des codes proposés pour l adapter éventuellement à son problème. Dernier point : les radaristes de Télécom-ParisTech utilisent un visualiseur d images appelé xima quasiment Tivoli-compatible : tous les types d images décrits dans ce document sont visualisables par xima, seule une fonctionnalité concernant le quatrième paramètre est manquant 1. 2 Les formats 2.1 Images monocanal C est le cas le plus classique : à un pixel correspond une valeur unique réelle. 1. Il est cependant facile de modifier les troisième et quatrième paramètres pour permettre la lecture de la totalité de l image. 1

type xima Tivoli Matlab fread Scilab Python extension -type -type -bo type machine mget unpack unsigned char.ima U8 U8 uint8 uc B unsigned short.imw U16 U16 SUN uint16 b usb >H.IMW U16 U16 DEC uint16 l usl <H signed short.ims S16 S16 SUN int16 b sb >h.ims S16 S16 DEC int16 l sl <h unsigned integer U32 SUN uint32 b U32 DEC uint32 l signed integer.iml S32 SUN int32 b ib >i.iml S32 DEC int32 l il <i float.imf FLOAT FLOAT SUN float b fb >f.imf FLOAT FLOAT DEC float l fl <f double.imd DOUBLE DOUBLE SUN float64 b db >d double.imd DOUBLE DOUBLE DEC float64 l dl <d Au sujet du type de plateforme, xima utilise une extension en minuscule pour les plateformes big endian (Sun) et en majuscule pour les plateformes small-endian (PC ou DEC). Pour le format Tivoli, le champ -bo (byte order définit le type de plateforme et deux possibilités existent en pratique : Big endian SUN ABCD Small endian DEC DCBA Existe aussi l extension rvb correspond à des images couleurs 8 bits : chaque pixel est représenté par un triplet d unsigned char. Notons qu il est aussi possible d associer à un fichier.ima (unsigned char) un fichier d extension.3lt donnant la LUT (look up table), ce qui permet ainsi d archiverdans un minimum de place des donnéesen fausses couleurs (ou du moins limitées à 256 couleurs). Cette possibilité est très utile sous Scilab si l on veut l utiliser dans sa configuration d origine sans charger les outils spécifiques aux images. 2.2 Images complexes xima permet de manipuler les images complexes, chaque pixel étant, au final, décrit par une partie réelle et une partie imaginaire. 2.2.1 Images complexes : Formats naturels Le format le plus intuitif est de décrire un pixel par un doublet, une partie réelle et une partie imaginaire, au format balayage video (de même qu une image couleur est décrite par 3 octets). Ces valeurs sont signées. type xima Tivoli Matlab fread Scilab Python extension -type -type -bo type machine mget unpack cmplx 8.cxb C8 int8 c b cmplx 16.cxs CS16 SUN int16 b sb >h.cxs CS16 DEC int16 l sl <h cmplx 32.cxf CFLOAT SUN float b fb >f.cxf CFLOAT DEC float l fl <f cmplx 64.cxd CDOUBLE SUN float64 b db >d.cxd CDOUBLE DEC float64 l dl <d 2.3 Images complexes : Autres formats type xima Tivoli Matlab fread Scilab Python extension -type -type -bo type machine mget unpack cmplx 8.cxbtivo CS8TIVO int8 c b cmplx 16.cxstivo CS16TIVO SUN int16 b sb >h cmplx 16.CXSTIVO CS16TIVO DEC int16 l sl <h cmplx 32.cxftivo C32TIVO SUN float b fb >f cmplx 32.CXFTIVO C32TIVO DEC float l fl <f cmplx 8.cxb C8ADTS uint8 uc B cmplx 16.cxsadts C16ADTS SUN uint16 b usb >H cmplx 16.CXSADTS C16ADTS DEC uint16 l usl <H cmplx 32.cxfadts C32ADTS SUN float b fb >f cmplx 32.CXFADTS C32ADTS DEC float l fl <f 2

Dans le premier cas, deux plans sont fournis par image : le premier correspond à la partie réelle, le second à la partie imaginaire. Dans le second cas, deux plans sont fournis par image : le premier correspond à l amplitude et le second à la phase (entre 0 et 255 en 8 bits, entre 0 et 65535 pour les 16 bits). Cette liste ne couvre pas touts les cas puisque : Certaines images radar Terrasar-X sont en demi-float : parties réelles et parties imaginaires sont codées sous cette forme et n occupent que 2 octets (même dimensions qu un fichier.cxs). Sandia propose des images radar (données complexes, extension.gff)), chaque pixel étant décrit par deux valeurs cpnsécutives, la première étant l ampitude et la seconde la phase. Dans les deux cas, xima reconnait le format et en permet l archivage dans un format plus traditionnel. 3 Mise en œuvre Nous proposons ici des procédures permettant de lire une image et d en placer les valeurs dans un tableau de float 2. De plus, un outil graphique élémentaire (car n utilisant aucune boîte à outil image ) est proposé (sauf en C). Les noms de ces procédure/méthodes sont volontairement identiques selon les plateformes : imz2mat pour le lecteur/chargeur. Cette procédure renvoie un tableau de float. visusar pour le visualiseur. Si la matrice a des valeurs complexes, l amplitude sera affichée. visusar possède quelques spécificités qui seront abordées au paragraphe 4. Les images disponibles sont : une image 8 bits, lena.ima une image 16 bits, erslely.imw (donc big endian) une image complexe, lorgeval.cxs (donc big endian) une donnée complexe multitemporelle (deux canaux) : tsarang.ima (donc big endian). Le.dim de cette image est expliqué au paragraphe 5. 3.1 Matlab Il faut au préalable récupérer les deux procédures imz2mat.m et visusar.m. Le répertoire de ces deux fichiers doit appartenir au PATH de Matlab. La validation de ces procédures a été effectuée sous Matlab 2012. L exemple élémentaire testtiilab.m est aussi fourni. 3.1.1 Matlab : Image monoplan/monocanal A = imz2mat( lena.ima ); Si l on souhaite récupérer les dimensions de l image, on peut écrire [A, ncol, nlig, ncanal] = imz2mat( lena.ima ); L image étant mono-plan, on a ncanal = 1. La matrice A est alors à 2 dimensions. Notons que scilab gère les nombres complexes : la matrice A est alors réelle ou complexe selon la nature initiale de l image. 3.1.2 Matlab : Image Multiplan/Multicanal La matrice A retour de l appel de la procédure imz2mat a alors 3 dimensions. L appel à visusar.m doit spécifier une matrice à deux dimensions (il faut choisir le canal). Dans cet exemple, on cherche à visualiser le canal 2 : [A, ncol, nlig, ncanal] = imz2mat( tsarang.ima ); visusar(a(:,:,2)); Attention aux indices : Matlab commence à 1. 2. Il n y a plus de problème de dimension d images en 2015 sur les machines 64 bits courantes. 3

3.2 Scilab Il faut au préalable récupérer le fichier tiilab.sci qui contient les procédures imz2mat et visusar. La validation de ces procédures a été effectuée sous Scilab 5.5.2 (Linux) et 5.5.3 (Linux et Windows). L exemple élémentaire testtiilab.sce est aussi fourni. 3.2.1 Scilab : Image monoplan/monocanal exec("tiilab.sci"); A = imz2mat( lena.ima ); Si l on souhaite récupérer les dimensions de l image, on peut écrire [A, ncol, nlig, ncanal] = imz2mat( lena.ima ); L image étant mono-plan, on a ncanal = 1. La matrice A est alors à 2 dimensions. Notons que matlab gère les nombres complexes : la matrice A est alors réelle ou complexe selon la nature initiale de l image. 3.2.2 Scilab : Image Multiplan/Multicanal La matrice A retour de l appel de la procédure imz2mat a alors 3 dimensions. L appel à visusar doit spécifier une matrice à deux dimensions (il faut choisir le canal). Dans cet exemple, on cherche à visualiser le canal 2 : exec("tiilab.sci"); [A, ncol, nlig, ncanal] = imz2mat( tsarang.ima ); visusar(a(:,:,2)); Attention aux indices : Scilab commence à 1. 3.3 Python Il faut placer dans le répertoire adequat le fichier tiilab.py qui incorpore les modules imz2mat et visusar. Ce code a été testé sous : Python 2.6.6 et 2.7.3, environnement Spyder 2 (Linux et Windows) Python 3.5, environnement Pyzo L exemple élémentaire testtiilab.py est aussi fourni. 3.3.1 Python : Image monoplan/monocanal import tiilab img=tiilab.imz2mat("lena.ima"); tiilab.visusar(img[0]) 3.3.2 Python : Image Multiplan/Multicanal La matrice img[0], qui est une des variables retournées en retour de l appel de la méthode imz2mat, est alors un tableau à 3 dimensions. L appel à visusar doit spécifier une matrice à deux dimensions (il faut choisir le canal). Dans cet exemple, on cherche à visualiser le canal 2 : import tiilab img = tiilab.imz2mat("tsarang.ima"); tiilab.visusar(img[0][:,:,1]) Attention aux indices : Python commence à 0. 4

3.4 Code C Il faut récupérer la procédure tiilab.c (construit à partir de briques xima) et utiliser la routine tiilab imz2mat. Attention : le nombre de paramètres de cette procédure est variable : il faut donc achever la liste par NULL. Il n y a pas de visualisation proposée dans TIILAB, mais le programme test tiilab.c propose un archivage des données au format Tivoli/Xima. 3.4.1 Code C : Image monoplan/monocanal float *tabima; int ncol, nlig; tabima = tiilab_imz2mat( "lena.ima", &ncol, &nlig, &nkanal, &ntemps, NULL); 3.4.2 Code C : Image Multiplan/Multicanal Voici un exemple élémentaire utilisant l image tsarang.ima. float *tabima; int ncol, nlig, nkanal, ntemps; tabima = tiilab_imz2mat( "tsarang.ima", &ncol, &nlig, &nkanal, &ntemps, NULL); En retour, le tableau a ncol nlig nkanal pixels : le programmeuraura donc à gérerlui même les décalages pour le choix du canal (avec un fseek par exemple). Attention aux indices : C commence à 0. Attention : le langage C ne gère pas les complexes. Dans le cas de pixels complexes, le tableau retourné a 2 ncol nlig nkanal valeurs et c est au programmeur à gérer le problème. 3.5 Code Java Le fichier ExempleTiilab.java propose un exemple de lecture de fichiers Tivoli/Xima par Java (méthode imz2mat sur un objet de classe FichierXima) ainsi qu une visualisation de l image (méthode visusar sur un objet de classe visutii). La gestion des endian étant une tâche assez complexe en Java (qui fonctionne de base en big endian), cet exemple se cantonne aux données sur 8 bits et 16 bits (c est à dire les format.ima,.imw/.imw et.cxs/.cxs). Il peut quand même servir d initiateur à des codes plus complexes et complets. 4 Au sujet de visusar Dans les exemples précédents, le seul argument à passer à visusar est le tableau image. Dans le cas, visusar calcule une image en 256 niveaux de gris, le noir correspondant au min du tableau, et le blanc à une valeur très appréciée en imagerie radar : valeur moyenne + 3 sigma. Cette valeur de 3 est très empirique : on peut la modifier (valeurs positives quelconque) ou même inhiber ce seuil en choissisant la valeur 0 (le noir correspondant au min du tableau, et le blanc au max du tableau). Dans ce cas, il suffit de rajouter cette valeur dans visusar en matlab : visusar(a,2.5) en scilab : visusar(a,2.5) en python : tiilab.visusar(img[0],2.5) 5 Au sujet du.dim C est un fichier ASCII qui, à l origine, ne contenait que le nombre de lignes et le nombre de colonnes. L extension Tivoli a ajouté un certain nombre de paramètres indispensables à la lecture d une image qui sont : la modification de la première ligne qui inclut en sus du nombre de lignes et du nombre de colonnes le nombre de plans et le nombre de coupes. l ajout de données caractérisées par une clé et une valeur (une donnée par ligne ASCII) : la clé -type : le type de données (voir le paragraphe 2) la clé -bo (byte order) : pour prendre en compte l endian (voir le paragraphe 2) 5

la clé -offset : poru prendr e en compte le décalage des données image par rapport au début du fichier image (cela peut permettre de traiter des fichiers.tif par un simple.dim puisqu en général les données d un fichier.tif sont positionnées à 8 octets après l origine du fichier) Ceci permet d expliquer le.dim de l image tsarang : 512 512 2 1 -type CS16 La donnée radar a été acquise sur 2 dates. C est un signed short complexe. 6 Perspectives Ce document et les codes proposés sont en version β : des évolutions sont à prévoir, ainsi que des étapes de déverminages... 6