python学习暂停,解决主要矛盾——计算成像

本文探讨了无透镜成像技术及其在计算成像领域的应用,并对比了Python与Matlab在矩阵运算上的差异。重点介绍了无透镜成像的基本原理与模型,以及如何利用Python实现图像重构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习python一个月后,实现了简单的爬虫、神经网络等简单的项目,也初步见识到python的简单和可读性,但比较缺乏数据结构的知识,对于数据的操作的理解比较欠缺。然而,学习程序语言是为了解决问题,要么解决现在手里的问题,要么找感兴趣的问题去尝试,但目前最紧要的问题是论文,之前的工作都是基于Matlab,改写成python太浪费时间了,而且matlab 的矩阵运算速度确实很快,所以暂时还是先暂停学习python吧,先解决眼前的问题。

目前主要在关注计算成像方面的研究,可以说在硬件发展达到技术极限的时候,通过计算方法提高或实现成像能力的方法也就火了起来。计算成像根据目的可以分为以下几种:

1.提高空间分辨率,如多帧超分辨和结构光超分辨

2.在常规光学系统无法成像的情况下实现成像,如无透镜成像、鬼成像、单像素成像

3.提高时间分辨率,如编码超高速成像

4.实现三维成像,包括光谱维,如压缩感知编码孔径光谱成像、层析光谱成像等

临时总结分类,以后再具体进行分类。目前主要关注的内容是编码孔径光谱成像和无透镜成像,我最开始接触的是编码孔径光谱成像,然后是超分辨成像,最后才是无透镜成像。由于实验室内没人做无透镜成像,所以自己想把这个方向拿起来。然而在深入学习这个方向的过程中发现其实以上几种计算成像的本质是一样的,只是实现的形式不同,这个后面再详细说。

先说说无透镜成像,无透镜成像最早的就是小孔成像,后来透镜被发明以后,逐渐代替了小孔成像,但在高频波长区域内,透镜的作用太有限了,所以小孔成像仍然能够发挥一定的作用。而小孔成像的分辨率与小孔的大小有关系,小孔小了分辨率高,但光通量小了,而且衍射现象的影响也变大。为了提高光通量,发明了编码小孔成像。在这方面的文献中学习到一个模型,认为无透镜成像模型的输出可以用一个卷积核与图像的卷积来表示,如果存在一个线性算子作用到卷积核上,形成一个类似脉冲函数的函数,则可以实现图像重构。如果扩展一下,任何计算成像的模型都可以如此表示,只不过把卷积替换为变换,如傅里叶变换、radon变换、恒等变换等等。我目前接触的都是线性变换,而且基本上都可以表达成Y=AX的形式,当然根据计算量可以进行适当变形。那么问题就归结到如何准确求解方程组,这已经是非常常规的操作了。使用这种方法估计没什么新意,想到同事提到的用贝叶斯做超分辨的结果会比较好,可以尝试一下,于是了解了一下贝叶斯。

现实是了解一下显然是不够的,看论文里的公式完全是头大!怎么办,那只好从解决问题入手了,看看有没有用贝叶斯求解线性方程组的呢?结果寥寥无几。倒是有很多线性回归的,那就好办了,线性回归和方程组本质是一样的,只不过A和X的位置换一下,而且有现成的程序,可参考贝叶斯线性回归,虽然没看明白,但是应该是比较好的一篇博客了吧。

把程序扒下来自己跑了一遍,更改一下样本的数量,发现在样本矩阵满秩的时候,贝叶斯比最小二乘的结果要好很多,而方程越是病态,两者的差距就很小了。由于没有看懂贝叶斯,也就无法知悉其中的道理。

话说回来,无透镜成像是可以看成是一个可逆变换的,不像压缩感知,因此利用贝叶斯也许能够获得比较好的结果。

拭目以待。

另外收集一些python的矩阵运算命令吧:python Vs Matlab,侵删,感谢作者的总结

1.建立矩阵

a1=np.array([1,2,3],dtype=int)  
#建立一个一维数组,数据类型是int。也可以不指定数据类型,使用默认。几乎所有的数组建立函数都可以指定数据类型,即dtype的取值。

a2=np.array([[1,2,3],[2,3,4]])  
#建立一个二维数组。此处和MATLAB的二维数组(矩阵)的建立有很大差别。

同样,numpy中也有很多内置的特殊矩阵:

