fft1c
和 ifft1c
是 MRI 图像处理的常用函数。通常使用如下的 Matlab 实现 (Michael Lustig,2005)
function res = ifft1c(x,dim)
% res = fft1c(x)
%
% orthonormal forward 1D FFT
%
n=size(x,dim);
shft=zeros(1,5);
shft(dim)=ceil(n/2);
x=circshift(x,shft);
fx=ifft(x,[],dim);
fx=circshift(fx,shft);
res = sqrt(n)*fx;
function res = fft1c(x,dim)
% res = fft1c(x,dim)
%
% orthonormal forward 1D FFT
%
% (c) Michael Lustig 2005
n=size(x,dim);
shft=zeros(1,4);
shft(dim)=-ceil(n/2);
x=circshift(x,shft);
fx=fft(x,[],dim);
fx=circshift(fx,shft);
res = 1/sqrt(n)*fx;
但笔者在尝试将一个需要使用 ifft1c
函数移植到 Python 中时发现,无论是现有库还是其他现有开源代码很少有 ifft1c
的 Python 实现,Github 中少数的几个实现也和 Matlab 版不同,这给 debug 带来了不便。因此此处给出笔者的 ifft1c
Python 版实现,与 Matlab 版最大程度的保持了一致
ifft1c
文章来源:https://www.toymoban.com/news/detail-611192.html
import numpy as np
import math
import scipy
def iff1c(x, dim):
n = np.size(x, dim)
shft = np.zeros(5, dtype=int)
shft[dim] = math.ceil(n / 2)
shft = tuple(shft)
x = np.roll(x, shift=shft, axis=dim) # how to deal with more than 2?
fx = scipy.fft.ifft(x, axis=dim)
fx = np.roll(fx, shft, axis=dim)
return math.sqrt(n) * fx
fft1c
文章来源地址https://www.toymoban.com/news/detail-611192.html
import numpy as np
import math
import scipy
def ff1c(x, dim):
n = np.size(x, dim)
shft = np.zeros(4, dtype=int)
shft[dim] = -math.ceil(n / 2)
shft = tuple(shft)
x = np.roll(x, shift=shft, axis=dim) # how to deal with more than 2?
fx = scipy.fft.fft(x, axis=dim)
fx = np.roll(fx, shft, axis=dim)
return math.sqrt(n) * fx
到了这里,关于磁共振图像处理中 fft1c 和 ifft1c 函数的 Python 实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!