Can I smooth 1D data taken from pages of 3D array without using for loops?

3 views (last 30 days)
I am looking to take a 3D array (~1000x1000x18) and take the vector along each page at each x,y point [e.g. (1,1,:); (1,2,:) etc.] and smooth or fit it to find the max value at each point. Each of the vectors are noisy cosine squared and I want to be able to get a true max at each value. Right now the noise is such that max(X,[],3) gives a different result than I want. So I want to smooth or fit each vector of data to get a better max of each vector out.
I can think of a brute force way to do that using for loops to pull each vector out one at a time but was wondering if this a nicer way.

Accepted Answer

Matt J
Matt J on 4 Feb 2014
You could apply a 1D convolution along the 3rd dimension as follows,
kernel=reshape(kernel,1,1,[]);
convn(yourarray,kernel,'same')
  2 Comments
Matt J
Matt J on 4 Feb 2014
FFT low pass filtering processing might be even better, since your square cosine is highly bandlimited
F=fft(yourarray,[],3).*lowpass_mask;
f=ifft(F,[],3);
result = max(f,[],3);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!