IUP Miage Master MIAGE, spécialité SIMI Module T1/D226 Activité n 1 2012-1

Documents pareils
Corrigé des exercices sur les références

Corrigés des premiers exercices sur les classes

TD3: tableaux avancées, première classe et chaînes

Plan du cours. Historique du langage Nouveautés de Java 7

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Java Licence Professionnelle CISII,

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Exercices sur les interfaces

ACTIVITÉ DE PROGRAMMATION

Les arbres binaires de recherche

Premiers Pas en Programmation Objet : les Classes et les Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Les structures de données. Rajae El Ouazzani

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation en Java IUT GEII (MC-II1) 1

Généralités sur le Langage Java et éléments syntaxiques.

Objets et Programmation. origine des langages orientés-objet

Tp 1 correction. Structures de données (IF2)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Synchro et Threads Java TM

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

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

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

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

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

Programmation Objet I

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Les algorithmes de base du graphisme

Utilisation d objets : String et ArrayList

TP : Gestion d une image au format PGM

Gestion de gros fichiers binaires (images) en APL*PLUS III

Cours d initiation à la programmation en C++ Johann Cuenin

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

Programmer en JAVA. par Tama

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Projet Matlab : un logiciel de cryptage

Représentation d un entier en base b

Formats d images. 1 Introduction

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Package Java.util Classe générique

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation par les Objets en Java

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Introduction à MATLAB R

Chapitre VI- La validation de la composition.

TD : Codage des images

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Solutions du chapitre 4

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Conversion d un entier. Méthode par soustraction

Projet de programmation (IK3) : TP n 1 Correction

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

ASR1 TD7 : Un microprocesseur RISC 16 bits

TD/TP PAC - Programmation n 3

INF 321 : mémento de la syntaxe de Java

Flux de données Lecture/Ecriture Fichiers

Chap17 - CORRECTİON DES EXERCİCES

Programme Compte bancaire (code)

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Un ordonnanceur stupide

Architecture des ordinateurs

Gestion distribuée (par sockets) de banque en Java

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

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

Les bases de l informatique et de la programmation. École polytechnique

Héritage presque multiple en Java (1/2)

Logiciel de Base. I. Représentation des nombres

Algorithmique I. Algorithmique I p.1/??

TRIGONOMETRIE Algorithme : mesure principale

Géométrie discrète Chapitre V

Opérations de base sur ImageJ

V- Manipulations de nombres en binaire

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

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

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

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

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

Algorithmique, Structures de données et langage C

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Programmation Par Objets

Traitement bas-niveau

Conventions d écriture et outils de mise au point

Le prototype de la fonction main()

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Cours 1 : Qu est-ce que la programmation?

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

Transcription:

IUP Miage Master MIAGE, spécialité SIMI Module T1/D226 Activité n 1 2012-1 NB : Le travail demandé est un travail personnel. L'étudiant s'engage donc, par le rendu de ce travail, à garantir sur son honneur le caractère personnel celui-ci. Exercice I Une image binaire, en noir et blanc, a les dimensions 16x16 pixels. Elle est représentée ci-dessous : a) Combien faut-il de bits pour coder cette image binaire au format matriciel? Chaque pixel est codé sur 1 bit (0 ou 1) donc 16*16 = 256 bits b) On la code suivant la méthode des arbres quaternaires (on ne code que les points noirs). Donner le codage avec la méthode des arbres quaternaires (exercice 9 du chapitre Introduction). La convention de codage est NO = 0, NE = 1, SE = 2, SO = 3. Codage non compacté : 0200 0201 0210 0213 0220 0221 0222 0223 0232 0233 0311 0322 1230 1233 1312 1320 1321 1322 1323 1330 1331 1332 1333 2000 2001 2002 2003 2010 2011 2012 2013 2020 2021 2100 2103 3011 3012 3100 3101 3102 3103 3110 3111 3112 3113 3130 3131 Codage compacté : 0200 0201 0210 0213 022X 0232 0233 0311 0322 1230 1233 1312 132X 133X 200X 201X 2020 2021 2100 2103 3011 3012 310X 311X 3130 3131 c) Combien faudrait-il de bits pour coder une représentation de cet arbre quaternaire? Pour le codage compacté, si on utilise 2 bits pour coder chaque symbole (4 symboles différents), il faut 4*47*2=376 bits Pour le codage non compacté, si on utilise 3 bits pour coder chaque symbole (5 symboles différents), il faut 4*26*3=312 bits

