Repository 32bit  Forum
Repository 64bit  Wiki

continuità valori - visione artificiale [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

continuità valori - visione artificiale [risolto]

Messaggioda submax82 » lun dic 28, 2009 17:34

sto facendo la tesi sul riconoscimento dei movimenti del capo utilizzando un webcam, il progetto è in java e utilizza swing per la GUI, sarebbe tutto o quasi finito ma ho un problema che non riesco a risolvere in modo soddisfacente. Ora vi spiego meglio, il sistema rileva la regione della testa di cui calcola il baricentro e l'angolo di rotazione degli assi rispetto alla verticale, secondo la formula:

Immagine
Immagine
Immagine

il problema è che la regione della testa non è sempre perfettamente uguale per ogni frame del video, quindi i valori che escono dalla formula non hanno continuità e questo è un problema in quanto devo determinare l'inclinazione della testa

fonti http://vision.unipv.it/corsi/VisioneArt ... mn/lucidi/ in particolare "Analisi di regioni"

non sò se mi sono spiegato bene, ma per sto problema sto impazzendo! :evil: :roll: #-o
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda odiusseus » lun dic 28, 2009 19:52

Ciao mi sto occumando anche io di questo tipo di problema..in modo diverso ma è simile. Per risolvere potresti (ammesso che io abbia capito bene il tuo problema) inserire un ritardo. Cioè la webcam cattura l'immagine e la processa. Fatto questo passa alltro frame.Questo perchè tu hai un ritardo nel captare l'immagine e quindi la regione interessata si sposta di un tot dal reticolo xyz (o in coordinate sferiche) che tu imponi. Una alternativa sarebbe quella di non far captare l'immagine della testa intera ma solo quella di hotspot luminoso (es. IR) che risulta più facile e preciso.
odiusseus
Linux 2.4
Linux 2.4
 
Messaggi: 352
Iscritto il: sab giu 30, 2007 13:09
Località: roma/vibo valentia
Slackware: 13.0
Kernel: 2.6.32.2
Desktop: kde

Re: continuità valori - visione artificiale

Messaggioda RedSkull92 » lun dic 28, 2009 21:38

blacklight ha fatto un programmino in c che permette di muovere il mouse con la testa, spero ti sia d'aiuto.
http://www.infernet.ws/showthread.php?t ... light=head
Avatar utente
RedSkull92
Linux 2.6
Linux 2.6
 
Messaggi: 554
Iscritto il: mar apr 21, 2009 16:25
Località: Palermo
Slackware: 64bit -current
Kernel: 3.5.4
Desktop: FluxBox

Re: continuità valori - visione artificiale

Messaggioda submax82 » mar dic 29, 2009 22:07

odiusseus ha scritto:Ciao mi sto occumando anche io di questo tipo di problema..in modo diverso ma è simile. Per risolvere potresti (ammesso che io abbia capito bene il tuo problema) inserire un ritardo. Cioè la webcam cattura l'immagine e la processa. Fatto questo passa alltro frame.Questo perchè tu hai un ritardo nel captare l'immagine e quindi la regione interessata si sposta di un tot dal reticolo xyz (o in coordinate sferiche) che tu imponi. Una alternativa sarebbe quella di non far captare l'immagine della testa intera ma solo quella di hotspot luminoso (es. IR) che risulta più facile e preciso.


forse non hai capito bene, almeno credo, il problema è che le regioni vengono "estratte" dal resto cercando le zone con il colore della pelle (con i colori dei pixel in HSB viene comodo); poi viene estratta la regione con area maggiore (che è la testa); e di questa regione viene calcolato il baricentro e l'inclinazione degli assi rispetto alla verticale. Il problema è che la regione che identifica la testa non ha una forma costante ma può variare da frame a frame (a causa principalmente della luminosità non costante per tutto lo spazio dell'inquadratura), quindi l'inclinazione calcolata per questa regione ad ogni frame è spesso non "congruente" all'inclinazione della regione che identificava la testa nel frame precedente. Per questo ho bisogno di un sistema che dia "continuità" ai valori, per avere le inclinazioni di ogni frame "congruenti" con le inclinazioni calcolate nei frame precedenti e sucessivi. E' complicato da spiegare... spero di essermi fatto capire questa volta [-o<

grazie a tutti!

RedSkull92 ha scritto:blacklight ha fatto un programmino in c che permette di muovere il mouse con la testa, spero ti sia d'aiuto.
http://www.infernet.ws/showthread.php?t ... light=head


