您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 数字图像处理-畸变校正
数字图像处理图像畸变及校正1图像畸变介绍从数字图像处理的观点来考察畸变校正,实际上是一个图像恢复的过程,是对一幅退化了的图像进行恢复。在图像处理中,图像质量的改善和校正技术,也就是图像复原,当初是在处理从人造卫星发送回来的劣质图像的过程中发展、完善的。目前,图像畸变校正的应用领域越来越广,几乎所有涉及应用扫描和成像的领域都需要畸变校正。图像在生成和传送的过程中,很可能会产生畸变,如:偏色、模糊、几何失真、几何倾斜等等。前几种失真主要是体现在显示器上,而后一种失真则多与图像集角度有关。不正确的显影,打印、扫描,抓拍受反射光线的影响等方式,都会使图像产生偏色现像。模糊、几何畸变主要是在仪器采集图片过程中产生,大多是因机器故障或操作不当影响导致,如在医学成像方面。而几何空间失真广泛存在于各种实际工程应用中,尤其是在遥感、遥测等领域。2畸变产生的原因在图像的获取或显示过程中往往会产生各种失真(畸变):几何形状失真、灰度失真、颜色失真。引起图像失真的原因有:成像系统的象差、畸变、带宽有限、拍摄姿态、扫描非线性、相对运动等;传感器件自身非均匀性导致响应不一致、传感器件工作状态、非均匀光照条件或点光源照明等;显示器件光电特性不一致;图像畸变的存在影响视觉效果,也是影响图像检测系统的形状检测和几何尺寸测量精度的重要因素之一。3图像畸变校正过程所用到的重要工具灰度直方图是关于灰度级分布的函数,是对图象中灰度级分布的统计。灰度直方图是将数字图象中的所有像素,按照灰度值的大小,统计其所出现的频度。通常,灰度直方图的横坐标表示灰度值,纵坐标为想像素个数。直方图上的一个点的含义是,图像存在的等于某个灰度值的像素个数的多少。这样通过灰度直方图就可以对图像的某些整体效果进行描述。从数学上讲,图像的灰度直方图是图像各灰度值统计特征与图像灰度值出现的频率。从图形上来讲,它是一个一维曲线,表征了图像的最基本的统计特征。作为表征图像特征的信息而在图像处理中起着重要的作用。由于直方图反映了图像的灰度分布状况,所以从对图像的观察与分析,到对图像处理结果的评价,灰度直方图都可以说是最简单、最有效的工具。4图像颜色畸变校正介绍图像颜色畸变现象可以是由摄像器材导致,也可以是由于真实环境本身就偏色导致,还有的是由于图像放置过久氧化、老化导致。无论其产生的原因如何,其校正方法都是类似的。如果用Matlab显示颜色畸变的图像RGB基色直方图,发现相对正常图像,颜色畸变的图像的直方图的三种基色的直方图中至少有一个直方图的像素明显集中集中在一处,或则集中在0处或则集中在255处,而另一部分有空缺,或则集中在中间而两边空,因此通过调整该直方图的像素点的像素值在区间[0,255]上的分布来解决图像颜色畸变问题。如果直方图中像素集中在0一边则说明该基色偏暗,如果集中在255处则说明该基色偏亮。下图是一有颜色畸变的图像的基色B的直方图。图1基色B的直方图很明显几乎所有像素点都集中在区间[a,b]上,这是偏暗的情况。那么要做的是把代表基色B的矩阵的数据拉伸,使得区间[a,b]扩大为区间[a,c]。只要做以下处理即可得到以上目的。对每一个x,x在[a,b]上,x*(c-a)/(b-a),而所有的y,y在区间[b,c]上,y=c,c=255。MATLAB中的算法实现如下:functiondealcolor(pic,k,d)a=imread(pic);%提取指定图像到矩阵ab=double(a);%将矩阵a的数据转化为double型[m,n]=size(b(:,:,k));%取图像矩阵的行列数fr=255/d;%设定拉伸系数fori=1:m%二重循环对矩阵内的每一个数据进行处理forj=1:nbm=b(i,j,k)*fr;%拉伸处理ifbm255%将所有值大于255的点都设为255bm=255;endb(i,j,k)=bm;endendc=uint8(b);%将矩阵b转化为8个字节的整型数据image(c);%显示处理过的图像注释:a———要处理的图像矩阵,是一个三维矩阵pic———要处理的图像的路径k———要处理的第几个基色矩阵,1、2、3分别代表R、G、Bd———向量,它的值是要拉伸的像素值中的最大值,0~255之间5图像模糊校正算法介绍图像的灰度变化情况可以表现为一曲线。当读入一个图像后,灰度变化就转变成了矩阵数据的变化。反映数据变化的数学手段可以采用微分算子。从数学的微分含义来看,“一阶微分”是描述“数据的变化率”,“二阶微分”是描述“数据变化率的变化率”。在感应灰度变化方面,二阶微分比一阶微分更具敏感性,尤其是对斜坡渐变的细节。因此采用二阶微分算子来处理。最简单的各向同性微分算子是拉普拉斯微分算子。设原图为f(x,y),一个二维的拉普拉斯微分算子定义为:22222yfxff将它展开就得到)1,()1,(),1(),1(),(42yxfyxfyxfyxfyxff。写成图像处理运算模版的形式就是010141010L。设处理后的图像为g(x,y),则),(),(),(2yxfyxfyxg。用模板表示则是0101510100L,模板中心点就是要处理的像素点。如果连对角线方向都考虑的话,模板的形式就表现为1111911111L。由于模板是一个3阶矩阵,所以模板处理不了图像矩阵边缘的点。将这些处理不了的点像素值都设置为255。在Matlab中的算法实现为:functionpic_tem=pick_tem(b,x,y,j,tem_n)%b是一个三维矩阵,j是代表第几层矩阵%tem_n代表模板号0代表采用第一种模板,1代表采用第二种模板iftem_n==0%第一种模板%返回二阶微分处理后的值pic_tem=5*b(y,x,j)-(b(y,x-1,j)+b(y+1,x,j)+b(y-1,x,j)+b(y,x+1,j));else%第二种模板%返回二阶微分处理后的值pic_tem=9*b(y,x,j)-(b(y-1,x-1,j)+b(y-1,x,j)+b(y-1,x+1,j)+b(y,x-1,j)+b(y+1,x+1,j)+b(y+1,x-1,j)+b(y+1,x,j)+b(y+1,x+1,j));endfunctionfaintness(pic,tem_n)%pic代表处理的图片的路径,tem_n代表采用第几种模板a=imread(pic);%导入图像,并把数据存放到三维矩阵a中b=double(a);%将数据转化为双精度[h,w,k]=size(b);%取矩阵的维数g=zeros(h,w,k)+255;%生成一个与原图像矩阵有相同维数的矩阵gfory=2:h-1%剔除图像矩阵最外一层的点,处理可以被模板包含的点forx=2:w-1forj=1:kg(y,x,j)=pick_tem(b,x,y,j,tem_n);%采用二阶微分算子处理,返回处理点(x,y)后的像素值endendendimage(uint8(g));%显示处理后的图像6图像几何畸变校正算法介绍对于畸变的光学系统,畸变空间中的直线在像空间中一般不再是直线,而只有通过对称中心的直线是例外。因此在进行桶形畸变校正时须先找出对称中心,再进行通用的几何畸变校正过程。桶形畸变校正一般步骤:(1)找出畸变图对称中心,将畸变图代表的地址空间关系转换为以对称中心为原点的空间关系。(2)空间变换:对输入图像(畸变图)上像素重新排列以恢复原空间关系。即利用地址映射关系为校正图空间上的每一个点找到它们在畸变图空间上的对应点。(3)灰度插值:对空间变换后的像素赋予相应的灰度值以恢复原位置的灰度值。几何畸变的校正要使用几何(坐标)变换,包括平行移动、旋转、扩大缩小等简单的变换。在这里,先在直角坐标系下研究地址映射关系,在程序中则使用矩阵坐标系。设[f(x,y)]是原图,[f(u,v)]是发生畸变后的图像。畸变校正的基本思想是,找出由(u,v)(x,y)的坐标变换T(地址映射),然后令:)),((),(vuTfyxf为参数向量。若畸变只是简单的纵横比的改变和倾斜,那么仿射变换可以校正这种畸变。取:FEDCBAT,,,,,:CBxAux][FEvDuyx表示去最接近x的整数若能得到参数的估计,问题就可以解决了。但一般的畸变都不只是简单的纵横比的改变和倾斜,通常遇到的都是空间扭曲型几何畸变,俗语讲就是橡胶层面拉伸。它是曲线畸变,这里采用二次多项式来模拟它,可表示为:25423210yaxyaxayaxaau(1)25423210ybxybxbybxbbv(2)同样,只要可以取得参数),(iiba的估计,畸变函数便可知,那么原则上,可以通过上式多项式变换来获得修正的空间扭曲映射。(1)和(2)都是一个有6个参数的二元二次方程,那么只要在畸变图和校正图上各取六对对应点(其中从校正图上的点是估计值)就可以通过解方程组得到参数),(iiba的估计,理论上,取的对应点对数越多得到的参数),(iiba估计就越精确。设取m对对应点,用向量来表示为],...,,[21mtuuuU],...,,[21mtvvvV2222222222211121111............11mmmmmmyyxxyxyyxxyxyyxxyxA其系数],...,,[10mtaaaa],...,,[10mtbbbb假设所取的m对对应点组成的矩阵A可逆,也就是说m对对应点线性不相关,则容易计算得到系数),(iiba:UAaVAb由于采用灰度插值,所以在校正的处理过程是对校正图上每一点映射到畸变图,然后通过灰度插值来得到这一点的灰度值。因此校正所采用的是地址逆映射:ayxyxyxu*,,,,,122byxyxyxv*,,,,,122()由地址映射()计算得到的(u,v)可能是非整数,而畸变图[f(u,v)]是数字图像,其像素值仅在坐标为整数处有定义,所以在非整数处的像素值要用其周围一些整数处的像素值来计算,这叫灰度插值。灰度插值有邻近插值法、双线性插值法等等。邻近插值法得到的图像通常都会出现锯齿现象,而双线性插值法得到的图像比邻近插值法得到的图像精确得多。通常情况下,双线性插值的精确度已经可以满足一般图像处理的要求,并不需要更高精确度的灰度插值。因此在这里将采用双线性插值法。双线性插值利用(u,v)周围的四个最邻近像素的灰度值,根据下面方法来计算(u,v)处的灰度值。设(u,v)四个邻近像素点为ABCD坐标分别为(i,j),(i+1,j),(i,j+1),(i+1,j+1)设iujv首先先计算出E,F两处的灰度值,f(E)和f(F)f(E)=[f(C)-f(A)]+f(A)f(F)=[f(D)-f(B)]+f(B)再计算(u,v):f(u,v)=[f(F)-f(E)]+f(E)此f(u,v)值代表的就是校正后图像中(x,y)处的灰度值。算法的流程为:ABCDEF(u,v)(i,j)(i,j+1)(i+1,j)开始读入图像到矩阵a取矩阵的长宽存放到h,w中生成一个与矩阵a相同维数的矩阵sp存放校正图信息求解系数估计a0、b0构造逆向映射多项式x=[1,j-og(1),i-og(2),(j-og(1))^2,(i-og(2))*(j-og(1)),(i-og(2))^2];用逆向映射求理想图点在失真图中的映射u=x*a0;v=x*b0;点(u,v)在畸变图中YN对u,v取整并计算参数arfbta做双线性插值K4?J+1=J1=k1=J1=IYJ+1=JJw+1?Ih+1I+1=IYY结束在Matlab中的算法实现为:functiongmodify(pic,uv,gm,og)%pic表示要处理的图像的路径文件名%uv是一个二维矩阵,uv(:,1)代表上面提到的tU,uv(:,2)表示tV%gm是一个二维
本文标题:数字图像处理-畸变校正
链接地址:https://www.777doc.com/doc-5709106 .html