J'ai un grand ensemble de points (ordre de 10k points) formés par des pistes de particules (mouvement dans le plan xy dans le temps filmé par une caméra, donc 3d - 256x256px et environ 3k images dans mon jeu d'exemples) et le bruit. Ces particules se déplacent sur des lignes approximativement droites à peu près (mais seulement à peu près) dans la même direction, et donc pour l'analyse de leurs trajectoires, j'essaie d'ajuster les lignes à travers les points. J'ai essayé d'utiliser Sequential RANSAC, mais je ne trouve pas de critère pour distinguer de manière fiable les faux positifs, ainsi que les liaisons T et J, qui étaient trop lentes et pas assez fiables.
Voici une image d'une partie de l'ensemble de données avec de bons et de mauvais ajustements que j'ai obtenus avec Ransac séquentiel: j'utilise ici les centroïdes des blobs de particules, les tailles de blob varient entre 1 et environ 20 pixels.
J'ai trouvé que les sous-échantillons n'utilisant par exemple que toutes les 10 images fonctionnaient également très bien, de sorte que la taille des données à traiter peut être réduite de cette façon.
J'ai lu un article de blog sur tout ce que les réseaux de neurones peuvent accomplir, et je voudrais vous demander si ce serait une application réalisable avant de commencer à lire (je viens d'un milieu non mathématique, donc je devrais faire tout à fait un peu de lecture)?
Ou pourriez-vous suggérer une méthode différente?
Merci!
Addendum: Voici le code d'une fonction Matlab pour générer un échantillon de nuage de points contenant 30 lignes bruyantes parallèles, que je ne peux pas encore distinguer:
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