usa opencv e non sò se in opencv siano implementate il riconoscimento delle componenti connesse (o regioni), se si sarebbe interessante vedere se risolvono il problema sopra in qualche modo ma non credo perchè sono un supporto, non credo risolvino problemi di "collegamento logico" tra i concetti come nel mio caso. :-k
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda absinthe » mer dic 30, 2009 11:52

non capisco molto bene cosa tu intenda per congruenti. tuttavia il primo trucco banale che viene in mente con la visione artificiale e con i balzi di luminosità (se solo di questo i tratta) è utilizzare un filtro passa basso a un polo (filtro FIR se ricordo bene) che introduce un lieve ritardo ma consente di limare gli outlayers. per info: http://en.wikipedia.org/wiki/Low_pass_f ... ementation
se invece il problema non è legato solo alla luminosità ma al posizionamento della testa allora la cosa è un pò più complessa.

la soluzione che ti ho esposta la utilizziamo comunemente in sistemi di visione artificiale che lavorano in real-time. valori caratteristici per alpha (in riferimento al link) sono nell'ordine di 0.15-0.25. più è alto alpha minore è la "levigazione" ma più alta la reattività del sistema.

M
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: continuità valori - visione artificiale

Messaggioda submax82 » mer dic 30, 2009 12:00

per "congruenti" intendo che se la forma della regione della testa cambia al trascorrere dei frame, cambiano anche gli assi e quindi l'angolo non è più confrontabile con l'angolo del frame precedente e di conseguenza non si riesce a "tracciare" bene e in modo continuo il movimento della testa.
Il ritardo è un fattore importante nella mia applicazione perchè rileva il colpo di sonno, comunque vaglierò bene anche la tua proposta per la luminosità che è molto interessante.
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda submax82 » mer dic 30, 2009 15:52

visto che sto per impazzire :shock: vi posto anche degli esempi grafici...
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda submax82 » mer dic 30, 2009 17:38

esempi

Immagine

sotto ogni frame c'è il valore dell'angolo dato dalla formula sopra, mentre la zona rossa è la regione della testa.

se avete qualche idea, io ci sto impazzendo :badgrin:
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda submax82 » mer dic 30, 2009 17:43

forse da questi esempi non si capisce il problema... :roll: :oops:
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda absinthe » gio dic 31, 2009 0:02

usando i tuoi valori e considerando il primo frame come l'istante 0
y(0) = x(0) = -4
y(1) = y(0) + alpha * (x(1) -y(0)) = -4 + alpha * (3 + 4) = -4 + alpha * 7

usando alpha = 0.15
y(1) = -2 + 0.15 * 7 = -2.95
y(2)= -2.95 -5.86 = -8.81
y(3)= -12.29
y(4) = -12.40

non so quali siano i valori esatti ma questo è l'effetto. da quello che vedo però i problemi principali li hai quando sono evidenziate delle zone di colore diverso (più scuro). la domanda è: perchè esistono almeno tre livelli di colore?! nero, rosso chiaro e rosso scuro?! non potresti fare una classificazione binaria (se lo sfondo è più o meno lo stesso usa l'algoritmo di otsu delle opencv).
se invece avere sfumature di colore è utile calcola i parametri come in un'immagine in scala di grigi applicando l'intensità luminosa come pesatura dei pixel (non ho capito se già lo fai)
mai provato un dilate + erode con kernel 3x3?! tentar non nuoce :-)

ciao,
M
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: continuità valori - visione artificiale

Messaggioda submax82 » gio dic 31, 2009 11:19

esistono gli 3 colori perchè il rosso vivo è la regione della testa, i rosso più scuro sono altre regioni che becca (perchè del colore della pelle) ma hanno un'area più piccola, mentre il nero è tutto lo sfondo, poi l'immagine del frame viene binarizzata all'interno.

non uso c/c++ e opencv ma java e jmf
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda absinthe » gio dic 31, 2009 16:21

mmm... ho riletto meglio come viene computata la posizione della testa. se ho capito bene ti interessa l'angolo rispetto alla verticale quindi a occhio l'unico valore realmente sbagliato è quel 3 anzichè -3 giusto?! gli altri sono magari imprecisi.
se è così, in realtà non è un problema di "rumore" (ovvero ballonzolio della luminosità) in senso stretto. pare ci sia qualche baco nella logica di calcolo.

hai mai provato innanzi tutto a prototipizzare con un linguaggio di alto livello (octave) per fare dei plot e vedere che ne tira fuori?! detto questo ragiono ad alta voce per vedere se riesco a capire meglio la cosa:

