通过检查您的数据,具有高振幅峰值的区域以看似相当均匀的间隔重复出现。这表明您可以将正弦波或余弦波(或两者的组合)拟合到您的数据中。
请原谅我的粗略草图,但我的意思是这样的:
一旦您进行了识别,您就可以使用 FFT 来获得主要的空间频率。请记住,由于虚假数据,您的信号的空间频谱可能相当复杂,但您需要的是数据的一两个主要频率。
例如,我做了一个正弦曲线,你可以这样计算:
N = 255; % # of samples
x = linspace(-1/2, 1/2, N);
dx = x(2)-x(1);
nu = 8; % frequency in cycles/interval
vx = (1/(dx))*[-(N-1)/2:(N-1)/2]/N; % spatial frequency
y = sin(2*pi*nu*x); % this would be your data
F = fftshift(abs(fft(y))/N);
figure; set(gcf,'Color',[1 1 1]);
subplot(2,1,1);plot(x,y,'-b.'); grid on; xlabel('x'); grid on;
subplot(2,1,2);plot(vx,F,'-k.'); axis([-1.3*nu 1.3*nu 0 0.6]); xlabel('frequency'); grid on;
这给出了:
注意主要空间频率 ± nu 处的峰值。现在,一旦您有了主要的空间频率,您就可以使用从 FFT 获得的频率重建正弦波。
最后,一旦你有了你的正弦波,你就可以识别出中心位于正弦波峰值的盒子。
这也是一种不错的方法,因为它可以有效地过滤掉虚假或不太相关的尖峰,帮助您将盒子正确放置在预期位置。
由于我没有你的数据,我无法为你完成所有代码,但这个想法是合理的,你应该可以从这一点开始。