ma maneira elegante de obter a saída de `normxcorr2` de maneira semelhante a 'conv2' - (removendo as arestas indesejada

Existe umelegant caminho no Matlab para obter a saída denormxcorr2 recortado no tamanho da imagem ou recortado apenas na parte da matriz que não usa arestas acolchoadas zero no cálculo?

Para entender o que quero dizer, considere oconv2 comando. Há um parâmetro opcional chamadoshape que pode ser definido comosame ouvalid.

C = conv2(A,B,'same');
C = conv2(A,B,'valid');

Por exemplo

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

Atualmente escrevi minha própria função, que faz algo como isto:

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

Você tem uma ideia melhor? O principal critério para uma resposta bem-sucedida será oelegânci da solução proposta.

Editar (1) Antes de tudo, obrigado por todas as suas respostas. Todos eles são bons e votados por mim. Ainda não decidi qual é o melhor. A propósito, estou pensando recentemente no caso em que o modelo é grande comparado à imagem. Nesse caso, faz sentido acelerar o cálculo cortando oimage argumento antes de executarnormxcorr2.

questionAnswers(6)

yourAnswerToTheQuestion