簡體   English   中英

將1D高斯內插到2D高斯分布

[英]Interpolating 1D Gaussian into 2D Gaussian

假設我有一維高斯函數。 它的長度是600。

我想將其插值為600 X 600的2D高斯。

這是我寫的代碼(OTFx是高斯函數,OTF - 2d插值函數):

[x, y] = meshgrid([-300:299], [-300:299]);
r = sqrt((x .^ 2) + (y .^ 2));

OTF = interp1([-300:299], OTFx, r(:), 'spline');
OTF = reshape(OTF, [600, 600]);

問題是我最后得到了Overshoot: 替代文字

如何防止這種過沖? 是否有更好的單調遞減函數插值算法?

注意:我正在尋找一種將1D函數插值為2D徑向對稱函數的通用解決方案,高斯只是一個例子。

編輯:根據您的澄清,很明顯發生了什么。 您正在嘗試插入超出可用數據范圍的函數 - 即您將從插值到外推。 樣條曲線將導致您觀察到的過沖。 解決方案只是確保您的1D函數在區間[min(r),max(r)]中具有值。 請注意,在原始數據中,max(r)約為424,而要插值的函數在[-300,299]范圍內定義

% Simulated overshoot, see left figure:
x1d = [-300:299];
[x,y]=meshgrid(x1d,x1d);
r = sqrt(x.^2+y.^2);
gsn1d = exp(-x1d.^2/500);
lowpass = @(x)(x1d > -x & x1d < x);
gsn1dcutoff = ifft(fftshift(lowpass(10).*fftshift(fft(gsn1d))));
plot(gsn1dcutoff)
OTF2d = reshape(interp1(x1d,gsn1dcutoff,r(:),'spline'),[length(x1d),length(x1d)]);
mesh(OTF2d)

% Quick and dirty fix, see right figure:
x1dExtended = linspace(min(x1d*sqrt(2)),max(x1d*sqrt(2)),ceil(length(x1d)*sqrt(2)));
gsn1dE = exp(-x1dExtended.^2/500);
% ^^^ note that this has 600*sqrt(2) points and is defined on the diagonal of your square.   Now we can low-pass filter in the freq. domain to add ripple in space domain:
lowpass = @(x)(x1dExtended > -x & x1dExtended < x);
gsn1dcutoff = -real(ifft(fftshift(lowpass(10).*fftshift(fft(gsn1dE)))));
plot(gsn1dcutoff)
OTF2d = reshape(interp1(x1dExtended,gsn1dcutoff,r(:),'spline'),[length(x1d),length(x1d)]);
mesh(OTF2d)

替代文字http://img54.imageshack.us/img54/8255/clipboard01vz.png

Leo的診斷是正確的。 我想建議一個更簡單的(我希望)補救措施:做你想做的事情(基本上圍繞其對稱軸旋轉高斯)並在600x600方格中得到合理的答案你需要一個高斯600 * sqrt (2)= 849像素長。 如果你能做到這一點,那么所有進一步的thttp://stackoverflow.com/questions/2443046/interpolating-1d-gaussian-into-2d-gaussianrickery都不是必需的。

編輯 :換句話說:如果圍繞其中心旋轉600像素寬的內容,則會得到直徑為600像素的圓。 你想要覆蓋600x600 平方 為此你需要一個直徑為849像素的圓,因為這是正方形的對角線。

在高斯的特定情況下,您可以通過使用它可分離的事實來計算高斯:

OTF2(x,y) = exp( - x^2 - y^2) = exp( - x^2) * exp( - y^2) = OTFx(x) * OTFx(y)

所以你仍然只需要將OTFx存儲在內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM