DOMANDA Analizzare un'immagine in C++

Peri

Nuovo Utente
82
3
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?
 

Andretti60

Utente Èlite
6,440
5,091
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.
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
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.
 
  • Mi piace
Reazioni: Andretti60

Peri

Nuovo Utente
82
3
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...
 

Andretti60

Utente Èlite
6,440
5,091
… 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)
 

Peri

Nuovo Utente
82
3
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?
 

BrutPitt

Utente Attivo
1,166
1,262
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:
  • Mi piace
Reazioni: Peri e Andretti60

Andretti60

Utente Èlite
6,440
5,091
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)
 
  • Mi piace
Reazioni: Peri e BrutPitt

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili