Gaussian Filter on a vector in Matlab [duplicate]

荒凉一梦 提交于 2019-12-18 13:26:20

问题


I have a n-dimensional vector (1xn dataset, and it is not image data), and I want to apply a Gaussian filter to it. I have the Image Processing Toolkit, and a few others (ask if you need a list).

Presumably I can make the hsize parameter of the fspecial function something like [1 n]. Can I still use imfilter to apply it to my vector as the next step, or should I be using something else?

I've seen quite a few examples on how to apply a Gaussian filter to two dimensional image data in Matlab, but I'm still relatively new to Matlab as a platform so an example would be really good.

Note: I'm not currently in a position to just try it and see what happens (not currently on a machine with Matlab installed), otherwise I would have tried it first and only asked if I ran into problems using fspecial and imfilter.


回答1:


Why not create the Gaussian filter yourself? You can look at the formula in fspecial (or any other definition of a Gaussian):

sigma = 5;
sz = 30;    % length of gaussFilter vector
x = linspace(-sz / 2, sz / 2, sz);
gaussFilter = exp(-x .^ 2 / (2 * sigma ^ 2));
gaussFilter = gaussFilter / sum (gaussFilter); % normalize

and in order to apply it you can use filter:

y = rand(500,1);
yfilt = filter (gaussFilter,1, y);

and don't forget the filter has latency, which means the filtered signal is shifted as compared to the input signal. Since this filter is symmetric, you can get a non-shifted output by using conv instead of filter, and use the same option:

yfilt = conv (y, gaussFilter, 'same');


来源:https://stackoverflow.com/questions/6992213/gaussian-filter-on-a-vector-in-matlab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!