La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

L2 Elaborazione di immagini in C/C++

Presentazioni simili


Presentazione sul tema: "L2 Elaborazione di immagini in C/C++"— Transcript della presentazione:

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

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

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

4 Conversione immagini Suite Imagemagick: convert
.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

5 Impostazione algoritmo
Immagine input ed immagine appoggio, 2 buffer Buffer di unsigned char, p(x,y) ∊ [0, 255] Doppio for scansione buffer immagine 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 if(input_buffer[(jj*width)+ii] > 70) { output_buffer [(jj*width)+ii] = 255; } else output_buffer [(jj*width)+ii] = 0; AA 2009/2010 Visione Artificiale

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

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

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

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

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

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

12 Binarizzazione Per ogni pixel confronto con una soglia 50 40 100 150
50 40 100 150 170 3 240 255 255 AA 2009/2010 Visione Artificiale

13 Posso salvare i valori in un file e ottenere il grafico con Gnuplot…
Istogramma Scansionando tutto l’array dell’immagine per colonne (o righe) accumulo i valori in un vettore 50 40 100 150 170 3 240 255 3 1 1 i = 0 i = 255 Posso salvare i valori in un file e ottenere il grafico con Gnuplot… AA 2009/2010 Visione Artificiale

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

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

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

17 Filtro convolutivo Filtro mediano, operazione locale nxn
Efficienza in base alla maschera Utilizzo std::vector e algoritmo std::sort 165 163 168 170 169 167 164 168 AA 2009/2010 Visione Artificiale

18 Etichettatura (Labelizzazione)
Es. Sull’immagine differenza per evidenziare i blob (aree dell’immagine differenza di forma indefinita) AA 2009/2010 Visione Artificiale

19 Labelizzazione a macchia d’olio (floodfill)
Nuovo Label L=L+1 Espansione push Controllo vicinato pop push 1,2 3,2 2,3 3,3 vector<punto> AA 2009/2010 Visione Artificiale

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

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


Scaricare ppt "L2 Elaborazione di immagini in C/C++"

Presentazioni simili


Annunci Google