Can I smooth 1D data taken from pages of 3D array without using for loops?
3 views (last 30 days)
Show older comments
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.
1 Comment
Accepted Answer
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
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);
More Answers (0)
See Also
Categories
Find more on Interpolation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!