CT重建 平行射线滤波反投影

计算机断层重建(CT)是一个比较热门的领域,这篇文章简单介绍了反投影方法的重建过程。

参考资料:冈萨雷斯,《数字图像处理》,电子工业出版社。

直接反投影

该方法是沿着射线来的方向把一维信号反投影回去,可以想象成把投影穿过图像区域反“涂抹”回去。注意到相隔180°的投影互为镜像,因此,为了产生重建所要求的所有投影,只需要按照圆周的一半角度增量来考虑即可。下图是不同投影角度数量下直接反投影法的结果

直接反投影法

从图中可以看到,直接反投影法有明显的伪影,也被称之为“晕环”。伪影的亮度比物体第,但比背景高。越多的投影使得伪影亮度越低,但会带来模糊。在CT重建中,去除伪影是一个重要的问题。

投影与Radon变换

Radon变换描述了投影产生时的数学过程。考虑直线 y = a x + b y=ax+b y=ax+b,将其用极坐标来表示可写为:
x cos ⁡ θ + y sin ⁡ θ = ρ x\cos\theta+y\sin\theta=\rho xcosθ+ysinθ=ρ
对于图像 f ( x , y ) f(x,y) f(x,y),沿该线积分为:
g ( ρ , θ ) = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) δ ( x cos ⁡ θ + y sin ⁡ θ − ρ ) d x d y g(\rho,\theta)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)\delta(x\cos\theta+y\sin\theta-\rho)dxdy g(ρ,θ)=f(x,y)δ(xcosθ+ysinθρ)dxdy
其中 δ \delta δ为示性函数,或者是和示性函数差不多的冲激函数。离散情况下可写为:
g ( ρ , θ ) = ∑ 0 M − 1 ∑ 0 N − 1 f ( x , y ) δ ( x cos ⁡ θ + y sin ⁡ θ − ρ ) g(\rho,\theta)=\sum_{0}^{M-1}\sum_{0}^{N-1}f(x,y)\delta(x\cos\theta+y\sin\theta-\rho) g(ρ,θ)=0M10N1f(x,y)δ(xcosθ+ysinθρ)

进一步可以得到直接反投影的数学表示:
f ( x , y ) = ∫ 0 π g ( ρ , θ ) d θ f(x,y)=\int_0^{\pi}g(\rho,\theta)d\theta f(x,y)=0πg(ρ,θ)dθ

滤波反投影法(FBP)

傅里叶切片定理

关于 ρ \rho ρ投影的一维傅里叶变换为
G ( ω , θ ) = ∫ − ∞ ∞ g ( ρ , θ ) e − j 2 π ω ρ d ρ G(\omega,\theta)=\int_{-\infty}^{\infty}g(\rho,\theta)e^{-j2\pi\omega\rho}d\rho G(ω,θ)=g(ρ,θ)ej2πωρdρ
傅里叶变换可以看成从空间域到频率域上的转换,这里 ω \omega ω为频率变量。将 g g g带入上式中可得:
G ( ω , θ ) = ∫ − ∞ ∞ ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) δ ( x cos ⁡ θ + y sin ⁡ θ − ρ ) e − j 2 π ω ρ d x d y d ρ = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) [ ∫ − ∞ ∞ δ ( x cos ⁡ θ + y sin ⁡ θ − ρ ) e − j 2 π ω ρ d ρ ] d x d y = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) e − j 2 π ω ( x cos ⁡ θ + y sin ⁡ θ ) d x d y = F ( ω cos ⁡ θ , ω sin ⁡ θ ) \begin{aligned} G(\omega,\theta)&=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)\delta(x\cos\theta+y\sin\theta-\rho)e^{-j2\pi\omega\rho}dxdyd\rho \\ &=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)\left[\int_{-\infty}^{\infty}\delta(x\cos\theta+y\sin\theta-\rho)e^{-j2\pi\omega\rho}d\rho\right]dxdy \\ &=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)e^{-j2\pi\omega(x\cos\theta+y\sin\theta)}dxdy \\ &=F(\omega\cos\theta,\omega\sin\theta) \end{aligned} G(ω,θ)=f(x,y)δ(xcosθ+ysinθρ)ej2πωρdxdydρ=f(x,y)[δ(xcosθ+ysinθρ)ej2πωρdρ]dxdy=f(x,y)ej2πω(xcosθ+ysinθ)dxdy=F(ωcosθ,ωsinθ)
其中 F ( u , v ) F(u,v) F(u,v) f ( x , y ) f(x,y) f(x,y)的二维傅里叶变换,即:
F ( u , v ) = ∫ − ∞ ∞ ∫ − ∞ ∞ f ( x , y ) e − j 2 π ( u x + v y ) d x d y F(u,v)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}f(x,y)e^{-j2\pi(ux+vy)}dxdy F(u,v)=f(x,y)ej2π(ux+vy)dxdy

