Laboratorio ETI Image Processing with VIPLib HandOut © mmLab by Alessandro Polo mercoledì 24 maggio 2006.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

BCX (user guide: cineca
Acquisire ed elaborare immagini - Terza parte
Recupero debito quarto anno Primo incontro
Introduzione ad Array e Funzioni 2IC/2ID – a. s.2012/13.
PHP.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Giuseppe Fabio Fortugno.
Algoritmi in C++ (1) da completare
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Costruzione di Interfacce Lezione 12 C++STL
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
ingredienti fondamentali e tecniche di base
I Thread.
nome: sequenza di caratteri usata per denotare un oggetto
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
Lezione VIII Laboratorio di Programmazione. Streams formattati In C è sfruttata linformazione riguardo al tipo di un certo dato per impostare la formattazione.
Argomenti della lezione
Le funzioni a tempo di esecuzione
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Microsoft Windows Installazione, gestione ed utilizzo delle risorse Microsoft nella sezione INFN di BOLOGNA.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
void binario(int n); …………………
Creazione progetto in C++/DEV
1 w w w. g a t 4. c o m WI GAT WebIngelligence rappresenta una piattaforma funzionale e tecnologica per la creazione e gestione di un datawarehouse che.
Unità Didattica 3 Linguaggio C
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XVIII Le matrici Programmazione di Calcolatori: le matrici 1.
Java come linguaggio di programmazione
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
Configurazione di una rete Windows
1 Applet ed HTML Fondamenti di Informatica Corso D.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Introduzione al C Davide Gadia.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
Programmazione in linguaggio C
Fondamenti di Informatica II Ingegneria Informatica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Lezione I Alessandro Dal Palu’ Laboratorio di Programmazione.
Google Visualization API
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Copyright © Istituto Italiano Edizioni Atlas
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 8 Aprile 2015.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Transcript della presentazione:

Laboratorio ETI Image Processing with VIPLib HandOut © mmLab by Alessandro Polo mercoledì 24 maggio 2006

Installazione: Windows  Scaricare e installare un client Subversion (TortoiseSVN oppure command line)  Connettersi a repository di VIPLib../VIPLib/> svn co svn://mmlab.science.unitn.it/VIPLib/trunk  Scaricare e installare/decomprimere Package Studio oppure  Eseguire Package Studio e configurare il percorso di installazione di VIPLib

Installazione: Linux  Scaricare e installare un client Subversion (eSVN oppure command line)  Connettersi a repository di VIPLib../VIPLib$ svn co svn://mmlab.science.unitn.it/VIPLib/trunk  Package Studio è disponibile solo per piattaforme Windows, è necessario implementare tutto il pacchetto manualmente o importare un pacchetto creato preventivamente con una macchina Windows.  Per utilizzare alcuni componenti è necessario installare nel sistema le librerie necessarie, leggere./INSTALL e./COMPILE

Documentazione Un tutorial introduttivo è disponibile nella sezione resources del server mmLab: Handout – Using VIPLib for Image Processing.pdf Inoltre è online la documentazione di Package Studio

Flusso Dati Implementazione di vipInput I dati vengono acquisiti da un driver o una libreria esterna, convertiti nello standard di VIPLib e indirizzati in uscita quando richiesto. Implementazione di vipOutput I dati vengono letti in ingresso, convertiti nel formato richiesto e inviati all’interfaccia successiva come un driver o una libreria esterna.

Flusso Dati (2) vipFilter eredita vipInput e vipOuput incorporandone le capacità di interazione. Implementazione di vipFilter I dati acquisiti in ingresso vengono elaborati, salvati in un buffer e indirizzati in uscita quando richiesto. [Ex. vipDigitalFilter, vipFilterGeometric]

Filtraggio int main(int argc, char* argv[]) { vipFrameRGB24 srcImage; vipFrameRGB24 outImage; vipFilterSobel myFilterClass; vipCodec_BMP::load(srcImage, "frame1.bmp", vipCodec_BMP::FORMAT_BMP_24); myFilterClass.getParameters(). setRunMode(vipFilterSobelParameters::DO_SOBEL ); myFilterClass.getParameters().setThreshold(20); myFilterClass << srcImage; myFilterClass >> outImage; vipCodec_BMP::save(outImage, "vipFilterSobel_PROCESSED.bmp", vipCodec_BMP::FORMAT_BMP_24); return 0; } buffers globali Istanza componente carico immagine configurazione filtro importo e filtro frame esporto il frame finale salvo immagine filtrata

Filtraggio (2) Il filtraggio avviene quando si importa un frame nel componente: myFilterClass << srcImage; Ciò corrisponde direttamente alla chiamata: (./source/vetFilter.h) myFilterClass.importFrom(srcImage); Infatti l’elaborazione all’interno del filtro è gestita da: VIPRESULT vipFilterSobel::importFrom(vipFrameRGB24& img) { [..] } Ci sono 3 metodi diversi per i formati RGB24, YUV420, vipFrameT. I parametri di lavoro devono essere memorizzati nella classe vipFilterSobelParameters, l’argomento è trattato più avanti.

Filtraggio (3) VIPRESULT vipFilterSobel::importFrom(vipFrameRGB24& img) { switch ( myParams->runMode ) { case vipFilterSobelParameters::DO_NOTHING: useBufferRGB(img.width, img.height); *bufferRGB = img; return VIPRET_OK_DEPRECATED; case vipFilterSobelParameters::DO_SOBEL: useBufferRGB(img.width, img.height); return applySobel(*bufferRGB, img, myParams->threshold); default: return VIPRET_PARAM_ERR; } return VIPRET_NOT_IMPLEMENTED; }

Filtraggio (4) VIPRESULT vipFilterSobel::applySobel(vipFrameRGB24& dest, vipFrameRGB24& source, int threshold) { for(x=0; x < source.width; x++) for(y=0; y < source.height; y++) [..] } La funzione è dichiarata static quindi può accedere solo alle variabili passate come argomento, infatti la soglia viene impostata nella funzione importFrom() ed era memorizzata in myParams->threshold. In questo modo, altri sviluppatori possono chiamare la funzione direttamente all’interno del loro codice (si pensi a più filtri in catena), la sintassi sarebbe semplicemente: vipFilterSobel::applySobel(myLocalDest, myLocalSrc, 78);

Parametri del Filtro class vipFilterSobelParameters : public vipFilterParameters { public: enum RUNMODE{ DO_NOTHING, DO_SOBEL }; protected: RUNMODE runMode; int threshold; void setRunMode(RUNMODE mode) { runMode = mode; }; RUNMODE getRunMode() { return runMode; }; void setThreshold(int value) { threshold = value; }; int getThreshold() { return threshold; }; }

Caricare Immagini #include “../../source/codecs/ vipCodec_BMP.h” [..] vipCodec_BMP::load(srcImage,// un vipFrameRGB24 “image.bmp",// file (BMP-24b) vipCodec_BMP::FORMAT_BMP_24); #include “../../source/codecs/ vipCodec_IMG.h” [..] vipCodec_IMG::load(srcImage, // un vipFrameRGB24 “ANY_IMAGE_FORMAT“); Sono metodi statici, non è necessario istanziare i componenti. vipCodec_IMG è in grado di caricare qualunque formato.

Matrici La classe vipMatrix implementa una semplice matrice memorizzando i valori in un array (disposizione raster), è possibile accedere tramite i metodi: setValue(unsigned int x, unsigned int y, T& value) getValue(unsigned int x, unsigned int y) Oppure direttamente all’array tramite T* dump_data() L’utilizzo di una classe template è banale, le differenze si esauriscono all’inizializzazione: vipMatrix intTable(10, 10);

Accesso pixel e Canvas #include “../../source/vipFrameRGB24.h” pixel-index = y*img.width + x; PixelRGB24 p = img.data[ pixel-index ]; unsigned char R i = p[0] ≡ img.data[ pixel-index ][ 0 ]; unsigned char G i = p[1] ≡ img.data[ pixel-index ][ 1 ]; unsigned char B i = p[2] ≡ img.data[ pixel-index ][ 2 ];

Ottimizzazioni Esempi di operazioni bitwise b << 4 = b = 0x830 h = 2096 d X = Y * 8 ↔ X = Y > 2 X = Y % 8 ↔ X = Y & 7;X ^ Y = Y ^ X; X = X ^ 0; Esempio di ottimizzazione in scrittura for ( unsigned int i=0; i height; i++ ) memcpy(&buffer->data[i*buffer->width], &img.data[(buffer->height-i-1)*buffer->width], buffer->width * sizeof(PixelRGB24) );

Riferimenti All’interno della facoltà: ftp://mmlab.science.unitn.it/ All’esterno della facoltà: ftp://mmlab.science.unitn.it:2121/