b1=np.zeros((2,3))  
 #生成一个2行3列的全0矩阵。注意,参数是一个tuple:(2,3),所以有两个括号。完整的形式为:zeros(shape,dtype=)。相同的结构,有ones()建立全1矩阵。empty()建立一个空矩阵,使用内存中的随机值来填充这个矩阵。

b2=identity(n)   #建立n*n的单位阵,这只能是一个方阵。

b3=eye(N,M=None,k=0)  
 #建立一个对角线是1其余值为0的矩阵,用k指定对角线的位置。M默认None。

此外,numpy中还提供了几个like函数,即按照某一个已知的数组的规模(几行几列)建立同样规模的特殊数组。这样的函数有zeros_like()、empty_like()、ones_like(),它们的参数均为如此形式:zeros_like(a,dtype=),其中,a是一个已知的数组。

c1=np.arange(2,3,0.1)  
#起点,终点,步长值。含起点值,不含终点值。

c2=np.linspace(1,4,10)  
 #起点,终点,区间内点数。起点终点均包括在内。同理,有logspace()函数

d1=np.linalg.companion(a)  
 #伴随矩阵

d2=np.linalg.triu()/tril()  
#作用同MATLAB中的同名函数

e1=np.random.rand(3,2)  
 #产生一个3行2列的随机数组。同一空间下,有randn()/randint()等多个随机函数

fliplr()/flipud()/rot90()  
 #功能类似MATLAB同名函数。

xx=np.roll(x,2)  
#roll()是循环移位函数。此调用表示向右循环移动2位。

2.数组的特征信息

先假设已经存在一个N维数组X了,那么可以得到X的一些属性,这些属性可以在输入X和一个.之后,按tab键查看提示。这里明显看到了Python面向对象的特征。

X.flags    #数组的存储情况信息。

X.shape  
 #结果是一个tuple,返回本数组的行数、列数、……

X.ndim   #数组的维数,结果是一个数

X.size    #数组中元素的数量

X.itemsize  
 #数组中的数据项的所占内存空间大小

X.dtype    #数据类型

X.T   #如果X是矩阵,发挥的是X的转置矩阵

X.trace()    #计算X的迹

np.linalg.det(a)   #返回的是矩阵a的行列式

np.linalg.norm(a,ord=None)  
 #计算矩阵a的范数

np.linalg.eig(a)  
 #矩阵a的特征值和特征向量

np.linalg.cond(a,p=None)  
 #矩阵a的条件数

np.linalg.inv(a)  
 #矩阵a的逆矩阵

3.矩阵分解

常见的矩阵分解函数,numpy.linalg均已经提供。比如cholesky()/qr()/svd()/lu()/schur()等。某些算法为了方便计算或者针对不同的特殊情况,还给出了多种调用形式,以便得到最佳结果。

4.矩阵运算

np.dot(a,b)用来计算数组的点积;vdot(a,b)专门计算矢量的点积,和dot()的区别在于对complex数据类型的处理不一样;innner(a,b)用来计算内积;outer(a,b)计算外积。

专门处理矩阵的数学函数在numpy的子包linalg中定义。比如np.linalg.logm(A)计算矩阵A的对数。可见,这个处理和MATLAB是类似的,使用一个m后缀表示是矩阵的运算。在这个空间内可以使用的有cosm()/sinm()/signm()/sqrtm()等。其中常规exp()对应有三种矩阵形式:expm()使用Pade近似算法、expm2()使用特征值分析算法、expm3()使用泰勒级数算法。在numpy中,也有一个计算矩阵的函数:funm(A,func)。

5.索引

numpy中的数组索引形式和Python是一致的。如:

x=np.arange(10)

print x[2]  
 #单个元素,从前往后正向索引。注意下标是从0开始的。

print x[-2]  
 #从后往前索引。最后一个元素的下标是-1

print x[2:5]  
 #多个元素,左闭右开,默认步长值是1

print x[:-7]  
 #多个元素,从后向前,制定了结束的位置,使用默认步长值

print x[1:7:2]   #指定步长值

x.shape=(2,5)  
 #x的shape属性被重新赋值,要求就是元素个数不变。2*5=10

print x[1,3]  
 #二维数组索引单个元素,第2行第4列的那个元素

print x[0]   #第一行所有的元素

y=np.arange(35).reshape(5,7)  
 #reshape()函数用于改变数组的维度

print y[1:5:2,::2]  
 

 #选择二维数组中的某些符合条件的元素

 

 