这说明了,对投影 g g g的一维傅里叶变换,等于对图像 f f f二维傅里叶变换在某一条线下的切片。这就是傅里叶切片定理。

傅里叶切片定理

平行射线下的滤波反投影重建

傅里叶逆变换:
f ( x , y ) = ∫ − ∞ ∞ ∫ − ∞ ∞ F ( u , v ) e j 2 π ( u x + v y ) d u d v f(x,y)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}F(u,v)e^{j2\pi(ux+vy)}dudv f(x,y)=F(u,v)ej2π(ux+vy)dudv
u = ω cos ⁡ θ , v = ω sin ⁡ θ u=\omega\cos\theta,v=\omega\sin\theta u=ωcosθ,v=ωsinθ,则有
f ( x , y ) = ∫ 0 2 π ∫ − ∞ ∞ F ( ω cos ⁡ θ , ω sin ⁡ θ ) e j 2 π ω ( x cos ⁡ θ + y sin ⁡ θ ) ω d ω d θ f(x,y)=\int_{0}^{2\pi}\int_{-\infty}^{\infty}F(\omega\cos\theta,\omega\sin\theta)e^{j2\pi\omega(x\cos\theta+y\sin\theta)}\omega d\omega d\theta f(x,y)=02πF(ωcosθ,ωsinθ)ej2πω(xcosθ+ysinθ)ωdωdθ
应用傅里叶切片定理,以及 G ( ω , θ + π ) = G ( − ω , θ ) G(\omega,\theta+\pi)=G(-\omega,\theta) G(ω,θ+π)=G(ω,θ)可得
f ( x , y ) = ∫ 0 2 π ∫ − ∞ ∞ G ( ω , θ ) e j 2 π ω ( x cos ⁡ θ + y sin ⁡ θ ) ω d ω d θ = ∫ 0 π [ ∫ − ∞ ∞ ∣ w ∣ G ( ω , θ ) e j 2 π ω ρ d ω ] ρ = x cos ⁡ θ + y sin ⁡ θ d θ \begin{aligned} f(x,y)&=\int_{0}^{2\pi}\int_{-\infty}^{\infty}G(\omega,\theta)e^{j2\pi\omega(x\cos\theta+y\sin\theta)}\omega d\omega d\theta \\ &=\int_{0}^{\pi}\left[\int_{-\infty}^{\infty}|w|G(\omega,\theta)e^{j2\pi\omega\rho}d\omega\right]_{\rho=x\cos\theta+y\sin\theta}d\theta \end{aligned} f(x,y)=02πG(ω,θ)ej2πω(xcosθ+ysinθ)ωdωdθ=0π[wG(ω,θ)ej2πωρdω]ρ=xcosθ+ysinθdθ

方括号里可以看成一维傅里叶逆变换,只是附加了 ∣ ω ∣ |\omega| ω项,这一项可以看为一个斜坡滤波器。因为 ∣ ω ∣ |\omega| ω在无穷处都到达 + ∞ +\infty +,所以傅里叶反变换无定义。实践中常常通过加窗的方式,使它在定义的范围之外为0。

