Tengo un conjunto de puntos de imagen tipo openCV Point2f (coordenadas). Quiero encontrar los 4 vecinos más cercanos de cada punto en ese conjunto. ¿Hay alguna función de compilación específica en openCV para hacer esto o debería medir la distancia entre cada punto y decidir los cuatro más cercanos?Buscar vecinos más cercanos - OpenCV
Respuesta
Puede usar el clasificador de vecino más próximo k CvKNearest
. Después de entrenar al clasificador con todos sus puntos, puede obtener el k
vecinos más cercanos llamando a la función CvKNearest::find_nearest
.
This tutorial podría ser útil.
Ofrece un ejemplo de la formación (por lo que yo sé, ya sea mediante el constructor o KNearest
train()
método; compruebe el documentation) y el reconocimiento de objetos (mediante la utilización, como @sietschie mencionado find_nearest()
método).
find_nearest()
toma un valor int k
que representa la cantidad necesaria de vecinos sobre la cual clasificación se basa, las etiquetas de los k vecinos podrían ser devueltos opcionalmente mediante el parámetro neighborResponses
, como tomado de find_nearest()
documentación vinculado anteriormente:
neighborResponses - Valores de salida opcionales para los vecinos correspondientes .
donde, de nuevo como parte de la documentación, neighbors
son:
vecinos - punteros de salida opcionales a la vecina vectores sí mismos.
yo no tengo experiencia con esos parámetros, no obstante, de he entendido bien, vecinos ofrecen los valores reales de los vecinos, mientras que neighborResponses ofrece sus etiquetas.
El siguiente código ayudará a encontrar los vecinos más cercanos de un punto seleccionado de un conjunto de puntos.
vector<Point2f> pointsForSearch; //Insert all 2D points to this vector
flann::KDTreeIndexParams indexParams;
flann::Index kdtree(Mat(pointsForSearch).reshape(1), indexParams);
vector<float> query;
query.push_back(pnt.x); //Insert the 2D point we need to find neighbours to the query
query.push_back(pnt.y); //Insert the 2D point we need to find neighbours to the query
vector<int> indices;
vector<float> dists;
kdtree.radiusSearch(query, indices, dists, range, numOfPoints);
índices proporciona los índices de los vecinos seleccionados y dists da las distancias para los vecinos seleccionados.
Aquí es pequeño ejemplo de cómo encontrar 3 puntos más cercanos (370464):
#include "opencv2/flann/miniflann.hpp"
flann::KDTreeIndexParams indexParams;
flann::Index kdtree(Mat(cloud2d).reshape(1), indexParams);
vector<float> query;
query.push_back(370);
query.push_back(464);
vector<int> indices;
vector<float> dists;
kdtree.knnSearch(query, indices, dists, 3);
// cloud2d[indices[0]] -- is your first point now
// cloud2d[indices[1]] and cloud2d[indices[2]] -- is your 2nd and 3rd point
Tenga en cuenta que la función se comporta loco si algunos de los puntos tienen coordenadas NAN, este puede ser el caso si se divide por 0,0 en algún lugar antes.
¿Cómo configuras cloud2d? Tengo un std :: vector
try vector
- 1. Vecinos más cercanos utilizando Quaternions
- 2. K-vecinos más cercanos consulta en PostGIS
- 3. Buscar n Vecinos más cercanos para un punto determinado usando PostGIS?
- 4. Es k-d tree eficiente para la búsqueda kNN. k vecinos más cercanos buscar
- 5. Todos los k vecinos más cercanos en 2D, C++
- 6. ¿Cómo ver los vecinos más cercanos en R?
- 7. ¿Encontrar k vecinos más cercanos para un vector dado?
- 8. ¿Cómo puedo extender esta consulta SQL para encontrar los k vecinos más cercanos?
- 9. OpenCV C++/Obj-C: Conectar contornos cercanos
- 10. Estructura de datos espaciales rápidos para la búsqueda de vecinos más cercanos entre hiperesferas de tamaño no uniforme
- 11. CakePHP: buscar vecinos, ordenar en 'nombre' u 'orden'
- 12. Calcular los usuarios más cercanos MySQL
- 13. Redondea a los cinco más cercanos
- 14. Obtenga los siguientes puntos geográficos más cercanos
- 15. ¿Cómo redondear a los Mil más cercanos?
- 16. Geohashing: recursivamente encuentra vecinos de vecinos
- 17. Buscar rectángulos sin esquinas usando opencv
- 18. Encuentra los puntos de latitud y longitud más cercanos
- 19. ¿Cómo redondear un número a los diez más cercanos?
- 20. K Algoritmo de vecino más cercano
- 21. Uso de FourSquare API para buscar lugares cercanos en iOS SDK
- 22. Búsqueda de vecinos de Erlang
- 23. diferencia Numpy entre elementos vecinos
- 24. Números cercanos de grupo
- 25. Punteros cercanos y lejanos
- 26. Líneas más fuertes de OpenCV Hough
- 27. manera más rápida de ida y vuelta a los más cercanos 5/100ths
- 28. Buscar la versión de OpenCV instalada en Ubuntu
- 29. Algoritmo para encontrar puntos cercanos?
- 30. Generando 'vecinos' para usuarios según la clasificación
La URL solicitada/2010/10/k-vecinos-cercanos-en-opencv/no se encontró en este servidor. –
Gracias @ JürgenK .; el blog parece haber sido renovado: actualicé la url. –
obtengo un tiempo de espera a petición de la documentación –