49 lines
1.5 KiB
Matlab
49 lines
1.5 KiB
Matlab
templateSize = 11; % square template
|
|
|
|
imgWidth = 320; % rectangular image
|
|
imgHeight = 240;
|
|
|
|
template = rand(templateSize); % template with random entries
|
|
img = rand(imgHeight, imgWidth); % similarly for the image
|
|
|
|
% randomly embed the template inside the img
|
|
embedX = round(rand*(imgWidth-templateSize-1)+1);
|
|
embedY = round(rand*(imgHeight-templateSize-1)+1);
|
|
img( embedY:embedY+templateSize-1, embedX:embedX+templateSize-1 ) = template;
|
|
|
|
% display the input for normxcorr2
|
|
H = figure(1); clf;
|
|
set(H,'name','Can you find the template?');
|
|
subplot(1,2,1);
|
|
imagesc(img);
|
|
axis('image'); title('image');
|
|
subplot(1,2,2);
|
|
imagesc(template);
|
|
axis('image'); title('template');
|
|
colormap(gray);
|
|
|
|
% perform NCC
|
|
% choose 'same' as the output shape -- ie. zero-pad the output so
|
|
% that it's the same size as the original image
|
|
% this is not necessary, but is used for display
|
|
ncc = normxcorr2_mex(template, img, 'same');
|
|
ncc1 = normxcorr2_mex(template, img);
|
|
ncc2 = normxcorr2(template, img);
|
|
|
|
% display the ncc
|
|
H = figure(2); clf;
|
|
set(H,'name','NCC can!');
|
|
imagesc(ncc);
|
|
axis('image'); title('normalized cross correlation');
|
|
colormap(gray);
|
|
|
|
% output where there template was embedded (centered)
|
|
fprintf('template was embedded at (%i,%i)\n', embedY+ceil((templateSize-1)/2), embedX+ceil((templateSize-1)/2));
|
|
|
|
% compute, then output where ncc 'found' the template (the highest score,
|
|
% which in this case is +1, since there is no noise)
|
|
[t mi] = max(ncc);
|
|
[t mj] = max(t);
|
|
mi = mi(mj);
|
|
fprintf('ncc found it at (%i,%i)\n', mi, mj);
|