简单的方法是通过方波限制,但方波有不希望的振铃特性,这会为图像重建带来伪影。因此可以考虑平滑窗,比如汉明窗或者韩窗:
h ( w ) = { c + ( c − 1 ) cos ⁡ 2 π ω M − 1 0 ⩽ ω ⩽ ( M − 1 ) 0 其他 h(w)=\left\{ \begin{aligned} &c+(c-1)\cos\frac{2\pi\omega}{M-1} \qquad &0\leqslant\omega\leqslant(M-1) \\ &0 \qquad &其他 \end{aligned}\right. h(w)= c+(c1)cosM12πω00ω(M1)其他

总结: 获得完整反投影图像是由如下步骤得到的:

  • 计算每个投影的一维傅里叶变换。
  • 用滤波函数 ∣ ω ∣ |\omega| ω乘以每个傅里叶变换,即乘以一个合适的窗。
  • 得到每个滤波后的变换的一维傅里叶反变换。
  • 对所有的一维反变换积分(求和)。

卷积与傅里叶反变换

考虑傅里叶反变换可以写成卷积的形式,可以有
f ( x , y ) = ∫ 0 π [ ∣ ω ∣ G ( ω , θ ) e j 2 π ω ρ d ω ] ρ = x cos ⁡ θ + y sin ⁡ θ d θ = ∫ 0 π [ s ( ρ ) ⋆ g ( ρ , θ ) ] ρ = x cos ⁡ θ + y sin ⁡ θ d θ = ∫ 0 π [ ∫ − ∞ ∞ g ( ρ , θ ) s ( x cos ⁡ θ + y sin ⁡ θ − ρ ) d ρ ] d θ \begin{aligned} f(x,y)&=\int_0^{\pi}\left[|\omega|G(\omega,\theta)e^{j2\pi\omega\rho}d\omega\right]_{\rho=x\cos\theta+y\sin\theta}d\theta \\ &=\int_0^{\pi}\left[s(\rho)\star g(\rho,\theta)\right]_{\rho=x\cos\theta+y\sin\theta}d\theta \\ &=\int_0^{\pi}\left[\int_{-\infty}^{\infty}g(\rho,\theta)s(x\cos\theta+y\sin\theta-\rho)d\rho\right]d\theta \end{aligned} f(x,y)=0π[ωG(ω,θ)ej2πωρdω]ρ=xcosθ+ysinθdθ=0π[s(ρ)g(ρ,θ)]ρ=xcosθ+ysinθdθ=0π[g(ρ,θ)s(xcosθ+ysinθρ)dρ]dθ
其中 ⋆ \star 表示卷积, s ( ρ ) s(\rho) s(ρ)表示 ∣ ω ∣ |\omega| ω的傅里叶逆变换。

注:

  • 重建过程中不需要存储所有的反投影图像,单个求和运算仅被最后的反投影图像更新。
  • 斜坡滤波器在频率域的直流项归零,故每幅反投影图像的均值将为零。这意味着每幅反投影图像都将有负像素和正像素。简单的解决办法是所有像素减去最小值再放缩。
    f ′ = K [ f − min ⁡ f max ⁡ ( f − m i n f ) ] f'=K\left[\frac{f-\min{f}}{\max{(f-min{f})}}\right] f=K[max(fminf)fminf]
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
滤波反投影(Filtered Backprojection, FBP)是一种常用于计算机断层扫描(Computed Tomography, CT)图像重建的算法。以下是一个简单的Matlab实现: ```matlab function reconstructedImage = fbp_algorithm(projections, angles, filter) numAngles = length(angles); numDetectors = size(projections, 1); numPixels = size(projections, 2); % 初始化重建图像矩阵 reconstructedImage = zeros(numPixels, numPixels); % 设置重建图像的中心点 center = floor(numPixels / 2) + 1; % 将角度转换为弧度 angles = deg2rad(angles); % 对每个投影角度进行处理 for i = 1:numAngles angle = angles(i); % 计算当前角度对应的投影线坐标 x = -center:1:center; y = round(center - x * tan(angle)); % 剔除超出探测器范围的点 validPoints = (y >= 1) & (y <= numDetectors); x = x(validPoints); y = y(validPoints); % 基于滤波器函数对投影进行滤波 filteredProjection = filter(projections(y, :)); % 将滤波后的投影值反投影重建图像上 for j = 1:length(x) reconstructedImage(:, x(j)) = reconstructedImage(:, x(j)) + filteredProjection(j); end end % 缩放重建图像 reconstructedImage = reconstructedImage / numAngles; end ``` 在上述代码中,`projections`是投影数据,`angles`是投影角度,`filter`是用于滤波的函数句柄。`reconstructedImage`是最终的重建图像。 请注意,这只是一个基本的FBP算法实现,实际应用中可能需要进行更多的优化和处理。滤波器函数可以根据具体需求选择,常用的有Ramp滤波器和Shepp-Logan滤波器等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

73826669

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值