【图像处理】平行线投影radon变换

  从一个角度,用光源照射对象物体,屏幕上会形成对象物体的影子;如果物体是半透明的,那么影子便有灰度而不是纯黑的,这说明屏幕上的像可以反映物体内部对可见光的衰减作用。我们从落于[0~ π ]的一系列连续角度照射物体,形成一系列的像,这些像包含物体结构特征信息,基本上可以通过这些像还原物体的形状特征,如果物体是半透明的,那么物体内部的结构也可以还原出来。物体原始形状变换生成这些投影像,称为radon变换;从这些像还原物体形态,称为逆radon变换。人体对可见光是不透明的,但对X光是半透明的,因此CT可以发射X光照射人体,生成人体内部结构的图像信息。
  radon变换的公式是:

xcosθ+ysinθ=ρg(ρ,θ)=f(x,y)δ(xcosθ+ysinθρ)dxdy

本质上就是沿着 xcosθ+ysinθ=ρ 确定的多条平行射线,建立法线方向为 θ 的线段上的投影。一个比较简单的实现是,让图像均匀旋转 θ 角度,然后计算x轴上的投影。假设角度区间[0~ π ]被分割为n份,投影线段长m,则最终我们获取 m×n 大小的二维矩阵,称为投影矩阵。

  radon反变换的公式是:

f(x,y)=π0g(xcosθ+ysinθ,θ)dθ
该反变换操作比较简单,但是计算量大,且输出图像模糊有光晕。

  为了得到清晰的图像,我们需要进行频域滤波。首先我们知道二维傅里叶变换对为:

F(u,v)=f(x,y)ej2π(ux+vy)dxdyf(x,y)=F(u,v)ej2π(ux+vy)dudv

这里引入傅里叶切片定理,其中 ω 是频率分量:
G(ω,θ)=g(ρ,θ)ej2πωρdρ=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(x,y)=F(ωcosθ,ωsinθ)dωcosθdωsinθdωcosθdωsinθ=ωdωdθf(x,y)=F(ωcosθ,ωsinθ)ωdωdθ=2π00G(ω,θ)ej2πω(xcosθ+ysinθ)ωdωdθcos(θ+π=cosθ,sin(θ+π=sinθG(ω,θ+π)=f(x,y)ej2πω(xcosθysinθ)dxdy=f(x,y)ej2π(ω)(xcosθ+ysinθ)dxdy=G(ω,θ)f(x,y)=π00G(ω,θ)ej2πω(xcosθ+ysinθ)ωdωdθ+π00G(ω,θ)ej2π(ω)(xcosθ+ysinθ)ωdωdθlet(ωt)f(x,y)=π00G(ω,θ)ej2πω(xcosθ+ysinθ)ωdωdθ+π00G(t,θ)ej2πt(xcosθ+ysinθ)tdtdθ=π0G(ω,θ)ej2πt(xcosθ+ysinθ)|ω|dωdθ

我们可以看出上述式子推导过程中利用了[0~ 2π ]的数据,虽然最后只需要[0~ π ]的投影数据,但是最终反滤波结果多了一项 |ω| 。这里面有什么更深层次的数学原理,我确实是不知道的。相比直接空间积分的结果,傅里叶切片重建效果更好的原因,可能有:

  • 我们之前进行radon投影时,看到[0~ π ]和[ π ~ 2π ]的 θ 角度下得到的投影是互为镜像,粗看认为信息是重复的,于是贸然舍弃一半,只计算了[0~ π ]角度的投影数据,这可能隐性地造成了数据不全。
  • 直接进行空间积分变换,可能造成不同角度投影之间发生混淆,导致产生模糊和光晕

在最终式子中,积分计算 |ω| 项是不可能的,该项不可积。我们可以通过引入窗函数,截断 |ω| 项或者使用其他近似的窗函数,计算积分计算式并滤波,从而得到一个相对较好的结果。

滤波反投影重建逆radon变化步骤如下:

  • 计算每个投影的一维傅里叶变换
  • 使用截断的 |ω| 项或者类似的窗口函数进行滤波,得到新的一维傅里叶变换数据
  • 计算傅里叶反变换,获得原图

【图像处理】平行线投影radon变换_第1张图片
【图像处理】平行线投影radon变换_第2张图片
简单滤波的结果
【图像处理】平行线投影radon变换_第3张图片
Matlab重建结果,注意有条纹

Matlab的radon逆变换效果好,Matlab的牛逼只有研究过的人才懂,自己实现不了的痛也只有研究过的人才懂。。

你可能感兴趣的:(图像处理,图像处理)