Размерность фильтра в 3-D свертке в MATLAB
Функция для выполнения N-мерной свертки массивов A и B в matlab показана ниже:
C = convn(A,B) % returns the N-dimensional convolution of arrays A and B.
Меня интересует трехмерная свертка с гауссовым фильтром.
Если A
является матрицей 3 x 5 x 6
, Какими должны быть размеры B
?1 ответ:
Размеры
B
могут быть любыми, какими вы хотите. Нет никаких установленных ограничений по размеру. Для Гауссова фильтра, он может быть в 1D, 2D или 3D. В 1D, что случится, что каждая строка получает отфильтрованные самостоятельно. В 2D произойдет то, что каждый срез будет фильтроваться независимо. Наконец, в 3D вы будете делать то, что ожидается в 3D свертке. Я предполагаю, что вы хотели бы получить полную трехмерную свертку, а не только 1D или 2D.Возможно, вас заинтересует выходной размер
convn
. Если обратиться к документации, заданной двумяN
размерными матрицами, для каждой размерностиk
вывода и еслиnak
- размер размерностиk
для матрицыA
иnbk
- размер размерностиk
для матрицыB
, то размер размерности выходной матрицыC
илиnck
таков, что:nck = max([nak + nbk - 1, nak, nbk])
Чтобы сделать это проще, вы можете установить размер фильтра, руководствуясь стандартным отклонением распределения. Я хотел бы сослаться на мой предыдущий пост переполнения стека: по каким показателям должен ли я установить размер моего гауссова фильтра в MATLAB? Это определяет, какой выходной размер гауссова фильтра должен быть задан стандартным отклонением.
nak + nbk - 1
это прямо из теории свертки. Конечный выходной размер измерения-это просто сумма двух размеров в измеренииk
вычитается 1. Однако если это значение меньше любого изnak
илиnbk
, мы должны убедиться, что размер вывода совместим, так что любая из входных матриц может поместиться в конечный вывод. Вот почему у вас есть конечный выходной размер и ограничен какA
, так иB
.В 2D размеры фильтра
N x N
таковы, чтоN = ceil(6*sigma + 1)
сsigma
является желаемым стандартным отклонением. Таким образом, вы бы выделили трехмерную матрицу размераN x N x N
СN = ceil(6*sigma + 1);
.Таким образом, код, который вы хотите использовать для создания 3D-фильтра Гаусса, будет выглядеть примерно так: это:
Последнее замечание состоит в том, что если фильтр, который вы предоставляете, имеет какие-либо из своих измерений, которые выходят за пределы размера входной матрицы% 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
, но тогда граничные элементы будут обнулены из-за заполнения нулем.