Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Analisi dati webcam
Forum - Altri Linguaggi - Analisi dati webcam

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 18:50
Giovedì, 07/01/2010
Salve a tutti, oggi ho un problema per il quale non ho un minimo di idee: devo in pratica analizzare i dati derivanti da una webcam modificata per rilevare l'infrarosso in modo da prendere in considerazione la posizione dei punti più luminosi, per capirci quelli in cui ho posizionato dei led infrarossi.

Qualcuno ha un'idea su come farlo? Quale sia il linguaggio migliore, magari? L'idea è quella di basarci un gioco, tipo Wii, ma naturalmente senza la tecnologia fondamentale è inutile iniziare a scriverlo.

Pensavo di usare Darkbasic, ma non so neanche cosa cercare su Google per risolvere il problema soprastante.

. . . Consigli? ;)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6186
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:11
Giovedì, 07/01/2010
Se devi fare pesanti analisi di dati (come mi sembra che sia) è indicato il C/C++


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 19:15
Giovedì, 07/01/2010
Mhm. . . E sai se esistono funzioni specifiche per l'analisi video? Non parlo di modifiche ad un file multimediale, ma di analizzarlo per trovare i picchi di intensità luminosa.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6186
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:16
Giovedì, 07/01/2010
Non esistono funzioni standard.

Probabilmente esistono librerie (free e/o a pagamento) ma dovrai fare qualche ricerca.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 19:31
Giovedì, 07/01/2010
Mhm. . . Ok, ti ringrazio. Prima di cercare librerie astruse, però, penso che tenterò l'analisi di frame per frame. Alla prossima ;)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 22:05
Giovedì, 07/01/2010
un piccolo hint: per trovare i picchi di luminosità in un'immagine devi prima convertire da RGB a YCbCr.

Il canale Y (luma) contiene le informazioni sulla luminosità, quindi è questo il canale che devi analizzare.

le formule sono le seguenti (supponiamo di avere 8 bit per canale):
Codice sorgente - presumibilmente Plain Text

  1. Y =        0.299    * r + 0.587    * g + 0.114    * b;
  2. Cb = 128 - 0.168736 * r - 0.331264 * g + 0.5      * b;
  3. Cr = 128 + 0.5      * r - 0.418688 * g - 0.081312 * b;



Una volta trovato il canale Y, per trovare i picchi dovrai in sostanza generare una maschera dei gradienti:
Un gradiente è un vettore che esprime sostanzialmente la pendenza di una superficie, la punta di questo vettore ci indica la direzione della "cima".
Puoi trovare i gradienti calcolando separatamente la variazione di Y tra un pixel e quello adiacente, sia lungo l'asse delle ascisse (dY / dx) che quello delle ordinate (dY / dy), e unendo questi due valori per formare un vettore per ogni pixel.
I pixel che hanno gradiente nullo (la lunghezza di questo vettore comunque inferiore ad una certa soglia minima) costituiscono dei punti senza pendenza.
Tra questi punti si celano, tra l'altro, anche i massimi. Per trovare i massimi, ripeti l'applicazione della maschera dei gradienti due volte, la seconda maschera ti fornirà i gradienti di secondo ordine. I punti con gradiente di secondo ordine negativo AND gradiente di primo ordine nullo sono i punti di massimo che cerchi...

Se ci sono dubbi, leggi qualche testo di image processing o fai qualche domanda più specifica ;)

PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 15:43
Venerdì, 08/01/2010
Mi pare abbastanza chiaro, tranne l'ultima parte: che differenze ci sono tra la prima maschera e la seconda? Per quale motivo cioè dovrebbero darmi risultati differenti? Intuisco di dover applicare la seconda sul risultato della prima, ma non comprendo bene cosa questo voglia dire in pratica :-)

Inoltre, ho qualche dubbio su come comportarmi con i vettori ottenuti. Mi spiego: so cos'è un vettore in senso geometrico e so cos'è un vettore in senso informatico. Ora, per rappresentare i vettori di cui stiamo parlando (segmenti orientati verso l'aumento di luminosità, se non ho capito male), devo utilizzare in qualche modo un vettore inteso come array? Giusto perchè l'omonimia mi suggerisce un qualche tipo di relazione :yup:

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 18:05
Venerdì, 08/01/2010
in pratica dovrai creare una matrice di vettori, un elemento per ogni pixel dell'immagine (escludendo, al più, il bordo). Il secondo passaggio sulla maschera dei gradienti dovrà essere calcolato "componente per componente", cioè la componente dx del secondo gradiente sarà dato dalla differenza dei componenti dx lungo l'asse orizzontale della prima maschera, la componente dy della seconda maschera sarà data dalla differenza di dy dei pixel adiacenti in senso verticale nella prima maschera.

In termini matematici:
considera la mappa del canale luma (Y) come una carta geografica, dove x,y sono le coordinate e Y (luma) rappresenta l'altitudine. La prima mappa dei gradienti contiene tanti vettori quanti sono i pixel, ciascuno di questi vettori risulta perpendicolare al "terreno" e di lunghezza proporzionale alla pendenza. Ne consegue che i vettori nulli saranno quelli con pendenza nulla, il chè accade nelle valli e nei picchi. Per distinguere le valli di picchi ripetiamo la maschera dei gradienti, calcolata sulla prima maschera nel modo che ho descritto prima.
La seconda maschera conterrà dei vettori che esprimono "quanto velocemente cambia la pendenza" in un dato punto. I picchi sono i punti in cui abbiamo contemporaneamente un valore minimo di pendenza (possiamo approssimare un picco come una superficie orizzontale molto piccola, quindi con pendenza nulla), e un valore negativo di "variazione di pendenza" (perchè partendo dalla fiancata del picco, la pendenza diminuisce, tocca zero e poi diventa negativa, quindi varia costantemente in modo negativo). Le valli invece hanno un valore positivo di "variazione di pendenza" perchè la pendenza passa da negativa a zero, quando dal picco scendiamo alla valle, e da zero continua a salire e diventa positiva, quando dalla valle saliamo su un'altro picco.

Scusa se sembra poco chiaro, ma per darti una spiegazione comprensibile senza ricorrere ad equazioni alle derivate parziali è un po' un'impresa!

PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 20:19
Venerdì, 08/01/2010
È chiaro quanto basta per darmene un'idea, ora appena ne ho la possibilità integro il tutto con una sessione di brainstorming tra amici e lo implemento :-))

Oggi provato a spiegare a mia madre la struttura di un ipercubo senza che lei conoscesse una semplice proiezione ortogonale, quindi posso capire a che difficoltà vai in contro ^_^

Grazie infinite!!

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo