Tengo un gran conjunto de puntos (orden de 10k puntos) formados por pistas de partículas (movimiento en el plano xy en el tiempo filmado por una cámara, por lo que 3D - 256x256px y ca 3k fotogramas en mi conjunto de ejemplo) y ruido. Estas partículas viajan aproximadamente en líneas rectas aproximadamente (pero solo aproximadamente) en la misma dirección, por lo que para el análisis de sus trayectorias estoy tratando de ajustar las líneas a través de los puntos. Traté de usar RANSAC secuencial, pero no puedo encontrar un criterio para identificar con seguridad los falsos positivos, así como el enlace T y J, que eran demasiado lentos y tampoco lo suficientemente confiables.
Aquí hay una imagen de una parte del conjunto de datos con ajustes buenos y malos que obtuve con Ransac secuencial: estoy usando los centroides de los blobs de partículas aquí, los tamaños de blob varían entre 1 y aproximadamente 20 píxeles.
Descubrí que las submuestras que utilizan, por ejemplo, solo cada décimo fotograma también funcionaban bastante bien, por lo que el tamaño de los datos a procesar se puede reducir de esta manera.
Leí una publicación de blog sobre todas las cosas que las redes neuronales pueden lograr, y me gustaría preguntarle si esta sería una aplicación viable para uno antes de comenzar a leer (vengo de un entorno no matemático, por lo que tendría que hacer bastante un poco de lectura)
¿O podrías sugerir un método diferente?
¡Gracias!
Anexo: Aquí hay un código para una función de Matlab para generar una nube de puntos de muestra que contiene 30 líneas ruidosas paralelas, que aún no puedo distinguir:
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