gpt4 book ai didi

matlab - 以类似于 `normxcorr2` 的方式获取 'conv2' 的输出的优雅方式 - (删除不需要的边缘)

转载 作者:行者123 更新时间:2023-12-05 01:48:38 24 4
gpt4 key购买 nike

在 Matlab 中是否有一种优雅的方法来将 normxcorr2 的输出裁剪为图像的大小或仅裁剪为不使用的矩阵部分计算中的零填充边?

要理解我的意思,请考虑 conv2 命令。有一个名为 shape 的可选参数,可以将其设置为 samevalid

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

例如:

size( conv2( rand(50,50) , rand(6,6), 'valid') ) 

答案=

45    45

size( conv2( rand(50,50) , rand(6,6), 'same') )

答案=

50    50

size( conv2( rand(50,50) , rand(6,6)) )

答案=

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) 首先,感谢您的所有回答。他们都很好,我点赞了。我还没有决定哪个是最好的。顺便说一句,我最近在考虑模板比图像大的情况。在这种情况下,通过在运行 normxcorr2 之前裁剪 image 参数来加速计算是有意义的。

最佳答案

这是一个相对于其他答案具有一些额外功能的变体:

  • 它允许您省略形状参数(默认为 'full')。
  • 它只调用normxcorr2shape 是有效字符串时。
  • 它使用 logical indexing 在一行中执行索引.前导填充和所需中心区域的大小用于创建真值和假值的索引向量。不需要指定尾部填充,因为比其索引的维度短的逻辑索引将简单地用假值填充。

代码如下:

function I = normxcorr2e(template, im, shape)

if (nargin == 2) || strcmp(shape,'full')
I = normxcorr2(template, im);
return
end

switch shape
case 'same'
pad = floor(size(template)./2);
center = size(im);
case 'valid'
pad = size(template) - 1;
center = size(im) - pad;
otherwise
throw(Mexception('normxcorr2e:BadInput',...
'SHAPE must be ''full'', ''same'', or ''valid''.'));
end

I = normxcorr2(template, im);
I = I([false(1,pad(1)) true(1,center(1))], ...
[false(1,pad(2)) true(1,center(2))]);

end

关于matlab - 以类似于 `normxcorr2` 的方式获取 'conv2' 的输出的优雅方式 - (删除不需要的边缘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9145107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com