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

1 Ansicht (letzte 30 Tage)
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.

Akzeptierte Antwort

Matt J
Matt J am 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 Kommentare
Matt J
Matt J am 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);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by