La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

L2 Elaborazione di immagini in C/C++ Corso di Visione Artificiale Ing. Luca Mazzei.

Presentazioni simili


Presentazione sul tema: "L2 Elaborazione di immagini in C/C++ Corso di Visione Artificiale Ing. Luca Mazzei."— Transcript della presentazione:

1 L2 Elaborazione di immagini in C/C++ Corso di Visione Artificiale Ing. Luca Mazzei

2 … AA 2009/2010 Visione Artificiale 2 Formato immagini n Utilizziamo il formato PGM PPM P P4 = PBM P5 = PGM P6 = PPM Dimensioni Immagine Informazioni aggiuntive Es. TimeStamp, velocita (0,0)(0,1) … (319,239)(1,0) Valore massimo del colore PBM, PGM: 1 byte per pixel PPM: 3 byte per pixel

3 Formato immagini n In memoria il bitmap è un vettore, buffer n Width lunghezza = numero di colonne n Height altezza = numero di righe AA 2009/2010 Visione Artificiale 3 (0,0) (W,H) … i = 0 i = w-1

4 Conversione immagini n Suite Imagemagick: convert n.jpg.ppm.pgm.png.bmp convert input_img.xxx output_img.xxx (con ubuntu) apt-cache search imagemagick imagemagick - image manipulation programs AA 2009/2010 Visione Artificiale 4

