Существует ли элегантный путь в Matlab, чтобы получить выход normxcorr2
обрезается до размера изображение или обрезается только на часть матрицы, которая не использует нулевые заполненные ребра при вычислении?Элегантный способ получить выход `normxcorr2` в манере, подобной«CONV2»- (удаление нежелательных краев)
Чтобы понять, что я имею в виду, рассмотрим команду conv2
. Существует необязательный параметр: shape
, который может быть установлен на same
или valid
.
C = conv2(A,B,'same');
C = conv2(A,B,'valid');
Например:
size(conv2(rand(50,50) , rand(6,6), 'valid'))
ANS =
45 45
size(conv2(rand(50,50) , rand(6,6), 'same'))
ANS =
50 50
size(conv2(rand(50,50) , rand(6,6)))
ANS =
55 55
В настоящее время я написал свою собственную функцию, что делает что-то вроде этого:
function I = normxcorr2e(template,im,shape)
switch shape
case 'same'
I = normxcorr2(template,im);
r = size(I,1)-size(im,1);
c = size(I,2)-size(im,2);
m1=floor(r/2);
n1=floor(c/2);
m2=ceil(r/2);
n2=ceil(c/2);
I(1:m2,:) = [];
I(end-m1+1:end,:) = [];
I(:,1:n2) = [];
I(:,end-n1+1:end) = [];
case 'full'
%Do nothing
case 'valid'
%TODO - write this case...
otherwise
throw(Mexception('normxcorr2e:BadInput','shape %s is not recognized',shape));
end
end
У вас есть идея получше? Основным критерием для успешного ответа будет элегантность предлагаемого решения.
Редактировать (1) Прежде всего, спасибо за все ваши ответы. Все они хороши и поддерживаются мной. Я до сих пор не решил, что лучше. Кстати, я недавно думаю о том, где шаблон большой по сравнению с изображением. В этом случае имеет смысл ускорить вычисление, обрезая аргумент image
перед запуском normxcorr2
.
ли рассчитывать правильность, а? :) – Jonas
@Jonas, yes :) Elegance - главный критерий, а не единственный –
Я попытался найти способ, которым вы могли бы назвать свою функцию с тем же именем и затенять версию инструментария, позволяя ей действовать как невидимая оболочка. К сожалению, вызов теневой функции с помощью [BUILTIN] (http://www.mathworks.com/help/techdoc/ref/builtin.html) работает только для встроенных функций * non-toolbox *, поэтому я не мог получить что работать. – gnovice