Upsampled image FFT contains NaNs.
3 ビュー (過去 30 日間)
古いコメントを表示
I upsampled images and when I take the FFT I get NaN values. How can I prevent NaN values from showing when I take the fourier transform ?
Heres my code to upsample. Upsampling frames in a volume:
ps. ref is 3D
vol = upsample(ref);
pad = GetPad(fftr);
fftr = fftn(vol, pad);
fftt = fftn(tar, pad);
% calculate the power spectrum to remove the magnitude
cp_vol = CrossPowerSpectrum(fftr, fftt);
% go back to the time domain and find the peak
shift_vol = ifftn(cp_vol);
function [res] = CrossPowerSpectrum(A, B)
y = A.*conj(B);
scale = abs(y);
res = y./scale;
end
function [new_dim] = GetPad(vol)
dim = nextpow2(size(ref));
new_dim = 2.^dim;
end
function new_vol = upsample(vol)
m = 2;
[x,y,z] = size(vol);
new_vol = zeros(2*x,2*y,z);
for i = 1 : size(vol,3)
new_vol(1:m:end,1:m:end,i) = vol(:,:,i);
end
sz = m*m;
H = fspecial('average',[sz sz]);
for i = 1 : size(vol,3)
new_vol(:,:,i) = conv2(new_vol(:,:,i), H, 'same');
end
end
2 件のコメント
採用された回答
Matt J
2020 年 1 月 27 日
編集済み: Matt J
2020 年 1 月 27 日
You have a division by zero in this line,
res = y./scale;
That leads to NaNs in cp_vol and hence also in shift_vol.
2 件のコメント
Matt J
2020 年 1 月 27 日
I don't see anything in your upsample() function that would generate NaNs, though that would be easy to check.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Multirate Signal Processing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!