Ich habe eine große Menge von Punkten (in der Größenordnung von 10.000 Punkten), die durch Teilchenspuren (Bewegung in der xy-Ebene in der Zeit, die von einer Kamera aufgenommen wurde, also 3d - 256 x 256 Pixel und ca. 3.000 Bilder in meinem Beispielsatz) und Rauschen gebildet werden. Diese Partikel bewegen sich auf ungefähr geraden Linien ungefähr (aber nur ungefähr) in die gleiche Richtung, und deshalb versuche ich für die Analyse ihrer Trajektorien, Linien durch die Punkte zu ziehen. Ich habe versucht, Sequential RANSAC zu verwenden, kann jedoch kein Kriterium finden, um zuverlässig falsch positive Ergebnisse sowie T- und J-Verknüpfungen, die zu langsam und auch nicht zuverlässig genug waren, zuverlässig herauszufinden.
Hier ist ein Bild eines Teils des Datensatzes mit guten und schlechten Anpassungen, die ich mit sequentiellem Ransac erhalten habe: Ich verwende hier die Schwerpunkte der Partikel-Blobs, die Blob-Größen variieren zwischen 1 und etwa 20 Pixel.
Ich fand heraus, dass Teilproben, die zum Beispiel nur jeden 10. Frame verwenden, auch ziemlich gut funktionieren, so dass die zu verarbeitende Datengröße auf diese Weise reduziert werden kann.
Ich habe einen Blog-Beitrag über alles gelesen, was neuronale Netze leisten können, und möchte Sie fragen, ob dies eine praktikable Anwendung für eine solche ist, bevor ich mit dem Lesen beginne (ich komme aus einem nicht-mathematischen Hintergrund, also müsste ich ziemlich viel tun ein bisschen lesen)?
Oder könnten Sie eine andere Methode vorschlagen?
Vielen Dank!
Nachtrag: Hier ist Code für eine Matlab-Funktion zum Generieren einer Beispielpunktwolke mit 30 parallelen verrauschten Linien, die ich noch nicht unterscheiden kann:
function coords = generateSampleData()
coords = [];
for i = 1:30
randOffset = i*2;
coords = vertcat(coords, makeLine([100+randOffset 100 100], [200+randOffset 200 200], 150, 0.2));
end
figure
scatter3(coords(:,1),coords(:,2),coords(:,3),'.')
function linepts = makeLine(startpt, endpt, numpts, noiseOffset)
dirvec = endpt - startpt;
linepts = bsxfun( @plus, startpt, rand(numpts,1)*dirvec); % random points on line
linepts = linepts + noiseOffset*randn(numpts,3); % add random offsets to points
end
end