Filtre gaussienne 3D dans MATLAB
-
27-10-2019 - |
Question
Y at-il un eqivalent 3D imfilter disponibles pour Matlab? Je souhaite appliquer un filtrage gaussien à un histogramme 3D. J'allais mettre en œuvre moi-même, en créant un (3D) filtre gaussien, puis en boucle sur chaque élément dans mon histogramme, et résumant les entrées de données correspondant.
Cependant, je ne voulais pas mettre en œuvre moi-même d'une manière lente et inefficace s'il y a quelque chose déjà là-bas, ou d'une façon plus intelligente de le faire.
La solution
Il y a deux façons de résoudre ce afin de faire le filtrage de manière efficace:
(1) Utiliser CONVN trois fois pour filtrer vos données avec 1D trois gaussiennes, une x-by-1-en-1, une 1-by-y-en-1, et une 1-en-1-en-z.
(2) Si vous avez la boîte à outils de traitement du signal, utilisez FFTFILT pour effectuer un filtrage inverse dans l'espace (ou utiliser l'un quelconque des algorithmes FFT-convolution sur l'échange de fichiers).
[(3) Envoyez-moi un email et je vous enverrai mon fftFilterImage
, qui fait le filtrage Gauss 3D.]
Autres conseils
imfilter peut déjà faire un filtrage 3D, tant que la matrice de données et le filtre que vous donnez sont en 3D. Voir la page imfilter .
Cette tâche peut être traitée avec la nouvelle (en R2015a) imgaussfilt3
fonction.
La syntaxe de base est comme suit:
B = imgaussfilt3(A,sigma)
Il y a aussi un certain nombre de :
-
'FilterSize'
:. Taille du filtre gaussien, par défaut à un cube de la taille2*ceil(2*sigma)+1
-
'Padding'
:. Type de remplissage ('replicate'
(par défaut) |'circular'
|'symmetric'
) -
'FilterDomain'
: Effectuez convolution dans le domaine.'frequency'
ou'spatial'
(auto par défaut)