Размерность фильтра в 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, но тогда граничные элементы будут обнулены из-за заполнения нулем.