L2 Elaborazione di immagini in C/C++

Slides:



Advertisements
Presentazioni simili
CUDA & OpenMP parallel programming.
Advertisements

Cache Memory Prof. G. Nicosia University of Catania
1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Acquisire ed elaborare immagini - Terza parte
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Esercitazioni If nidificati
Argomenti della lezione
Uso avanzato di C.
Puntatori in C e C++.
Selezione multipla e tipo di dato carattere
Struttura di un programma
Linguaggio C++ Operatori – numeri pseudocasuali - costanti.
Numeri casuali.
Introduzione ad Array e Funzioni 2IC/2ID – a. s.2012/13.
Generazione di numeri casuali in Dev C++
Le funzioni.
Algoritmi in C++ (1) da completare
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2007/2008 Prof.ssa Chiara Petrioli Corso di Laurea.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) JAVA: funzione di output a video Anno Accademico 2009/2010.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
CORSO DI PROGRAMMAZIONE II
Introduzione agli stream e alle classi
1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005.
JAVA C import java.util.*; #include <stdio.h>
ingredienti fondamentali e tecniche di base
APPUNTI SUL LINGUAGGIO C
Laboratorio di Informatica di Base Laboratorio di Informatica di Base Laurea in Informatica Multimediale Docente: Andrea Fusiello profs.sci.univr.it/~fusiello.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Array Ricerca Ordinamento Fusione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Il main program Ogni programma in C++, per essere eseguibile, deve contenere una funzione main() da cui l’esecuzione comincerà main() deve avere un tipo.
1 File System ed Input/Output UNIX Implementazione del File System Caratteristiche del File System Unix/Linux System Call relative al File System Linput/output.
Esercitazione 2 – Generazione di variabili Matlab.
I File.
Analisi di Immagini e Dati Biologici
Java base VI: Gestione I/O. Argomenti Introdurre le API per linput e output in Java.
AN Fondam98 Input Output Input Output I files standard di I/O.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Sampling and Quantization
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
L1 Formato immagini, video e sistemi di acquisizione Corso di Visione Artificiale A.A. 2011/2012 Ing. Luca Mazzei
void binario(int n); …………………
Creazione progetto in C++/DEV
Algoritmi di conversione in basi numeriche diverse
L4 Tecniche di Background Subtraction
1 Il rendering Daniele Marini. 2 Fasi del rendering Modellare Elaborazione geometrica - geometric processing Rasterizzazione Display.
Registro a scorrimento
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Complessità ciclomatica
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Laboratorio ETI Image Processing with VIPLib HandOut © mmLab by Alessandro Polo mercoledì 24 maggio 2006.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Pile e Code.
Tag IMG Per inserire un'immagine in una pagina HTML basta inserire il tag: ; questo tag non ha bisogno di chiusura. Affinché l'immagine venga visualizzata.
Lezione I Alessandro Dal Palu’ Laboratorio di Programmazione.
L’ordinamento per Selezione seleziona l’elemento con valore maggiore e lo scambia con il primo elemento del vettore. Tra gli N-1 elementi rimanenti viene.
Copyright © Istituto Italiano Edizioni Atlas
Elaborazione delle Immagini Introduzione Elaborazione di Immagini Luigi Cinque
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Operatori – numeri pseudocasuali - costanti
Programmazione e Laboratorio di Programmazione
Corso di programmazione, Simulazione, ROOT, code, ecc. ecc.
Transcript della presentazione:

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

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

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

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 imagemagick imagemagick - image manipulation programs www.imagemagick.org AA 2009/2010 Visione Artificiale

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

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

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

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

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

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

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 /// @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 Visione Artificiale

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

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

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

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

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

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

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

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

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

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