DOMANDA Analizzare un'immagine in C++

Pubblicità

Peri

Nuovo Utente
Messaggi
82
Reazioni
3
Punteggio
29
Salve, devo realizzare per la tesi di laurea un programma che analizzi i pixel di un'immagine.
Le immagini mi saranno inviate dal mio relatore (non so con quale estensione) e mi domando: come faccio ad analizzare le immagini? Ci sono librerie apposite?
 
Ci sono infiniti modi di analizzare una immagine, e ovviamente ci sono anche librerie specifiche. Devi chiedere più informazione sul tipo di analisi. PS mi sono laureato in Computer Vision, sulla analisi di immagini stereoscopiche.
 
Salve, devo realizzare per la tesi di laurea un programma che analizzi i pixel di un'immagine.
Le immagini mi saranno inviate dal mio relatore (non so con quale estensione) e mi domando: come faccio ad analizzare le immagini? Ci sono librerie apposite?
Come dice @Andretti60 , dovresti darci più info in merito al tipo di analisi da fare.
Un'ottima libreria è sicuramente openCV, spesso l'ho usata in azienda per capire il livello di sfocatura e se ci sono riflessi in una foto (ovviamente abbiamo ottimizzato gli algoritmi in base alle immagini che usavamo).
Qui tutte le info su opencv https://opencv.org/

Chiedi più info al tuo relatore in merito al tipo di analisi.
 
Ci sono infiniti modi di analizzare una immagine, e ovviamente ci sono anche librerie specifiche. Devi chiedere più informazione sul tipo di analisi. PS mi sono laureato in Computer Vision, sulla analisi di immagini stereoscopiche.
L'analisi è la seguente:
Devo prendere un'immagine in bianco e nero per la quale è possibile accedere ai pixel (che saranno bianchi e neri).
Dovrò considerare forme connesse (orizzontalmente e verticalmente, quindi 2 pixel vicini diagonalmente non vanno bene) di N pixel (come ad esempio un rettangolo 10x15).
E registrare quante volte si ripetono all'interno di un'immagine, salvando così i risultati per poi confrontarli con un data base (che io dovrò creare e che sostanzialmente associa forme di pixel con un numero, ossia la frequenza).
Visto che faccio matematica applicata sarà parte della tesi l'ottimizzazione del codice, quindi dovrò limitare l'uso di funzioni cui costo computazionale è dubbio alla commissione.
Faccio un esempio terra terra: pensavo di trasformare tutto in bit (poiché i pixel sono bianchi e neri) è chiaro che il costo computazionale di una funzione del genere è lineare sul numero di bit. Sto giusto facendo un esempio...
 
… pensavo di trasformare tutto in bit (poiché i pixel sono bianchi e neri)
non esiste il “bit” come tipo di dati, devi usare byte anche se i pixel dell’immagine hanno solo due valori (vedi in seguito il perché)
L’idea è giusta, memorizza l’immagine in una matrice di unsigned byte, dopodiché inizia a fare la scansione partendo dal primo pixel, procedendo orizzontalmente e poi verticalmente (o viceversa). Non dimenticare di “marcare” i pixel che hai visitato assegnando un valore univoco che non sia 0 o 1. La analisi finisce quando tutti i pixel sono stati “visitati”.
L’algoritmo è piuttosto semplice, lo lascio a te, se hai problemi chiedi (e non dimenticare di postare il codice che hai scritto, anche se non funzionante, come da regolamento)
 
non esiste il “bit” come tipo di dati, devi usare byte anche se i pixel dell’immagine hanno solo due valori (vedi in seguito il perché)
L’idea è giusta, memorizza l’immagine in una matrice di unsigned byte, dopodiché inizia a fare la scansione partendo dal primo pixel, procedendo orizzontalmente e poi verticalmente (o viceversa). Non dimenticare di “marcare” i pixel che hai visitato assegnando un valore univoco che non sia 0 o 1. La analisi finisce quando tutti i pixel sono stati “visitati”.
L’algoritmo è piuttosto semplice, lo lascio a te, se hai problemi chiedi (e non dimenticare di postare il codice che hai scritto, anche se non funzionante, come da regolamento)
E per trasformare l'immagine (che per esempio avrà formato png) in suddetta matrice?
 
Ovviamente conviene appoggiarsi a un tool esterno:

Personalmente uso LodePNG (i.e. nel progetto in firma) per leggere e salvare.
E' un unico file C/C++ con il suo header, da aggiungere al progetto.
Ma come questo ne esistono tanti... anche librerie "multi formato" (ma se ti vengono passati SOLO in PNG inutile complicarsi la vita)

Qui comunque trovi il tool in questione:

Se ti serve solo la "decodifica" ossia solo caricare le immagini, c'e' anche la versione "ridotta": picoPNG, che trovi sempre nei riferimenti che ti ho llinkato

P.S.
Questo e' fornito liberamente sotto Zip license, ossia, se lo usi, dovrai semplicemente "citarlo" nei "riferimenti" finali della tesi.
 
Ultima modifica:
Scopo della tua tesi è di analizzare l’immagine, non leggerla. PNG è un formato molto complesso, ma è pubblico dominio ed esistono varie librerie che permettono di leggere un file e scaricare l’immagine in memoria, e viceversa. Di fatto avrebbero dovuto darvi una di queste librerie. “Inutile reinventare la ruota” è il mantra degli sviluppatori. Se non fosse così saremmo ancora qui a scrivere compilatori (come fecero Ritchie e Kernighan quando scrissero il linguaggio C per creare Unix)
 
Pubblicità
Pubblicità
Indietro
Top