5 Impostazione algoritmo n Immagine input ed immagine appoggio, 2 buffer Buffer di unsigned char, p(x,y) [0, 255] Buffer di unsigned char, p(x,y) [0, 255] n Doppio for scansione buffer immagine n Scansione per righe -> adiacenze in memoria for(unsigned int jj = 0; jj < height ; ++jj){ //scorre righe for(unsigned int ii = 0; ii < width ; ++ii){ //scorre colonne for(unsigned int ii = 0; ii < width ; ++ii){ //scorre colonne if(input_buffer[(jj*width)+ii] > 70) { if(input_buffer[(jj*width)+ii] > 70) { output_buffer [(jj*width)+ii] = 255; output_buffer [(jj*width)+ii] = 255; } else else output_buffer [(jj*width)+ii] = 0; output_buffer [(jj*width)+ii] = 0; } }} AA 2009/2010 Visione Artificiale 5

6 Librerie STL (Standard Template Library) n Libreria standard basata su template n Riferimenti n Contenitori, iteratori ed algoritmi n Utile per operazioni su strutture dati non presenti nel C++ base AA 2009/2010 Visione Artificiale 6

7 Librerie STL (Standard Template Library) n Contenitori: vector, list, map, stack … // create a vector of random integers #include #include std::vector v; for( int i = 0; i < 10; ++i ) { int num = (int) rand() % 10; int num = (int) rand() % 10; v.push_back( num ); v.push_back( num ); } // print elements std::cout << "vector elements: "; for( int i = 0; i < v.size(); ++i ) { std::cout << v[i] << " "; std::cout << v[i] << " ";} std::cout << std::endl; AA 2009/2010 Visione Artificiale 7

8 Librerie STL (Standard Template Library) n Iterators – Puntatori ad elementi di un container – forward, bidirectional, random access std::vector v1(3, 5); for(std::vector ::iterator it = v1.begin(); it != v1.end(); ++it){ std::cout << *it << std::endl; std::cout << *it << std::endl;} AA 2009/2010 Visione Artificiale 8

9 Librerie STL (Standard Template Library) n Algorithm – Min, max, swap, count, sort #include #include std::vector v; v.push_back( 23 ); v.push_back( 23 ); v.push_back( -1 ); v.push_back( -1 ); v.push_back( 9999 ); v.push_back( 9999 ); v.push_back( 0 ); v.push_back( 0 ); v.push_back( 4 ); v.push_back( 4 ); std::cout << "Before sorting: "; std::cout << "Before sorting: "; for( unsigned int i = 0; i < v.size(); i++ ) { for( unsigned int i = 0; i < v.size(); i++ ) { std::cout << v[i] << " "; std::cout << v[i] << " "; } std::cout << std::endl; std::cout << std::endl; sort( v.begin(), v.end() ); sort( v.begin(), v.end() ); std::cout << "After sorting: "; std::cout << "After sorting: "; for( unsigned int i = 0; i < v.size(); i++ ) { for( unsigned int i = 0; i < v.size(); i++ ) { std::cout << v[i] << " "; std::cout << v[i] << " "; } std::cout << std::endl; std::cout << std::endl; AA 2009/2010 Visione Artificiale 9

10 Strumenti a disposizione per programmare – Image.h – main.cpp – main_color.cpp n (usare solo dopo aver provato a farla) – main_color2grey.cpp – Esempi STL AA 2009/2010 Visione Artificiale 10

11 Image.h struct Image { /// geometry /// geometry unsigned int width, height; unsigned int width, height; /// bit per pixel (8 is greyscale, 24 is rgb color) /// bit per pixel (8 is greyscale, 24 is rgb color) unsigned int bpp; unsigned int bpp; /// the bitmap /// the bitmap unsigned char *buffer; unsigned char *buffer; public: public: Image(); Image(); ~Image(); ~Image(); /// Allocate the inner buffer /// Allocate the inner buffer width,height the image geometry width,height the image geometry bpp Bit Per Pixel (8 grey, 24 color rgb) bpp Bit Per Pixel (8 grey, 24 color rgb) void Build(unsigned int width, unsigned int height, unsigned int bpp); void Build(unsigned int width, unsigned int height, unsigned int bpp); /// Save the image filename /// Save the image filename bool Save(const char *filename) const; bool Save(const char *filename) const; /// Load the image filename /// Load the image filename /// and initialize with,height,bpp and buffer field of struct /// and initialize with,height,bpp and buffer field of struct bool Load(const char *filename); }; bool Load(const char *filename); }; AA 2009/2010 Visione Artificiale 11

12 Binarizzazione n Per ogni pixel confronto con una soglia AA 2009/2010 Visione Artificiale

13 Istogramma n Scansionando tutto larray dellimmagine per colonne (o righe) accumulo i valori in un vettore AA 2009/2010 Visione Artificiale Posso salvare i valori in un file e ottenere il grafico con Gnuplot… … i = 0 i = 255

14 Immagine Differenza n diff_img = img1 – img2 n Differenza singoli pixel n Differenza con sogliatura finale AA 2009/2010 Visione Artificiale 14 image – background = difference

15 Ritaglio immagine n Seleziono unarea di interesse dellimmagine (Bounding Box) n Nuovo buffer contenente il bounding box n Dimensioni? n Come gestire le coordinate? AA 2009/2010 Visione Artificiale 15

16 Rilevamento bordi n Con operazioni locali, maschera nxn n Maschera di Sobel – Sobel orizzontale – Sobel verticale n Laplace? Prewitt roberts n Estrazione bordi + binarizzazione AA 2009/2010 Visione Artificiale Sobel verticale orizzontale Prewitt verticale orizzontale Roberts

17 Filtro convolutivo n Filtro mediano, operazione locale nxn n Efficienza in base alla maschera n Utilizzo std::vector e algoritmo std::sort AA 2009/2010 Visione Artificiale

18 Etichettatura (Labelizzazione) n Es. Sullimmagine differenza per evidenziare i blob (aree dellimmagine differenza di forma indefinita) AA 2009/2010 Visione Artificiale 18

19 Labelizzazione a macchia dolio (floodfill) AA 2009/2010 Visione Artificiale 19 3,2 2,3 3,3 Espansione Controllo vicinato vector push pop 1,2 Nuovo Label L=L+1 push … L

20 Immagini a colori n Come è fatto il vettore bitmap? n Impostazione doppio for? n Sogliatura? n Rimane per casa… AA 2009/2010 Visione Artificiale 20

21 Assegnamento n Per le immagini pgm: – Copia dellimmagine – Istogramma – Sogliatura, binarizzazione – Abbassamento luminosita – Filtro mediano – Estrazione dei contorni – Differenza tra immagini – Ritaglio di una porzione dellimmagine – Labellizzazione a macchia dolio n Per le immagini a colori: – Copia dellimmagine – Istogramma per ogni valore del pixel RGB – Sogliatura, binarizzazione – Abbassamento luminosita – Filtro mediano sui tre canali – Estrazione dei contorni – Differenza tra immagini – Ritaglio di una porzione dellimmagine AA 2009/2010 Visione Artificiale 21


Scaricare ppt "L2 Elaborazione di immagini in C/C++ Corso di Visione Artificiale Ing. Luca Mazzei."

Presentazioni simili


Annunci Google