L2 Elaborazione di immagini in C/C++ Corso di Visione Artificiale Ing. Luca Mazzei.
-
Upload
rosella-rossini -
Category
Documents
-
view
235 -
download
3
Transcript of L2 Elaborazione di immagini in C/C++ Corso di Visione Artificiale Ing. Luca Mazzei.
L2 Elaborazione di immagini in C/C++
Corso di Visione Artificiale
Ing. Luca Mazzei
2
…
AA 2009/2010 Visione Artificiale
Formato immagini
Utilizziamo il formato PGM PPM
P5320 240255@
P4 = PBMP5 = PGMP6 = PPM
Dimensioni Immagine
Informazioni aggiuntiveEs. TimeStamp,
velocita’(0,0) (0,1) … (319,239)(1,0)
Valore massimo del colore
PBM, PGM: 1 byte per pixelPPM: 3 byte per pixel
Visione Artificiale 3
Formato immagini
In memoria il bitmap è un vettore, buffer
Width lunghezza = numero di colonne
Height altezza = numero di righe
AA 2009/2010
(0,0)
(W,H)
…
i = 0 i = w-1
4
Conversione immagini
Suite Imagemagick: convert .jpg .ppm .pgm .png .bmp
convert input_img.xxx output_img.xxx
(con ubuntu)root@mio_pc:~# apt-cache search imagemagickimagemagick - image manipulation programs
www.imagemagick.org
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 www.cppreference.com www.cplusplus.com
Contenitori, iteratori ed algoritmi Utile per operazioni su strutture
dati non presenti nel C++ base
AA 2009/2010 Visione Artificiale
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 elementsstd::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: "; for( unsigned int i = 0; i < v.size(); i++ ) { std::cout << v[i] << " "; } std::cout << std::endl;
AA 2009/2010
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
Visione Artificiale 11
Image.hstruct 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 /// @param width,height the image geometry /// @param bpp Bit Per Pixel (8 grey, 24 color rgb) void Build(unsigned int width, unsigned int height, unsigned int bpp); /// Save the image on @a filename bool Save(const char *filename) const; /// Load the image from @a filename /// and initialize with,height,bpp and buffer field of struct bool Load(const char *filename); };
AA 2009/2010
12
Binarizzazione
Per ogni pixel confronto con una soglia
AA 2009/2010 Visione Artificiale
0 0 0 0 0
0 255 255 255 255
0 0 255 255 255
0 0 255 255 255
0 50 40 50 50
100 150 170 150 150
0 3 150 240 240
0 255 150 170 255
13
Istogramma
Scansionando tutto l’array dell’immagine per colonne (o righe) accumulo i valori in un vettore
AA 2009/2010 Visione Artificiale
0 50 40 50 50
100 150 170 150 150
0 3 150 240 240
0 255 150 170 255
Posso salvare i valori in un file e ottenere il grafico con Gnuplot…
3 0 0 1 0 0 1…
i = 0 i = 255
Visione Artificiale 14
Immagine Differenza
diff_img = img1 – img2 Differenza singoli pixel Differenza con sogliatura finale
AA 2009/2010
image – background = difference
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
AA 2009/2010
-1 0 1
-2 0 2
-1 0 1
-1 -2 -1
0 0 0
1 2 1
-1 -1 -1
0 0 0
1 1 1
-1 -1 -1
0 0 0
1 1 1
Sobel verticale orizzontale Prewitt verticale orizzontale
1 0
0 -1
0 1
-1 0
Roberts
Visione Artificiale 17
Filtro convolutivo
Filtro mediano, operazione locale nxn
Efficienza in base alla maschera Utilizzo std::vector e algoritmo
std::sort
AA 2009/2010
165
163
163
168
170
170
169
167
164
168
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)
AA 2009/2010
3,2
2,3
3,3
EspansioneControllo vicinato
vect
or<
punt
o>
pushpop1,2
Nuovo LabelL=L+1
push
…
L
20
Immagini a colori
Come è fatto il vettore bitmap? Impostazione doppio for? Sogliatura?
Rimane per casa…
AA 2009/2010 Visione Artificiale
Visione Artificiale 21
Assegnamento Per le immagini pgm:
– 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:– Copia dell’immagine– 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 dell’immagine
AA 2009/2010