96 lines
3.9 KiB
Matlab
Executable file
96 lines
3.9 KiB
Matlab
Executable file
%*-------------------demo_ASIFT MATLAB interface -------------------------*/
|
|
%
|
|
% *************************************************************************
|
|
% NOTE: The ASIFT SOFTWARE ./demo_ASIFT IS STANDALONE AND CAN BE EXECUTED
|
|
% WITHOUT MATLAB.
|
|
% *************************************************************************
|
|
%
|
|
% Detect corresponding points in two images with the ASIFT method.
|
|
% Copyright, Jean-Michel Morel, Guoshen Yu, 2008.
|
|
% Please report bugs and/or send comments to Guoshen Yu yu@cmap.polytechnique.fr
|
|
%
|
|
% Reference: J.M. Morel and G.Yu, ASIFT: A New Framework for Fully Affine Invariant Image
|
|
% Comparison, SIAM Journal on Imaging Sciences, vol. 2, issue 2, pp. 438-469, 2009.
|
|
% Reference: ASIFT online demo (You can try ASIFT with your own images online.)
|
|
% http://www.ipol.im/pub/algo/my_affine_sift/
|
|
%
|
|
% 2010.08.17
|
|
% ---------------------------------------------------------------------------*/
|
|
|
|
function demo_ASIFT(file_img1, file_img2, imgOutVert, imgOutHori, matchings, keys1, keys2, flag_resize)
|
|
|
|
if (nargin == 8)
|
|
if (isnumeric(flag_resize) && (flag_resize == 0))
|
|
flag_resize = 0;
|
|
else
|
|
flag_resize = 1;
|
|
end
|
|
elseif (nargin == 7)
|
|
flag_resize = 1;
|
|
else
|
|
disp('*******************************************************************************');
|
|
disp('*************************** ASIFT image matching ****************************');
|
|
disp('*******************************************************************************');
|
|
disp('Usage: ./demo_ASIFT imgIn1 imgIn2 imgOutVert.png imgOutHori.png');
|
|
disp(' matchings.txt keys1.txt keys2.txt [Resize option: 0/1]');
|
|
disp('- imgIn1, imgIn2: input images (in most standard formats).');
|
|
disp('- imgOutVert.png, imgOutHori.png: output images (vertical/horizontal concatenated,');
|
|
disp(' in PNG format.) The detected matchings are connected by write lines.');
|
|
disp('- matchings.txt: coordinates of matched points (col1, row1, col2, row2).');
|
|
disp('- keys1.txt keys2.txt: ASIFT keypoints of the two images.')
|
|
disp('- [optional 0/1]. 1: input images resize to 800x600 (default). 0: no resize.');
|
|
disp('*******************************************************************************');
|
|
disp('********************* Jean-Michel Morel, Guoshen Yu, 2010 ********************');
|
|
disp('*******************************************************************************');
|
|
assert(false);
|
|
end
|
|
|
|
imgIn1 = imread(file_img1);
|
|
imgIn2 = imread(file_img2);
|
|
|
|
% convert the image to png format
|
|
file_img1_png = 'tmpASIFTinput1.png';
|
|
file_img2_png = 'tmpASIFTinput2.png';
|
|
imwrite(imgIn1, file_img1_png, 'png');
|
|
imwrite(imgIn2, file_img2_png, 'png');
|
|
|
|
% ASIFT command
|
|
command_ASIFT = './demo_ASIFT';
|
|
command_ASIFT = [command_ASIFT ' ' file_img1_png ' ' file_img2_png ' ' ...
|
|
imgOutVert ' ' imgOutHori ' ' matchings ' ' keys1 ' ' keys2];
|
|
if (flag_resize == 0)
|
|
command_ASIFT = [command_ASIFT ' 0'];
|
|
end
|
|
|
|
% get the number of processors
|
|
% Mac
|
|
if (ismac == 1)
|
|
[s, w] = unix('sysctl -n hw.ncpu');
|
|
num_CPUs = str2num(w);
|
|
% set the maximum OpenMP threads to the number of processors
|
|
set_threads = sprintf('export OMP_NUM_THREADS=%d;', num_CPUs);
|
|
|
|
command = [set_threads ' ' command_ASIFT];
|
|
|
|
% Unix
|
|
elseif (isunix == 1)
|
|
[s, w] = unix('grep processor /proc/cpuinfo | wc -l');
|
|
num_CPUs = str2num(w);
|
|
% set the maximum OpenMP threads to the number of processors
|
|
set_threads = sprintf('export OMP_NUM_THREADS=%d;', num_CPUs);
|
|
|
|
command = [set_threads ' ' command_ASIFT];
|
|
% Windows
|
|
elseif (ispc == 1)
|
|
[s, w] = dos('set NUMBER_OF_PROCESSORS');
|
|
num_CPUs = sscanf(w, '%*21c%d', [1, Inf]);
|
|
% set the maximum OpenMP threads to the number of processors
|
|
setenv('OMP_NUM_THREADS', num2str(num_CPUs));
|
|
|
|
command = command_ASIFT;
|
|
else
|
|
error('Unrecognized operating system. The operating system should be Windows, Linux/Unix, or Mac OS.');
|
|
end
|
|
|
|
|
|
status = system(command);
|