我想知道在Matlab中是否有MSER和HOG的图像匹配的完整实现。目前我正在使用VLFeat,但在执行图像匹配时发现了一些困难。有什么帮助吗?
顺便说一句,我已经在VLFeat -Matlab环境中尝试了下面的代码,但不幸的是无法执行匹配。
%Matlab code
%
pfx = fullfile(vl_root,'figures','demo') ;
randn('state',0) ;
rand('state',0) ;
figure(1) ; clf ;
Ia = imread(fullfile(vl_root,'data','roofs1.jpg')) ;
Ib = imread(fullfile(vl_root,'data','roofs2.jpg')) ;
Ia = uint8(rgb2gray(Ia)) ;
Ib = uint8(rgb2gray(Ib)) ;
[ra,fa] = vl_mser(I,'MinDiversity',0.7,'MaxVariation',0.2,'Delta',10) ;
[rb,fb] = vl_mser(I,'MinDiversity',0.7,'MaxVariation',0.2,'Delta',10) ;
[matches, scores] = vl_ubcmatch(fa, fb);
figure(1) ; clf ;
imagesc(cat(2, Ia, Ib));
axis image off ;
vl_demo_print('mser_match_1', 1);
figure(2) ; clf ;
imagesc(cat(2, Ia, Ib));
xa = ra(1, matches(1,:));
xb = rb(1, matches(2,:)) + size(Ia,2);
ya = ra(2, matches(1,:));
yb = rb(2,matches(2,:));
hold on ;
h = line([xa ; xb], [ya ; yb]);
set(h, 'linewidth', 1, 'color', 'b');
vl_plotframe(ra(:,matches(1,:)));
rb(1,:) = fb(1,:) + size(Ia,2);
vl_plotframe(rb(:,mathces(2,:)));
axis image off ;
vl_demo_print('mser_match_2', 1);
%%%%%%发布于 2013-02-08 12:30:07
有几个问题。首先,代码有几个错误,不能按原样运行。我已经在下面粘贴了我的工作版本。
更重要的是,您正在尝试使用SIFT特征匹配函数来匹配MSER椭球。这根本不起作用,因为SIFT基于局部图像梯度给出了一个非常高维的特征向量,而MSER检测器只是给出了一个边界椭球。
VLFeat似乎没有包含MSER匹配函数,因此您可能必须自己编写。看看最初的MSER论文,了解他们是如何进行匹配的:
"Robust wide-baseline stereo from maximally stable extremal regions", Matas et al. 2002
% Read the input images
Ia = imread(fullfile(vl_root,'data','roofs1.jpg')) ;
Ib = imread(fullfile(vl_root,'data','roofs2.jpg')) ;
% Convert to grayscale
Ia = uint8(rgb2gray(Ia)) ;
Ib = uint8(rgb2gray(Ib)) ;
% Find MSERs
[ra,fa] = vl_mser(Ia, 'MinDiversity',0.7,'MaxVariation',0.2,'Delta',10) ;
[rb,fb] = vl_mser(Ib, 'MinDiversity',0.7,'MaxVariation',0.2,'Delta',10) ;
% Match MSERs
[matches, scores] = vl_ubcmatch(fa, fb);
% Display the original input images
figure(1); clf;
imagesc(cat(2, Ia, Ib));
axis image off;
colormap gray;
% Display a second copy with the matches overlaid
figure(2) ; clf ;
imagesc(cat(2, Ia, Ib));
axis image off;
colormap gray;
xa = fa(1, matches(1,:));
ya = fa(2, matches(1,:));
xb = fb(1, matches(2,:)) + size(Ia,2);
yb = fb(2, matches(2,:));
hold on ;
h = line([xa ; xb], [ya ; yb]);
set(h, 'linewidth', 1, 'color', 'y');发布于 2013-07-30 00:48:03
我不知道是如何实现的,但MSER匹配在Matlab中是有效的。
下面的代码
file1 = 'roofs1.jpg';
file2 = 'roofs2.jpg';
I1 = imread(file1);
I2 = imread(file2);
I1 = rgb2gray(I1);
I2 = rgb2gray(I2);
% %Find the SURF features.
% points1 = detectSURFFeatures(I1);
% points2 = detectSURFFeatures(I2);
points1 = detectMSERFeatures(I1);
points2 = detectMSERFeatures(I2);
%Extract the features.
[f1, vpts1] = extractFeatures(I1, points1);
[f2, vpts2] = extractFeatures(I2, points2);
%Retrieve the locations of matched points. The SURF featurevectors are already normalized.
indexPairs = matchFeatures(f1, f2, 'Prenormalized', true) ;
matched_pts1 = vpts1(indexPairs(:, 1));
matched_pts2 = vpts2(indexPairs(:, 2));
figure; showMatchedFeatures(I1,I2,matched_pts1,matched_pts2,'montage');
legend('matched points 1','matched points 2');给出了下面的图片

https://stackoverflow.com/questions/13716485
复制相似问题