0- ipotizzo che l'immagine sia binaria (no grayscale)
1- immagino che r e c nelle formule siano le coordinate del baricentro
2- quelli che calcoli sono i momenti dell'immagine noti anche come varianza (mu_cc, mu_rr) del/dei blob(s) che stai analizzando e covarianza (mu_cr).
3- la proprietà di questi valori è che mu_cc e mu_rr sono sempre positivi per definisione. mu_cr può essere positivo o negativo e seconda dell'orientazione della testa.
4- tenuto conto che per questo subset di immagini la testa è sempre inclinata in alto a sinistra (3zo quadrante) mu_cr ha sempre lo stesso segno, quindi:

a) controlla che mu_rr e mu_cc siano sempre positivi se no c'è un errore
b) controlla che mu_cr abbia sempre lo stesso segno se no c'è un errore. non vorrei dire una fesseria però mu_cr dovrebbe essere sempre positivo essendo la testa ruotata in senso anti orario.
c) se i punti a) e b) sono ok, significa innanzi tutto che c'è un problema anomalo di inversione di segno al denominatore della formula della tangente. questo non dovrebbe verificarsi perchè la testa è oblunga e fintanto che non si raggiungono all'incirca i 45 gradi m_rr dovrebbe essere minore di mu_cc (ammesso che rr sia orizzontale e cc verticale). questo perchè l'ellissoide che "circoscrive" la testa ha l'asse maggiore sempre rivolto nella direzione di inclinazione della testa.

detto questo tu non stai usando librerie di visione o matematiche ma solo acquisizione se ho capito bene il manuale jmf. il tuo problema in realtà si risolve in maniera più ortodossa con la PCA, individuando l'autovettore maggiore della testa e calcolandone l'angolo con la verticale.


ciao,
M
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: continuità valori - visione artificiale

Messaggioda submax82 » ven gen 01, 2010 23:27

hai ragione e hai capito tutto :thumbright:

controllato: mu_cc e mu_rr con sempre >0 come da definizione, quindi ok. mu_rc alcune volte è > 0 altre < 0 il problema è che questo avviene con la testa sempre inclinata in avanti, ma questo, forse, *potrebbe* anche essere corretto ti spiego: se la forma della regione cambia (a causa della luce non uniforme) potrebbe risultare allungata all'indietro anche se la testa in realtà è inclinata in avanti

come al solito mi spiego un pò male... speriamo di riuscire a risolvere sto problema :-k [-o<

p.s. corretto anche primo post, così capite meglio ;)
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: continuità valori - visione artificiale

Messaggioda absinthe » sab gen 02, 2010 13:26

sì ho capito. il fatto è che tu scarti le zone rosso scuro se ho ben capito... giusto?! se è così in effetti l'ellisse che descrive il cranio può cambiare inclinazione ed assumerne una non congruente con quella della testa inquadrata...

a sto punto ti ci vorrenne come minimo un sistema di clusterizzazione.

spiego meglio: se tu scarti le zone piccole (ipotesi mia) va a finire che a volte ti mangi aree rilevanti e modifichi la forma del cranio in maniera sensibile.

ti butto là delle idee venute d'istinto:

soluzione A
========
0- individui le zone rosse come già fai
1- usi una libreria di elaborazione grafica e fai un dilate + erode con kernel 3x3. questo modifica leggermente la forma della testa ma dovrebbe riempire alcuni buchi tra i pezzi di pelle rendendo connesse molte più zone della testa.

soluzione B
========
0- se l'immagine non è già grayscale riconducila e realizza un k-mean. putroppo il numero di cluster deve essere deciso per esperienza (a occhio ;-)
1- utilizza un cluster di riferimento e seleziona tutto il cluster non solo un colore

soluzione C
========
0- immagino che il colore della pelle sia comunque definito da due soglie e non come valore secco...
1- rendi più elevata la tolleranza delle soglie

soluzione D
========
0- seleziona le zone rosse chiare e scure come fai ora
1- usa un clustering statistico. questo funziona solo se la testa copre un'area predominante dell'immagine
2- calcola le PCA e prendi tutto ciò che sta in un intorno di semiassi delta_1 e delta_2 rispetto al baricentro
(questa mossa è un pò complessa da spiegare....)


ciao,
M
Avatar utente
absinthe
Iper Master
Iper Master
 
Messaggi: 2354
Iscritto il: sab mag 14, 2005 23:00
Località: Prato
Nome Cognome: Matteo Nunziati
Slackware: 12.1 - defunct
Kernel: 2.6.32-5-amd64
Desktop: gnome
Distribuzione: debian squeeze

Re: continuità valori - visione artificiale

Messaggioda submax82 » ven gen 08, 2010 15:01

sto provando con la soluzione A e in effetti i valori sono leggermente cambiati ma l'angolo ha sempre lo stesso problema! :evil: :evil: :evil:

tra poco vi posto un esempio chiaramente errato [-(
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite