基于MATLAB的图像复原

基于MATLAB的图像复原

摘要

随着信息技术的发展,数字图像像已经充斥着人们身边的任意一个角落。由于图像的传送、转换,或者其他原因,可能会造成图像的降质、模糊、变形、质量下降、失真或者其他情况的图像的受损。本设计就针对“图像受损”的问题,在MATLAB环境中实现了利用几何失真校正方法来恢复被损坏的图像。几何失真校正要处理的则是在处理的过程,由于成像系统的非线性,成像后的图像与原图像相比,会产生比例失调,甚至扭曲的图像。

图像复原从理论到实际的操作的实现,不仅能改善图片的视觉效果和保真程度,还有利于后续的图片处理,这对医疗摄像、文物复原、视频监控等领域都具有很重要的意义。

关键字:图像复原;MATLAB;几何失真校正

1 MATLAB 6.x 信号处理

  1. 对MATLAB 6 进行了简介,包括程序设计环境、基本操作、绘图功能、M文件以及MATLAB 6 的稀疏矩阵这五个部分。MATLAB的工作环境有命令窗口、启动平台、工作空间、命令历史记录与当前路径窗口这四部分。M文件的编辑调试环境有四个部分的设置,分别是:Editor/Debugger的参数设置,字体与颜色的设置,显示方式的设置,键盘与缩进的设置。MATLAB采用路径搜索的方法来查找文件系统的M文件,常用的命令文件组在MATLAB文件夹中,其他M文件组在各种工具箱中。基本操作主要是对一些常用的基本常识、矩阵运算及分解、数据分析与统计这三方面进行阐述。MATLAB的基本操作对象时矩阵,所以对于矩阵的输入、复数与复数矩阵、固定变量、获取工作空间信息、函数、帮助命令进行了具体的描述。矩阵运算是MATLAB的基础,所有参与运算的数都被看做为矩阵。MATLAB中共有四大矩阵分解函数:三角分解、正交分解、奇异值分解以及特征值分解。数据分析与统计包括面向列的数据分析、数据预处理、协方差矩阵与相关系数矩阵、曲线拟合这四部分。MATLAB 中含有丰富的图形绘制寒素,包括二维图形绘制、三维图像绘制以及通用绘图工具函数等,同时还包括一些专业绘图函数,因此其具有很强大的绘图功能。简单的二维曲线可以用函数plot来绘制,而简单的三维曲线图则用plot3来绘制。在绘制图形时,MATLAB自动选择坐标轴表示的数值范围,并用一定的数据间隔标记做标注的数据,当然自己也可以指定坐标轴的范围与数据间隔。专业的绘图函数有绘梯度图制条形图、饼图、三维饼图、箭头图、星点图、阶梯图以及等高线。M文件时用户自己通过文本编辑器或字处理器生成的,且其之间可以相互调用,用户可以根据自己的需要,自我编写M文件。M文件从功能上可以分为底稿文件与函数文件两类,其中底稿文件是由一系列MATLAB语句组成的,而函数文件的第一行必须包含关键字“function”,二者的区别在于函数文件可以接受输入参数,并可返回输出参数,而底稿文件不具备参数传递的功能;在函数文件中定义及使用的变量大都是局部变量,只在本函数的工作区内有效,一旦退出该函数,即为无效变量,而底稿文件中定义或使用的变量都是全局变量,在退出文件后仍为有效变量。稀疏矩阵是一种特殊类型的矩阵,即矩阵中包括较多的零元素。MATLAB对稀疏矩阵的存储有两种模式:完全存储和稀疏存储。函数full和sparse是一对用来对矩阵存储模式进行转换的内部矩阵。函数sparse可以用一组非零元素直接创建一个稀疏矩阵,其格式如下:

S=Sparse(i,j,s,m,n)

其中i和j都为数组,分别代表矩阵中非零元素的行号和列号;s是一个全部元素为非零的数组,元素在矩阵中排列的位置为(i,j);m为输出矩阵的稀疏矩阵的行数,n为输出的稀疏矩阵的列数。函数sparse还有一种格式为:

S=Sparse(i,j,s,m,n,nzmax)

其中,参数i、j、s、m、n的说明与上面的格式相同,参数nzmax用来设置矩阵中非零元素的最大数目。Full函数可以讲稀疏矩阵变为一般矩阵。将一个矩阵的对角线元素保存在一个稀疏矩阵中,可以使用函数spdiags实现,其语法格式为:

S=spdiags(B,d,m,n)

创建一个大小为

的稀疏矩阵S,其非零元素来自矩阵B中的元素且按对角线排列。参数d指定矩阵B中用于生成稀疏矩阵S的对角线位置。矩阵的主对角线可以认为是第0条对角线,每向右移动一条对角线编号加1,向左下移动一条对角线编号减1,也就是说B中j列的元素填充矢量d中第j个元素所指定的对角线。用外部文件创建的文本文件,如果其中的数据按3个列排列,可以将这个文本文件载入工作空间,用于创建一个稀疏矩阵。MATLAB提供了专门针对稀疏矩阵的函数。处理稀疏矩阵时,计算的复杂程度与稀疏矩阵中的非零元素的个数成正比,计算的复杂程度也与矩阵的行列大小有关,稀疏矩阵的乘法、乘方,包含一定次数的线性方程等,都是比较复杂的运算。稀疏矩阵的行交换与列交换可以用以下两种方法表示:

  1. 对于交换矩阵P,对稀疏矩阵S的行交换可表示为

    ,列交换可以表示为

  2. 对于一个交换矢量p,p为一般矢量,包含1~n个自然数的一个排列。对稀疏矩阵进行行交换,可以表示为S(p,:)。S(p,:)为列交换形式。对于矩阵S的第i列进行行交换的形式为S(p,i)。

稀疏矩阵和一般矩阵一样,同样可以进行LU分解、Cholesky分解、QR分解以及一些不完全分解。与一般矩阵的特征值求解函数eig不同的是,计算稀疏矩阵的特征值采用函数eigs。一般矩阵的奇异值分解用函数svd,对稀疏矩阵额的奇异值分解使用函数svds。

第二章对离散信号进行了详尽的阐述,并就其MATLAB的实现作了总结。典型的离散信号有单位抽样序列、单位阶跃系列、正弦序列、复正弦序列、指数序列、随机序列6种。单位抽样序列的表达式如下:

                             (1-1)

又被称为Kronecker函数,该信号在离散信号与离散系统的分析与综合中有着重要的作用,在MATLAB中可以利用zeros函数来实现。如要产生N点的单位抽样序列,可通过下列语句实现:

单位阶跃序列的表达式如下:

                           (1-2)

MATLAB中的ones函数可以容易实现N点单位阶跃序列:

正弦序列的表达式如下:

                        (1-3)

其MATLAB的实现如下所示:

复正弦序列的表达式如下:

                             (1-4)

其MATLAB的实现如下所示:

指数序列的表达式如下所示:

                              (1-5)

其MATLAB的实现如下所示:

随机序列在MATLAB中是可以很容易实现的,有以下两类:

  1. rand(1,N)产生[0,1]上均匀分布的随机序列;
  2. randn(1,N)产生均值为0,方差为1的高斯随机序列,也就是白噪声序列,其他的分布的随机数可以通过上述随机数的变换而产生的。

对离散信号所作的基本运算分别是移位、相加、相乘等等,其MATLAB的实现如下所示:

  1. 信号延迟:给定离散信号

    ,若信号

    定义为

    ,那么,

    是信号

    在时间轴上右移k个抽样周期得到的新序列。
  2. 信号相加:

    。值得注意的是,当序列

    的长度不等或位置不对应时,首先应使两者位置对齐,然后通过zeros函数左右补零使其长度相等后再相加。
  3. 信号相乘:

    ,这是样本与样本之间的点乘运算,在MATLAB中可采用

    来实现,但两序列应做如相加运算同样的操作。序列

    同上,相乘后得到序列

  4. 信号标量乘:

    ,其MATLAB很容易实现:

  5. 信号翻转:

    ,在MATLAB中可以直接用fliplr函数实现此操作。
  6. 信号和:对于N点信号

    ,其和的定义为:

    ,采用MATLAB实现所示:

  7. 信号积:对于N点信号

    ,其积的定义为:

    ,MATLAB实现如下所示:

  8. 信号能量:有限长信号的能量定义为:

    ,其MATLAB实现有两种方法:

    或者

对于[0,1]上均匀分布的随机噪声可以直接利用MATLAB中的rand函数实现,均值为0,方差为1的高斯随机噪声即白噪声有函数randn产生。对于其他分布(如瑞利分布、对数正态分布等)的随机噪声可以通过上述随机数的变换而产生,这些都是噪声的产

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值