用SIFT算法出现的问题:
在处理牙齿有关的数据时,由于牙齿的特征较少,用一般的SIFT算法求得的特征点是稀疏的(Sparse),导致处理其他特征较明显的数据时可以得到完美的结果,但是处理牙齿数据总是会得到错误的H矩阵,导致得到的图C是错误的。
转战dense SIFT算法:
dense SIFT算法可以得到相对稠密的特征点,则可以通过检测到的足够多的特征点进行特征匹配,并通过RANSAC方法进行筛选,得到相对正确的变换矩阵H,并得到正确的图C。
code:
///SIFT特征点匹配
#include "opencv2/opencv.hpp"
#include "opencv2/nonfree/nonfree.hpp"//SIFT相关
#include "opencv2/legacy/legacy.hpp"//匹配器相关
#include <opencv2/nonfree/features2d.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
//1.SIFT特征点提取——detect()方法
Mat srcImg1 = imread("pic/test2/a.jpg", CV_LOAD_IMAGE_COLOR);
Mat srcImg2 = imread("pic/test2/b.jpg", CV_LOAD_IMAGE_COLOR);
Mat srcImg1_copy = srcImg1;
Mat srcImg2_copy = srcImg2;
Mat dstImg1, dstImg2;