1.安装配置好环境后,由于时间急需,第一次利用mexopecv进行测试,提取图片的ORB特征点,并进行匹配试验。
2.匹配的程序编写调式过程中,有几个问题:
参数的理解,各个函数模块的组合(参考opencv 的实现例子)
3.代码
%orb feature detector test %vl_sift matlab 自我测试数据对比 function ouput = test_orb(flag) addpath('D:\\work\\SLAM\\MonoSLAMMatlab\\tools\\mexopencv\\'); % import cv.*; imageFile1 = '1.pgm'; imageFile2 = '2.pgm'; % Load image image1 = imread(imageFile1); image2 = imread(imageFile2); if ndims(image1) == 3 image1 = rgb2gray(image1); end if ndims(image2) == 3 image2 = rgb2gray(image2); end % I = rgb2gray(image1); % Conversion to single is recommended % J = rgb2gray(image2); % in the documentation rand('state',0); % uv=rand(2,1); if flag ~= 1 A = image1(20:200,20:200); B = image2(20:200,20:200); else A = image1; B = image2; end [K1 D1] = cv.ORB(A,'NFeatures',500); [K2 D2] = cv.ORB(B,'NFeatures',500); % Where 1.5 = ratio between euclidean distance of NN2/NN1 im1 = cv.drawKeypoints(A,K1); subplot(2,1,1); hold on; imshow(im1); im2 = cv.drawKeypoints(B,K2); subplot(2,1,2); imshow(im2); hold off; %定义匹配的类对象 matcher = cv.DescriptorMatcher('BruteForce-Hamming'); matcher.add(D1); matcher.train(); matcher_img = matcher.match(D2); im3 = cv.drawMatches(A,K1,B,K2,matcher_img); figure; imshow(im3); % [matches score] = vl_ubcmatch(D1,D2,1.5); % figure01=figure; % h1=subplot(1,2,1); % imshow(uint8(A)); % hold on; %展示匹配点 % plot(F1(1,matches(1,:)),F1(2,matches(1,:)),'b*'); % % h2=subplot(1,2,2); % imshow(uint8(B)); % hold on; % % plot(F2(1,matches(2,:)),F2(2,matches(2,:)),'r*'); % end