波动方程成像方法及其计算,张文生编写,目录好像少了一页,正文没有问题,关于波动方程成像方法。目录如下,请根据需要下载~~~(*^__^*) 目录编辑 前言 第1章 Kirchhoff偏移 1.1 偏移成像概述 1.2 Kirchhoff积分公式 1.3 Kirchhoff偏移公式 1.4 Green函数和Hankel函数 1.5 Kirchhoff偏移公式的离散形式 1.6 单程波形式的Kirchhoff公式 1.7 程函方程和输运方程 1.8 射线Kirchhoff公式 1.9 散射Kirchhoff成像 第2章 零偏移距记录合成 2.1 伪谱法合成零偏移距记录 2.1.1 方法原理 2.1.2 数值计算 2.2 混合法合成零偏移距记录 2.2.1 理论方法 2.2.2 数值计算 2.3 三维正交各向异性介质有限差分正演模拟 2.3.1 各向异性方程及其差分方程的建立 2.3.2 三分量波场通量校正的实现 2.3.3 三维各向异性吸收边界条件 2.3.4 稳定性条件 2.3.5 数值计算 第3章 复杂构造叠后深度成像 3.1 逆时深度偏移 3.1.1 方法原理 3.1.2 稳定性条件 3.1.3 数值计算 3.2 四种常用的非Kirchhoff偏移方法 3.2.1 相移加插值(PSPI)法 3.2.2 隐式(ω-x)域有限差分(FD)法 3.2.3 裂步傅里叶(SSF)法 3.2.4 傅里叶有限差分(FFD)法 3.2.5 数值计算 3.2.6 计算量概述 3.3 混合法深度偏移及其吸收边界条件 3.3.1 理论方法 3.3.2 吸收边界条件 3.3.3 数值计算 第4章 复杂构造叠前深度成像 4.1 炮集叠前深度偏移及其并行实现 4.1.1 理论方法 4.1.2 成像计算 4.2 双平方根算子叠前深度偏移 4.2.1 双平方根算子 4.2.2 双平方根算子波场外推 4.2.3 成像计算 4.3 裂步Hartley变换叠前深度偏移 4.3.1 理论方法 4.3.2 成像计算 4.4 相位编码叠前深度偏移 4.4.1 交叉成像的产生 4.4.2 相位编码的特性 4.4.3 成像计算 4.5 平面波波场合成叠前深度偏移及其并行实现 4.5.1 波场合成偏移方法 4.5.2 控制照明技术 4.5.3 成像计算 第5章 三维多方向分裂隐式波场外推 5.1 交替方向隐格式 5.1.1 旁轴近似 5.1.2 吸收边界条件 5.2 三维频率空间域多方向分裂 5.2.1 高阶近似与分裂方向数目的选择 5.2.2 近似系数的确定 5.2.3 二、三、四、六、八方向上的算子分裂 5.3 由Kirchhoff积分解导出偏移公式 5.4 混合法四方向分裂偏移 5.4.1 混合法四方向分裂 5.4.2 分裂误差 5.4.3 螺旋线上的四方向波场外推 5.4.4 数值计算 第6章 正多边形网格上Laplace算子的差分表示 6.1 导数的中心差分算子表示 6.2 正多边形网格上的Laplace算子的差分表示 6.3 广义勾股定理 6.4 正方形和正六边形上的差分格式 6.4.1 长算子 6.4.2 紧凑算子 6.4.3 在波场外推中的应用 第7章 三维频率空间域显式波场外推 7.1 稳定的显式外推格式 7.2 McClellan滤波器 7.3 旋转的McClellan滤波器 7.3.1 45°旋转9点和17点滤波器 7.3.2 平均滤波器 7.4 六边形网格上的三维地震数据 7.4.1 一维采样理论 7.4.2 三维地震数据的带限表示 7.4.3 六边形网格上的数据采样 第8章 三维复杂构造叠前深度成像 8.1 全波波动方程的分解 8.2 混合法炮集三维叠前深度偏移 8.2.1 混合法波场外推 8.2.2 相对误差分析 8.2.3 成像计算与并行实现 8.3 混合法三维平面波合成叠前深度偏移 8.3.1 三维平面波合成与目标照明 8.3.2 因子分解波场外推 8.3.3 成像计算 8.4 共方位数据三维叠前偏移 8.4.1 共方位数据的下延拓 8.4.2 稳相路径的射线参数等价表示 8.4.3 共方位下延拓的精度 8.4.4 共方位Stolt偏移 参考文献 索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值