#include "iostream"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "cv.h"
#include "highgui.h"
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/nonfree/features2d.hpp>
#include <opencv2/flann/flann.hpp>
#include <opencv2/legacy/legacy.hpp>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
Mat image1,image2;
image1 = imread("C:\\lena.jpg",0);
image2 = imread("C:\\lena1.bmp",0);
vector<KeyPoint> keypointsA,keypointsB;
Mat descriptorsA,descriptorsB;
std::vector<DMatch> matches;
OrbFeatureDetector detector(400);
FREAK extractor;
BruteForceMatcher<Hamming> matcher;
detector.detect(image1,keypointsA);
detector.detect(image2,keypointsB);
extractor.compute(image1,keypointsA,descriptorsA);
extractor.compute(image2,keypointsB,descriptorsB);
matcher.match(descriptorsA, descriptorsB, matches);
int nofmatches = 30;
nth_element(matches.begin(),matches.begin()+nofmatches,matches.end());
matches.erase(matches.begin()+nofmatches+1,matches.end());
Mat imgMatch;
drawMatches(image1, keypointsA, image2, keypointsB, matches, imgMatch);
imshow("matches", imgMatch);
waitKey(0);
return 0;
}
esta es una sencilla aplicación para que coincida con dos puntos en las imágenes ... he utilizado Orbe para detectar puntos clave y Freak como descriptor en esos puntos clave ..., a continuación, brutforcematching para detectar los puntos correspondientes en dos imágenes .. .yo he tomado los 30 mejores puntos que tienen mejor coincidencia ... espero que esto te ayude un poco ...
Sí, supuse que era algo así. Lo que no sé es la necesidad de utilizar un detector para los puntos clave si tiene un algoritmo para seleccionar pares. Eso no es lo suficientemente claro para mí en el periódico. Estoy desarrollando un pyrFAST con monstruo y veré qué sucede. –
Tengo entendido que, dada la ubicación de un punto clave (por ejemplo, usando pyrFAST), el descriptor se calcula como el signo de la diferencia entre pares de puntos (! = El punto clave) en un vecindario pequeño alrededor de este punto clave. Esto es muy similar a BREVE si está familiarizado con él. Pero FREAK tiene un método que muestra las ubicaciones en el vecindario inspiradas por el sistema de visión humana – remi
Muy bien, eso tiene más sentido para mí. Sí, sé BREVE (que muestra ubicaciones aleatorias) y BRISK que muestrea en círculos. FREAK también toma muestras en círculos pero son redundantes y gruesas o finas como la retina. Lo que no noté fue que esto se hace en las cercanías de un punto clave, que tiene un punto. ¡Gracias! –