首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB中三维卷积滤波器的维数

MATLAB中三维卷积滤波器的维数
EN

Stack Overflow用户
提问于 2017-06-19 20:14:56
回答 1查看 384关注 0票数 2

在matlab中执行阵列A和B的N维卷积的函数如下所示:

代码语言:javascript
复制
C = convn(A,B) % returns the N-dimensional convolution of arrays A and B.

我对高斯滤波器的三维卷积感兴趣.如果A是一个3 x 5 x 6矩阵,那么B的维数必须是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-19 20:54:09

B的尺寸可以是任何你想要的。在大小方面没有固定的限制。对于高斯滤波器,它可以是一维、二维或三维。在1D中,将发生的情况是,每一行都是独立过滤的。在2D中,将发生的是每个被独立过滤。最后,在3D中,你将做在3D卷积中所期望的事情。我假设你会想要一个完整的三维卷积,而不仅仅是一维或二维。

您可能对convn的输出大小感兴趣。如果您引用文档(给定两个N维矩阵),对于输出的每个维k,如果nak是矩阵A的维数k的大小,而nbk是矩阵B的维数k的大小,则输出矩阵Cnck的维数大小是这样的:

代码语言:javascript
复制
nck = max([nak + nbk - 1, nak, nbk])

nak + nbk - 1是直接从卷积理论。一个维度的最终输出大小只是维数k中减去1的两个尺寸之和。但是,如果这个值小于naknbk中的任何一个,我们需要确保输出大小是兼容的,以便任何输入矩阵都能适合最终输出。这就是为什么您有最终的输出大小,并且受到AB的限制。

为了使这更容易,您可以根据分布的标准偏差来设置过滤器的大小。我想请您参阅我以前的Stack溢出帖子:By which measures should I set the size of my Gaussian filter in MATLAB?

这决定了高斯滤波器的输出大小应该给出一个标准差。

在2D中,滤波器的尺寸是N x N,因此N = ceil(6*sigma + 1)sigma是所需的标准差。因此,您将分配一个大小为N x N x N的3D矩阵和N = ceil(6*sigma + 1);

因此,创建3D高斯滤波器的代码如下所示:

代码语言:javascript
复制
% Example input
A = rand(3, 5, 6);
sigma = 0.5; % Example

% Find size of Gaussian filter
N = ceil(6*sigma + 1);

% Define grid of centered coordinates of size N x N x N
[X, Y, Z] = meshgrid(-N/2 : N/2);

% Compute Gaussian filter - note normalization step
B = exp(-(X.^2 + Y.^2 + Z.^2) / (2.0*sigma^2));
B = B / sum(B(:));

% Convolve
C = convn(A, B);

最后一个注意事项是,如果您提供的过滤器的任何尺寸超出了输入矩阵A的大小,您将使用每个nck值的约束得到一个矩阵,但是边框元素将由于零填充而被归零。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44639179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档