前几天我学习了Radon变换并用Python做了一个简单的程序(见上一篇博文),昨天看了一下逆Radon变换,尝试了一下简单的实现。我们可以通过对Sinogram图使用逆Radon变换来还原原始图像,最简单的方法是直接反投影,另一种方法是滤波反投影(这个方法是大部分商用CT机器使用的算法)。下面我介绍一下这两种方法,然后给出一个简单的Python实现:
直接反投影
直接反投影就是直接将投影值均匀回抹,然后将不同角度投影的回抹值相叠加得到原始的图片,代码如下:
import numpy as np
from scipy import ndimage
import matplotlib.pyplot as plt
import imageio
from cv2 import cv2
def IRandonTransform(image, steps):
#定义用于存储重建后的图像的数组
channels = len(image[0])
origin = np.zeros((steps, channels, channels))
for i in range(steps):
projectionValue = image[:, i]
projectionValueExpandDim = np.expand_dims(projectionValue, axis=0)
projectionValueRepat = projectionValueExpandDim.repeat(channels, axis=0)
origin[i] = ndimage.rotate(projectionValueRepat, i*180/steps, re