菜鸟教程在线编程Python,python在线编程工具
相关文章:编程记录——研究一下大蟒对谢普洛根体模数据实现氡变换
参考博客:
计算机化X线体层照相术典型数据洛根谢普——号体模数据的生成大蟒版本
计算机编程语言实现逆氡变换——直接反投影和滤波反投影
主要是对上述第二个链接代码进行了少量改动总结。
目录一、补充二、直接反投影三、先滤波再反投影四、小结
一、补充
关于ndimage.rotate
c=np.zeros([10,10]).对于I in range(10)的astype(int):对于j in range(10):c[I][j]=10 * I JD=ndimage。旋转(c,60,整形=假)打印(c)打印(d)上述代码就是将c这个二维数组(矩阵)逆时针旋转60度得到d,下面展示c和d的内容:
[[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [20 21 22 23 24 25 26 27 28 29] [30 31 32 33 34 35 36 37 38 39] [40 41 42 43 44 45 46 47 48 49] [50 51 52 53 54 55 56 57 58 59] [60 61 62 63 64 65 66 67 68 69] [70 71 72 73 74 75 76 77 78 79] [80 81 82 83 84 85 86 87 88 89] [90 91 92 93 94 95 96 97 98 99]][[ 0 0 7 17 27 36 0 0 0 0] [ 0 0 11 22 30 40 49 58 0 0] [ 0 6 16 25 35 44 53 62 71 80] [ 0 10 21 29 39 48 57 66 75 84] [ 5 16 24 34 43 52 61 70 79 89] [10 20 29 38 47 56 65 75 83 94] [15 24 33 42 51 60 70 78 89 0] [19 28 37 46 55 64 74 83 93 0] [ 0 0 41 50 59 69 77 88 0 0] [ 0 0 0 0 63 72 82 92 0 0]] 二、直接反投影# 直接反投影从scipy导入ndiimageimport numpy作为NP导入matplotlib。 py绘图为pltIMG _ SIZE=512 def iradon变换(正弦图,视图):检测器=IMG _ SIZE原点=NP。范围(视图)中I的零点((视图,检测器,检测器)):投影值=正弦图[:I]projectionValueExpandDim=NP。展开dims(投影值,轴=0)projectionValueExpandDim。重复(IMG大小,轴=0)原点[i]=类型(NP。float 64)IRA don=NP。sum(原点,轴=0)返回伊拉东#图像大小是512*512,探测器单元数量为512#氡是256*512的正弦图,radon1是512*512的sinogram#即正投影时分别采用了256和512个viewsimg=IRadonTransform(radon,256)img 1=iradon transform(radon 1,512)plt.subplot(1,2,1)plt.imshow(img,cmap=gray)plt.subplot(1,2,2)plt.imshow(img1,cmap=gray)plt.show() radon和radon1都是上一篇文章中的代码获取的正弦图,视图分别是256和512,进行反投影的结果如下:
暂时还没有搞懂的是,为什么视角的数量差那么多(一个是256一个是512),但是反投影的结果几乎一样。
三、先滤波再反投影# 先滤波再反投影将数组作为公证人从科学计算导入ndimagefrom从科学信号导入卷积将matplotlib.pyplot作为工厂编号两种滤波器的实现def RLFilter(N,d):filter rl=NP。范围(N)中我的零点((N,):滤波器rl[I]=-1.0/NP。幂((I-N/2)* NP。pi * d,2.0)如果np.mod(i - N/2,2)==0:filter rl[I]=0 filter rl[int(N/2)]=1/(4 * NP。功率(d,2.0))返回filterRLdef SLFilter(N,d):filterSL=NP 2.0)*(NP . power((4 *(I-N/2)),2.0)-1))filterSL[I]=-2/(NP .pi * * 2.0 * d * * 2.0 *(4 *(I-N/2)* * 2.0-1))返回filterSLIMG _ SIZE=512 def iradon变换(正弦图,视图):检测器=IMG _大小原点=NP。零((视图,检测器,检测器))filter=SLFilter(检测器,1)对于范围内的I(视图):projectionValue astype(NP。float 64)IRA don=NP。sum(原点,轴=0)返回伊拉东#图像大小是512*512,探测器单元数量为512#氡是256*512的正弦图,radon1是512*512的sinogram#即正投影时分别采用了256和512个视图FBP _ img=伊拉登变换(radon,256)FBP _ img 1=伊拉登变换(radon 1,512)plt.subplot(1,2,1)plt.imshow(FBP_img,cmap=gray)plt.subplot(1,2,2)plt.imshow(FBP_img1,cmap=gray)plt.show()观察运行结果:
可以发现,查看越多,条状伪影的数量越少。但是没搞懂的是,反投影既然是对不同视角的投影数据的累加,那么按理来说视角越多,应该像素数值越大。但实际上是视角越多,反投影的结果越精确,这是为什么,资料有限,暂时没有搞清楚。
四、小结这篇和上一篇文章是利用体模数据对计算机化X线体层照相术图像的正投影(获得正弦图)和反投影(通过汉字获得计算机化X线体层照相术图像)进行了模拟,大概明白了计算机化X线体层照相术成像重建的原理。但实际的原理肯定更为复杂,这就要靠之后继续学习了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。