Matte / programmering - Dataanalys
Hej!
Jag har massa data från en eventkamera, där jag försöker hitta mönster i datan. Figur av data:
Det jag är sugen på att hitta är trender i tiden. Ett problem är att det är ofantligt många punkter. Ett annat problem är att alla events registreras på heltalskoordinater. Ett annat är att tidsskalan är väldigt annorlunda från positionerna. (Detta strular till det vid PCA/DBSCAN osv). Såhär ser det ut ovanifrån:

Man ser direkt att DBSCAN blir omöjligt med dessa förutsättningar. Jag har provat att lägga till lite determinstiskt jitter för att försöka få nån sorts subpixelapproximation, utan framgång.
Har ni några tips på hur jag kan göra för att få ändra datan så att det passar bättre till DBSCAN?
Jag vet att detta var en gammal post men du kan gärna dela en kommentar om hur du löste problemet.
Jag underhöll mig mest med att försöka förstå vad datan representerar och vad en evenkamera är så rätta mig gärna om följande är en korrekt eller felaktig tolkning av hur datan är strukturerad och vad den representerar.
Så jag tolkar det som att du har en logg över events som som hänt vid varje pixel där ett event är att att ljusstyrkan ändrats med en steglängd. Typ
| Event # | Tid [s] | X | Y |
Så om det fanns en stillastående lampa som blinkade på en och samma plats (x,y) = (0,0) med ett med (av i 3 sek)-(på i (1 sek)-(av i 3 sek)-mönster så skulle vi ha en logg av typ
| Event # | Tid [s] | X | X |
| 1 | 3 | 0 | 0 |
| 2 | 4 | 0 | 0 |
| 3 | 7 | 0 | 0 |
| 4 | 10 | 0 | 0 |
Vilket illustrerar att vi inte förväntar oss jämna tidssteg
Medan om vi hade en påslagen lampa med storlek 3x3-pixlari x-led med en fart på 1 pixel / sek i x-led på ett sådan sätt att det triggar en event när lampan helt överlappar med eller helt lämnat en pixel så får vi en logg av typen
| Event # | Tid [s] | X | Y | Notis |
| 1 | 1 | 0 | 0 | Överlappar med pixel 0 |
| 2 | 2 | 1 | 0 | |
| 3 | 3 | 2 | 0 | |
| 4 | 4 | 0 | 0 | Lämnat pixel 0 |
| 5 | 4 | 3 | 0 | Överlappar med pixel 0 sker samtidigt som lämnar pixel 0 |
Vilket illustrerar att vissa tidpunkter kan vara händelsefattiga och andra tidpunkter kan vara händelserika
Sedan är dina tider nog inte i sekunder men det spelar ingen roll
"Mönster i datan" är en ganska vag frågeställning
Jag är mest nyfiken på vad som händer om du bara kör cluster-algoritmen rakt av på din data i 3D med en avståndsfunktion som säger att två event är nära varandra om de är nära båda i rum och tid
Provisotriskt typ
D(event 1, event 2) = a(x1 - x2) + b(y1 - y2) + c(t1-t2)
där a,b,c är konstanter.
Då borde vi åtminstone få en känsla av områden i vyn där mycket korrellerad rörelse sker. Vill vi visualisera klustret som en video kan vi sedan kan vi ta en sådan 3D-kluster och ta ett rullande medelvärde i tids-led (diskretiserat med ett rimligt tidssteg) för varje pixel (i clustern) för att kontrollera om clustern representerar något verkligt.
Under ideala förutsättningar kanske vi då ser en kontur som rör sig genom vyn?
SeriousCephalopod skrev:Jag vet att detta var en gammal post men du kan gärna dela en kommentar om hur du löste problemet.
Jag underhöll mig mest med att försöka förstå vad datan representerar och vad en evenkamera är så rätta mig gärna om följande är en korrekt eller felaktig tolkning av hur datan är strukturerad och vad den representerar.
Så jag tolkar det som att du har en logg över events som som hänt vid varje pixel där ett event är att att ljusstyrkan ändrats med en steglängd. Typ
Event # Tid [s] X Y Så om det fanns en stillastående lampa som blinkade på en och samma plats (x,y) = (0,0) med ett med (av i 3 sek)-(på i (1 sek)-(av i 3 sek)-mönster så skulle vi ha en logg av typ
Event # Tid [s] X X 1 3 0 0 2 4 0 0 3 7 0 0 4 10 0 0 Vilket illustrerar att vi inte förväntar oss jämna tidssteg
Medan om vi hade en påslagen lampa med storlek 3x3-pixlari x-led med en fart på 1 pixel / sek i x-led på ett sådan sätt att det triggar en event när lampan helt överlappar med eller helt lämnat en pixel så får vi en logg av typen
Event # Tid [s] X Y Notis 1 1 0 0 Överlappar med pixel 0 2 2 1 0 3 3 2 0 4 4 0 0 Lämnat pixel 0 5 4 3 0 Överlappar med pixel 0 sker samtidigt som lämnar pixel 0 Vilket illustrerar att vissa tidpunkter kan vara händelsefattiga och andra tidpunkter kan vara händelserika
Sedan är dina tider nog inte i sekunder men det spelar ingen roll
"Mönster i datan" är en ganska vag frågeställning
Jag är mest nyfiken på vad som händer om du bara kör cluster-algoritmen rakt av på din data i 3D med en avståndsfunktion som säger att två event är nära varandra om de är nära båda i rum och tid
Provisotriskt typ
D(event 1, event 2) = a(x1 - x2) + b(y1 - y2) + c(t1-t2)
där a,b,c är konstanter.
Då borde vi åtminstone få en känsla av områden i vyn där mycket korrellerad rörelse sker. Vill vi visualisera klustret som en video kan vi sedan kan vi ta en sådan 3D-kluster och ta ett rullande medelvärde i tids-led (diskretiserat med ett rimligt tidssteg) för varje pixel (i clustern) för att kontrollera om clustern representerar något verkligt.
Under ideala förutsättningar kanske vi då ser en kontur som rör sig genom vyn?
Hej! Tag för ett stort ordentlig svar, vad kul.
Ja jag har provat DBSCAN, problemet är att det är så extremt mycket brus så att oavsett vilken radie du väljer så blir all data ett kluster (ungefär). Lösningen är självklar, reducera bruset. Det är något som undersöks, dock är det inte helt lätt att klassifiera vilka events som är brus. Eftersom att en eventkamera är såpass känslig så blir det flera olika källor för brus och de beter sig alltså lite olika. Men men, världen är inte perfekt! Jag har lyckats tagit bort ungefär 50% av datan (som jag tror är brus) genom två filtreringstekniker.
Det jag håller på med just nu är att jag delar upp datan i patches, tid och rum, jag utför därefter PCA på datan från dessa patches individuellt och tänker att den första och andra komponenten i PCA spänner upp rummet med mest data. Jag tar därefter den tredje PCA-komponenten (vilket blir normalvektorn till ett sorts uppspänt plan) och använder planets ekvation för att koppla tid till x och y.
Det är egentligen här det riktiga problemet kommer in, men det blir utanför denna post :D
En liten teaser!