作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Matlab 中是否有一种优雅的方法来将 normxcorr2
的输出裁剪为图像的大小或仅裁剪为不使用的矩阵部分计算中的零填充边?
要理解我的意思,请考虑 conv2
命令。有一个名为 shape
的可选参数,可以将其设置为 same
或 valid
。
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'
)。normxcorr2
当 shape
是有效字符串时。代码如下:
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/
我是一名优秀的程序员,十分优秀!