Exercice II Voici un programme Java permettant de dessiner et manipuler l image ci dessus. Compléter le programme pour qu il donne le codage par la méthode des arbres quaternaires de l image. Proposition de solution : la méthode récursive «codes» renvoie la liste des codes non compactés correspondant au codage par les arbres quaternaires : public List<String> codes(int x, int y, int pas, String prefix) { List<String> result = new ArrayList<String>(); if (pas == 1) { if (Color.NOIR == getbinarycolor(x, y)) result.add(prefix); else { result.addall(codes(x, y, pas / 2, prefix + "0"));// NO result.addall(codes(x + pas / 2, y, pas / 2, prefix + "1"));// NE result.addall(codes(x + pas / 2, y + pas / 2, pas / 2, prefix + "2"));// SE result.addall(codes(x, y + pas / 2, pas / 2, prefix + "3"));// SO return result; public static void main(string argv[]) { List<String> codes = petittrain.codes(0, 0, 16, ""); for (String code : codes) { System.out.print(code + " "); System.out.println(); Ajouter une méthode pour permettre une rotation d angle θ (passé en paramètre) de l image. Proposition de solution : la méthode «rotate» renvoie une nouvelle image correspondant à la rotation d angle theta (en degres) de l image : public ImageBinaire rotate(int theta) { ImageBinaire resultat = new ImageBinaire(image.getWidth(),image.getHeight()); double angleradian = (double) theta * 2 * Math.PI / 360; System.out.println("angle en radian: " + angleradian); int centrex = image.getwidth() / 2; int centrey = image.getheight() / 2; for (int x = 0; x < image.getwidth(); x++) for (int y = 0; y < image.getheight(); y++) if (Color.NOIR == getbinarycolor(x, y)) { // translation (-centrex,-centrey) double ix1 = x - centrex; double iy1 = y - centrey; // rotation d'angle theta double ix2 = (Math.cos(angleRadian) * ix1 - Math.sin(angleRadian) * iy1); double iy2 = (Math.sin(angleRadian) * ix1 + Math.cos(angleRadian) * iy1); // translation (+centrex,+centrey) double ix3 = ix2 + centrex; double iy3 = iy2 + centrey; // arrondi et conversion en entier int ix = (int) Math.round(ix3); int iy = (int) Math.round(iy3); resultat.setbinarycolor(ix, iy, Color.NOIR); return resultat; public static void main(string argv[]) { ImageBinaire imgbinaire = petittrain.rotate(90); imgbinaire.affiche();

Exercice III Sur une image 16x16, on souhaite tracer le segment de droite entre le point de coordonnées (0,0) et le point (15,7). 1. En utilisant l algorithme de Bresenham, dessiner ce segment de droite 2. Ecrire un programme implémentant cet algorithme (on donnera en paramètre les 2 points du segment de droite) public static void bresenham(imagebinaire img, int x1, int ny1, int x2,int ny2){ int y1 = img.image.getheight()-ny1-1; int y2 = img.image.getheight()-ny2-1; double m = ((double) (y2 - y1)) / (double) (x2 - x1); img.setbinarycolor(x1, y1, ImageBinaire.Color.NOIR); double epsilon = 0.0; if (x1 < x2 && 0 <= m && m <= 1) {// octant 1 for (int x = x1 + 1; x <= x2; x++) { if (epsilon + m > 0.5) { y = y + 1; epsilon = (epsilon + m) - 1; else { epsilon = epsilon + m; if (x1 < x2 && 1 < m) {// octant 2 for (int y = y1 + 1; y <= y2; y++) { if (epsilon + 1 / m > 0.5) { x = x + 1; epsilon = (epsilon + 1 / m) - 1; else { epsilon = epsilon + 1 / m; if (y1 < y2 && m < -1) {// octant 3 for (int y = y1 + 1; y <= y2; y++) { if (epsilon - 1 / m > 0.5) { x = x - 1; epsilon = epsilon - 1 / m - 1; else epsilon = epsilon - 1 / m;

if (x2 < x1 && -1 <= m && m <= 0) {// octant 4 for (int x = x1-1; x >= x2; x--) { if (epsilon - m > 0.5) { y = y + 1; epsilon = epsilon - m - 1; else epsilon = epsilon - m; if (x2 < x1 && 0 < m && m <= 1) {// octant 5 for (int x = x1-1; x >= x2; x--) { if (epsilon + m > 0.5) { y = y - 1; epsilon = epsilon + m - 1; else epsilon = epsilon + m; if (y2 < y1 && 1 < m) {// octant 6 for (int y = y1-1; y >= y2; y--) { if (epsilon + 1 / m > 0.5) { x = x - 1; epsilon = epsilon + 1 / m - 1; else epsilon = epsilon + 1 / m; if (y2 < y1 && m < -1) {// octant 7 for (int y = y1-1; y >= y2; y--) { if (epsilon - 1 / m > 0.5) { x = x + 1; epsilon = epsilon - 1 / m - 1; else epsilon = epsilon - 1 / m; if (x1 < x2 && -1 <= m) {// octant 8 for (int x = x1 + 1; x <= x2; x++) { if (epsilon - m > 0.5) { y = y - 1; epsilon = epsilon - m - 1; else epsilon = epsilon - m;

Exercice IV Transformation Niveaux de Gris -> Image Binaire 1. Décrire un algorithme permettant de transformer une image en Niveaux de Gris en un image binaire en utilisant les matrices de seuil (implémentation facultative) Le but est d associer chaque niveau de gris à un bloc binaire défini par les matrices de seuil.. Il faut définir les intervalles de niveaux de gris associés à chaque bloc. Si on prend des blocs 2x2, avec 5 niveaux, par exemple : si on a 256 niveaux de gris pixel de niveau 0 à 51 -> bloc de niveau 4 pixel de niveau 52 à 103 -> bloc de niveau 3 pixel de niveau 104 à 155 -> bloc de niveau 2 pixel de niveau 156 à 202 -> bloc de niveau 1 pixel de niveau 203 à 255 -> bloc de niveau 0 L image binaire finale sera donc 2 fois plus large et 2 fois plus haute. Il suffit de parcourir chacun des pixels de l image, determiner a quel bloc il correspond et mettre en noir les pixels dans l image finale qui sont dans le bloc correspondant. Exemple d implémentation : public ImageBinaire matriceseuil_2x2() { int w = img.getwidth(); int h = img.getheight(); ImageBinaire imgbinaire = new ImageBinaire(w * 2, h * 2); for (int x = 0; x < w; x++) for (int y = 0; y < h; y++) { int niveau = getniveau(x, y); if (niveau <= 51) imgbinaire.setbinarycolor(2 * x, 2 * y, ImageBinaire.Color.NOIR); if (niveau <= 103) imgbinaire.setbinarycolor(2 * x + 1, 2*y+1,ImageBinaire.Color.NOIR); if (niveau <= 155) imgbinaire.setbinarycolor(2 * x + 1,2*y,ImageBinaire.Color.NOIR); if (niveau <= 202) imgbinaire.setbinarycolor(2 * x, 2 * y + 1,ImageBinaire.Color.NOIR); return imgbinaire; Il serait plus «joli» d utiliser une matrice plus grande pour avoir un bloc par niveau. Exemple avec matrice 2x2 :