数字图像处理-畸变校正
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理
图像畸变及校正
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中的算法实现如下:
function dealcolor(pic,k,d)
a=imread(pic); %提取指定图像到矩阵a
b=double(a); %将矩阵a的数据转化为double型
[m,n]=size(b(:,:,k)); %取图像矩阵的行列数
fr=255/d; %设定拉伸系数
for i=1:m % 二重循环对矩阵的每一个数据进行处理
for j=1:n
bm=b(i,j,k)*fr; % 拉伸处理
if bm>255 %将所有值大于255的点都设为255
bm=255;
end
b(i,j,k)=bm;
end
end
c=uint8(b); %将矩阵b 转化为8个字节的整型数据
image(c); %显示处理过的图像
注释:a ——— 要处理的图像矩阵,是一个三维矩阵
pic ——— 要处理的图像的路径
k ——— 要处理的第几个基色矩阵,1、2、3分别代表R 、G 、B d ——— 向量,它的值是要拉伸的像素值中的最大值,0~255之间 5 图像模糊校正算法介绍
图像的灰度变化情况可以表现为一曲线。当读入一个图像后,灰度变化就转变成了矩阵数据的变化。反映数据变化的数学手段可以采用微分算子。从数学的微分含义来看,“一阶微分”是描述“数据的变化率”,“二阶微分”是描述“数据变化率的变化率”。在感应灰度变化方面,二阶微分比一阶微分更具敏感性,尤其是对斜坡渐变的细节。因此采用二阶微分算子来处理。
最简单的各向同性微分算子是拉普拉斯微分算子。设原图为f(x,y),一个二维的拉普拉斯微分算子定义为:22222
y f x f f ∂∂+∂∂=∇ 将它展开就得到 )1,()1,(),1(),1(),(42+---+---=∇y x f y x f y x f y x f y x f f 。写成图像处理运
算模版的形式就是⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡----=010141010L 。 设处理后的图像为g(x,y),则 ),(),(),(2y x f y x f y x g ∇+=。用模板表示则
是⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡----=010*******L ,模板中心点就是要处理的像素点。如果连对角线方向都考
虑的话,模板的形式就表现为⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡--------=1111911111L 。 由于模板是一个3阶矩阵,所以模板处理不了图像矩阵边缘的点。将这些处理不了的点像素值都设置为255。
在Matlab 中的算法实现为:
function pic_tem = pick_tem(b,x,y,j,tem_n) % b 是一个三维矩阵,j 是代表第几层矩阵
%tem_n 代表模板号0代表采用第一种模板,1代表采用第二种模板
if tem_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));
end
function faintness(pic,tem_n)
%pic 代表处理的图片的路径,tem_n 代表采用第几种模板
a=imread(pic); %导入图像,并把数据存放到三维矩阵a 中
b=double(a); %将数据转化为双精度
[h,w,k]=size(b); %取矩阵的维数
g=zeros(h,w,k)+255; %生成一个与原图像矩阵有相同维数的矩阵g