赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 图像处理与人工智能

首页 > 专业技术 > 图像处理与人工智能 > 图像的空间域处理
图像的空间域处理
  1. 图像的点运算:
  2. 图像的几何变换:
  3. 图像倾斜与校正:
  4. 图像插值:
图像的空间域处理是相对于变换域而言的,一幅图像可以看成二维数组f(x,y),而x-y平面表明了空间位置信息,就称为空间域。空间域图像处理是直接对图像的像素点数值进行的计算和操作。

一、图像的点运算:

图像的点运算指对图像中的每个独立像素依次进行的灰度变换运算,而不涉及周边其他像素点。

1. 灰度直方图:

图像的灰度直方图表示图像每一级灰度与该灰度级出现概率的对应关系。假设一幅图像的总像素为N,灰度级总数为L,其中灰度级为g的像素总数为Ng,则这幅数字图像灰度直方图横坐标为灰度g(0≤g≤L-1),纵坐标则为灰度值出现的次数Ng。实际上,用像素总数N去除以各个灰度值出现的次数Ng即得到各个灰度级出现的概率Pg=Ng/N,从而得到归一化的灰度直方图,其纵坐标为概率Pg。

2. 灰度的线性变换:

线性灰度变换函数f(x)是一个一维线性函数:t=k*s+c
式中,k为线性函数的斜率,c为线性函数在y轴的截距,s表示输入图像的灰度,t表示输出图像的灰度。当k>1时输出图像对比度增大,当k<1时输出图像对比度减小;当k=1且c≠0时,使所有像素的灰度值上移或下移而使整个图像更暗或更亮;k<0,暗区变亮而亮区变暗;k=-1而c=255时,输出图像的灰度反转,用于增强暗图像中的亮度较大的细节。这种线性改变亮度的变换可能由于像素亮度达到饱和(小于0或大于255)从而丢失一部分细节。

3. 灰度对数变换:

一般表达式为:t=c*log(1+s)
其中,c为尺度比例常数,s为源灰度值,t为变换后的目标灰度值。这种变换可以增强一幅图像中较暗部分的细节,用来扩展被压缩的高值图像中的较暗像素,广泛应用于频谱图像的显示中。

4. 伽马γ变换:

在成像设备捕获景物反射光形成图像过程中,光信号通过光电设备转换为电信号,然后再通过显示设备将电信号转换为光信号,人眼就能观察到图像。在这个光电-电光转换中,转换特性一般都是非线性的,如果输入光信号强度为L,输出电信号强度I,二者关系可表示为:
光电-电光转换特性
其中,c为放大倍数,是一个常数;γ是幂函数的指数。这种转换特性称为幂律转换特性,也称γ特性。单个设备的γ值往往由制造厂家基于实际测量给定,如CRT显示器的γ值在1.8~2.8范围内,2.4为典型值;而数码摄像机和照相机可以通过内部校正来达到一个较为习惯的视觉效果。TV接收设备中γ值被标准化,模拟NTSC制式中为2.2,PAL制式中为2.8(实际测量结果为2.35左右),1/2.2≈0.45是NTSC以及欧洲广播联盟EBU标准中的相机标准。国际电信联盟ITU-R BT.709标准中,接收机γ值为2.5,照相机为1/1.956≈0.51。
对这种转换特性的得到的图像,需要进行适当校正,以得到线性的关系,称为γ校正。对于已知γ值的设备,可以使用下面公式直接进行校正:
γ校正
实际的图像系统由多个部件组成,其中每个部件都会存在非线性,如果都为幂函数转换特性,整个系统就是一个幂函数,其γ等于单个部件γ的乘积,有时会采用一个补偿环节,是前面几个环节的γ乘积的倒数,使整个系统的总体输入输出关系为线性,γ=1。
但人眼观察图像时,视觉特性还会受到周围环境影响,在明亮环境下观看,也就是实际环境中白色物体的亮度与图像中白色部分的亮度几乎相同时,γ=1的系统使图像看起来更像原始场景;而在黑暗环境下观看,即周围环境比画面的亮度暗很多时,γ=1.5的系统使图像看起来更像原始图像;在光线不是很好的室内环境下观看,这时周围环境比图像画面亮度低,但可以看到周围环境中放置的物体,γ=1.25的系统使图像看起来更像原始图像。不过,一般情况下,也主要是以γ=1为目标对系统进行校正。
在γ值未知情况下,可以通过测试靶图,获得logI与logL的对应关系,选择其中的线性段部分,其斜率大小就对应γ值。如果没有靶图,就只能通过逐步调整法,以获得对γ值的估计,然后进行校正。
伽马γ变换也称指数变换或幂次变换,一般表达式为:t=(s+e)γ
其中,s与t的取值范围均为[0,1],e为补偿系数,γ为伽马系数。这种变换可以根据γ的不同取值选择性地增强低灰度区域的对比度或是高灰度区域的对比度。当γ>1时,图像的高灰度区域对比度得到增强;当γ<1时,图像的低灰度区域对比度得到增强;γ=1时,灰度变换是线性的,不改变原图像。
进行变换时,通常需要将0~255的灰度动态范围变换到0~1,执行伽马变换后再恢复原动态范围。
对于上面的γ校正公式,存在一个问题,函数的一阶导数在原点处存在剧烈变化,因此进行修正:
γ校正公式
其中,
γ校正公式
上述函数包含线性部分和非线性部分,在过渡点a=a0处平滑连接,线性斜率以及参数d使两段在a=a0处有相同的值和一阶导数,保证函数的连续。国际电信联盟ITU-R BT.709标准中,接收机γ值为2.5,照相机为1/1.956≈0.511,a0=0.018,相应的斜率值为s=4.50681,偏移值d=0.0991499。下表为ITU及sRGB标准中的γ参数:

标准 额定γ值 a0 s d 有效γ值
ITU-R BT.709 1/2.222≈0.450 0.01800 4.5068 0.09915 1/1.956≈0.511
sRGB 1/2.400≈0.417 0.00304 12.9231 0.05500 1/2.200≈0.455
上面公式的逆校正函数为:
γ校正公式

5. 灰度阈值变换:

用于将一幅灰度图像转换为黑白二值图像。用户指定一个分界线阈值,如果图像中的像素的灰度值小于该阈值则设为0,否则设为255。

6. 分段线性变换:

变换函数为:
分段线性变换公式
其中,x1和x2给出需要转换的灰度范围,y1和y2决定线性变换的斜率。分段的灰度拉伸可以更加灵活地控制输出灰度直方图,可以有选择地拉伸某段灰度区域以改善输出图像。如果一幅图像灰度集中在较暗区域而导致图像偏暗,可以使斜率大于1拉伸灰度区间改善图像;如果图像灰度集中在较亮区域而导致图像偏亮,可以使斜率小于1压缩灰度区间改善图像。如果x1=x2,y1=0,y2=255,图像只剩下两个灰度等级,起到阈值化作用。
一般情况下,限制x1<x2、y1<y2,保证函数是单调递增的,避免灰度级出现颠倒。

7. 自动对比度调整:

把图像中最暗和最亮的像素值映射到可取灰度范围中的最小和最大值,然后使中间值线性分布。
假设alow和ahigh是当前图像中的最小和最大像素值,而图像的灰度取值范围为[amin,amax],映射函数为:
自动对比度调整公式
对于amin=0,amax=255的8比特图像,函数可以简化为:
自动对比度调整公式
目标范围[amin,amax]不一定是阈值的最大取值范围,可以映射到其中的值域区间。
实际中,上面的映射函数受几个极值影响比较强烈,而这几个像素值未必能代表图像的主要内容,可以通过在灰度范围的上限和下限区域的固定百分比像素方法来避免。首先要确定两个限定值alow*和ahigh*,使得图像中所有像素值的预定义分位数小于alow*并大于ahigh*,这两个值依赖于图像内容,可以通过图像的累计直方图求得。然后将所有在alow*和ahigh*以外的值映射到amin和amax,而中间值则线性映射到区间[amin,amax]。这是经修正的自动对比度调整,映射函数定义为:
自动对比度调整公式
按上式映射到最小值和最大值,就不只依赖于单个极值,而是依赖于一组代表性像素集合。通常上限和下限分位数的值是相同的,常用值为0.005~0.015,也即0.5%~1.5%。在Adobe Photoshop的自动对比度调整中,取值范围两端像素取0.5%。

8. 直方图均衡化:

又称灰度均衡化,指使用一种灰度变换达到每一级灰度上都有近似相同的像素点数的输出图像,即输出直方图是均匀的。经过直方图均衡化的图像,像素将占用尽可能多的灰度级并分布均匀,图像有较高对比度和较大动态范围。对于离散灰度级,转换公式为:
直方图均衡化公式
其中,Hi为第i级灰度的像素个数,A0为图像像素总数,Dm为最大灰度值(255),s为变换前的灰度值,t为变换后的灰度值。

9. 直方图规定化:

人为地修正直方图的形状,以选择性地增强某个灰度范围内的对比度,或使图像灰度值满足某种特定分布,也称直方图匹配。
直方图规定化是在直方图均衡化基础上,通过建立原始图像与特定图像之间的关系,使原始图像的直方图匹配特定的形状。处理时先对原始图像均衡化s=f(r),对待匹配直方图的图像均衡化v=g(z),因为都均衡化s=v,得到v=g'(s)=g'(f(r))。实际使用时,将f(r)、g(z)以及反变换函数g'(s)作为映射表处理。
常用的直方图规定化的分布为分段线性分布和高斯分布。为了使直方图匹配到需要的分布,可以使用填充方法,从开始值0,相应概率在参考分布下方逐层堆叠;对于灰度a,每一个水平条的高度等于相应的概率,逐渐延伸。

二、图像的几何变换:

图像几何变换又称为图像空间变换,是将一幅图像中的位置坐标映射到另一幅图像中的新坐标。几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。一个几何变换需要两部分运算,首先是空间变换所需的运算,如平移、旋转、镜像等;此外还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。

1. 仿射变换:

仿射变换Affine transformation是图像处理和计算机图形学中最基础的二维坐标变换,实际上就是二维坐标的平移、旋转、缩放、翻转与错切的组合变换。变换公式:
图像仿射变换公式
从功能上,仿射变换可以实现一种或多种简单变换,可以理解为变换的组合。系数矩阵在a11、a12、a21、a22表示旋转、缩放、错切,b1、b2表示平移。
如果输入三个点的坐标和仿射变换后对应的三个点的坐标,可以计算出系数矩阵:
图像仿射变换计算系数矩阵
实现二维图像几何变换通常就使用这种齐次坐标,将二维矩阵[x,y]表示成齐次坐标[x,y,1]的形式,使用仿射变换公式,实现平移、旋转、镜像及转置等。
1)平移变换:
图像平移是指将图像中的元素中所有像素点按照指定的平移量水平或垂直移动到期望的位置。设(x0,y0)为原图像上的一点,图像水平平移量为Tx,垂直平移量为Ty,则平移后的点坐标变为:
图像平移变换
逆变换:
图像平移变换
这样,平移后的目标像素中的每一点都可以在原图像中找到对应的点。
可以将上述公式使用齐次坐标[x,y,1]改写为矩阵形式。源图像在像素点(x0,y0),向x方向和y方向分别平移xoffset和yoffset距离,坐标变换为(x1,y1)。利用齐次坐标,可以用矩阵变换方式表示为:
图像平移变换
由此可以计算出平移后每个像素的新位置,实现图像平移。
图像平移变换
其中,tx和ty表示x和y方向的平移分量。
如果超出了原图范围,可以设置为0或255。对于原图中被移出图像显示区的点,可以直接丢弃,也可以通过适当增加目标图像尺寸的方法使得新图像中能够包含这些点。
2)镜像变换:
镜像变换分为水平镜像和垂直镜像。水平镜像即将图像左半部分与右半部分以图像垂直中轴线为中心进行对换;而垂直镜像则是将图像上半部分和下半部分以图像水平中轴线为中心轴进行对换。
水平镜像变换公式为:
水平镜像变换公式
逆矩阵为:
水平镜像变换公式
垂直镜像变换公式为:
垂直镜像变换公式
逆矩阵为:
垂直镜像变换公式
另一种统一的矩阵表达式为:
镜像变换公式
其中,图像宽度width,图像高度height。
3)转置变换:
图像转置是将图像像素的x坐标与y坐标互换,图像的宽高也会互换。变换公式:
转置变换公式
转置变换的逆变换具有相同形式。
4)缩放变换:
指图像大小按照指定的比率放大或缩小。假设图像x轴方向的缩放比率Sx,y轴方向的缩放比率Sy,相应的变换表达式为:
缩放变换公式
逆运算为:
缩放变换公式
另一种矩阵表达式为:
缩放变换公式
其中,zoomX和zoomY是水平x方向和垂直y方向的缩小和放大倍数。
直接根据缩放公式计算得到的目标图像中,某些映射原坐标可能不是整数,因此必须进行近似处理,需要通过插值算法来计算。
5)错切变换:
也称剪切变换,矩阵形式为:
错切变换公式
其中,shx和shy为错切变换的参数。
6)旋转变换:
以图像中心为原点,将图像上的所有点都旋转一个相同的角度。用矩阵表示为:
旋转变换公式
或者表示为:
旋转变换公式
其逆变换就是旋转角度-ɑ。

2. 一般图像旋转:

1)仿射变换组合的方法:
将图像围绕某一指定点旋转一定角度,操作步骤是先要进行坐标系平移,再以新的坐标原点为中心旋转,之后将新原点平移回原坐标系的原点。平移使用仿射变换的平移变换方法,以原点为中心的旋转则使用仿射变换的旋转变换方法。
旋转前中心坐标(a0,b0),旋转后中心坐标为(a1,b1),旋转ɑ角度后的新坐标,使用矩阵:
旋转变换公式
旋转通常也会改变图像大小,可以把转出显示区域的图像截去,也可以改变输出图像的大小以扩展显示范围。
2)极坐标变换:
将原图像的像素点的坐标在极坐标中表示并进行旋转变换,这样就可以将直角坐标系中的旋转转换为极坐标系中的平移,然后再进行极坐标逆变换,就可得到旋转图像。
直角坐标系到极坐标系的正反变换公式为:
直角坐标系到极坐标系的正反变换公式

3. 图像整倍数放大:

如果对图像整倍数放大,对像素灰度的计算分两步,比如放大因子是2,第一步将输入图像转换成一个数组,其中行和列中任两个原始数据间都加入0;第二步是将插入0的图像与卷积核进行卷积。2×2、3×3、4×4、5×5的卷积核分别为:
图像整倍数放大卷积核
对更大的核,考虑到计算量,一般不用卷积,而是采用频域滤波来实现。

4. 透视变换:

透视变换Perspective Transformation是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使透视面绕透视轴旋转某一角度,仍能保持透视面上投影几何图形不变的变换。透视变换有8个未知参数,需要4个点对来求解。公式:
透视变换
其中,T1表示图像旋转缩放等线性变换,T2表示图像平移变换,T3表示产生图像透视变换。由此可见,仿射变换是透视变换的一种特例。
坐标计算公式:
透视变换坐标计算公式
可见,根据透视矩阵即可对一幅图像中的任意点做透视变换;如果给定4个点,也可以求得透视变换矩阵。

5. 反距离加权插值变形:

反距离加权插值变形Inverse Distance Weighted Interpolation Algorithm简称为IDW插值算法。通俗地讲,就是根据给定的控制点和控制点的位移矢量,来计算控制点对周围像素的反距离加权权重影响,从而实现图像中每一点的位移。
  ⑴  输入控制点pi,输出控制点qi,变形算法就是寻找变形函数f,使得f(pi)=qi
  ⑵  IDW插值算法要求当前点距离控制点越近受控制点影响越大,对应权重也越大。距离权重定义为:
IDW插值算法权重定义
其中权重满足条件:
IDW插值算法权重满足条件
  ⑶  权重w定义为:
IDW插值算法权重定义
其中,d表示距离,可取欧式距离:
欧式距离
D表示线性变换。
上面是最基础的IDW插值算法,可以用来实现瘦脸胖脸效果。取人脸矩形框4个定位点和人脸边缘5个定位点,人脸矩形框4个点保持不变,仅对人脸边缘进行调整。实际应用中,点位信息可以通过人脸特征点检测获取。IDW插值算法比较简单,计算也比较快。

6. 特征线变形算法:

假设原图S,变形后目标图Dest,输入特征线点位,即线的起点和终点为P'和Q',输出特征点位P和Q。对于图中任意一点,在原图中对应点X'的计算公式:
特征线变形算法
这里是在原图中找到X的对应点X',采用这种逆向映射方式是为了保证目标图中所有像素位置都可以通过插值计算得到合适的对应点,而不会出现空缺。
为了寻找X',同时保留一定相似性,其中计算了点X和特征点线PQ的位置比例关系,构建了二维uv坐标,也就是原图中寻找保证u和v比例关系不变的点,即为X'。计算得到的X'一般非整数,而是带小数点,因此需要进行插值计算。
上述算法是基于单一特征线,也就是用两个输入点和两个输出点进行的图像变形约束。对于多特征线,可以通过加权平均来解决。
  ⑴  假设两条特征线P1Q1和P2Q2,输出两条特征线为P'1Q'1和P'2Q'2
  ⑵  根据目标图中点X,结合P1Q1和P'1Q'1使用单一特征线约束计算它在原图中的位置X'1
  ⑶  根据目标图中点X,结合P2Q2和P'2Q'2使用单一特征线约束计算它在原图中的位置X'2
  ⑷  计算X与线段P1Q1的距离权重w1,X与线段P2Q2的距离权重w2。距离权重公式:
特征线变形算法距离权重公式
其中,length表示线段长度,dist表示点X到线段的最短距离,a、b、p为常数,推荐范围:a>0, b∈[0.5, 2], p∈[0, 1]
  ⑸  计算X':
特征线变形算法公式
计算得到的X'一般非整数,而是带小数点,因此需要进行插值计算。
使用图像特征线变形算法可以进行瘦脸胖脸变形,一般使用8条特征线,其中4条为人脸框的4条边,另外4条分别为人脸脸庞边缘线。瘦脸胖脸只需对脸庞边缘进行图像变形,在输出8条线中,只对人脸边缘线进行位移调整。

7. MLS变形算法:

MLS也称移动最小二乘变形算法,相对效果比较好。MLS的输入pi和输出qi分别为一组移动前的点位和移动后的点位,需要构建一个变形函数f。对于图像中任意点v,满足条件:
  ·  f(pi)=qi,输入控制点经过f变换后与输出控制点qi重合
  ·  f可以产生平滑的变形效果
  ·  如果pi=qi,输入控制点与输出控制点相同,则图像不变形
基于上面三点要求,定义f(v)=lv(v),lv(v)定义:
MLS变形算法
对于图中任意一点v,MLS变形要解决的是最优变形函数lv(v),使得能量E最小。E的定义:
MLS最优变形函数
定义三种变形方式来得到对应的M:仿射变形、相似变形、网格变形,其中仿射变形速度最快,而相似变形和网格变形效果好。
⑴ 仿射变形Affine deformation:
仿射变形MLS变形函数
⑵ 相似变形Similarity deformation:
相似变形MLS变形函数
⑶ 网格变形Rigid deformation:
网格变形MLS变形函数
有了上面的三种变形及其对应的M和f,就可以分别用三种方式来对图像中的每个像素进行MLS变形处理了。但如果对每个像素都进行处理,会耗时太多,所以将图像按照固定的gridSize划分为N个网格,对每个网格的定点进行变形处理,对于非网格像素则根据网格定点进行插值,这样可使速度提升。
2013年有人提出了改进的MRLS算法,不再依赖网格大小选择,在控制点较少(小于10)的情况下速度较快。

8. 三角剖分变形算法:

三角剖分变形算法,先把图像进行三角剖分,划分为一个个三角形切片,然后对每个三角形进行简单的仿射变换,进而达到变形效果。这种算法也正是图形渲染中使用的三角片渲染技术。算法逻辑:
  ⑴  以9个控制点为输入,按照9个点对图像三角剖分,得到三角形数组,记为Tin(i)
  ⑵  按照输出9个点对图像三角剖分,得到三角形数组,记为Tout(i)
  ⑶  对于一组三角形,计算Tin(i)3个定点到Tout(i)3个定点的仿射变换,得到仿射矩阵H(i)
  ⑷  根据H(i)将原图对应三角形内部的像素仿射变换到目标相应的三角形内部
  ⑸  遍历所有三角形,对每组三角形执行上面两个步骤,即可得到最终的变形效果
由于算法仅仅使用了仿射变换,对全图进行扫描处理,因此速度很快,对1000×1000像素大小图片也可以进行实时处理。实用中也可以逆向处理,从目标三角形映射到原图三角形。

三、图像倾斜与校正:

图像很容易出现倾斜现象,因为常常需要对此进行检测和校正,这里是对二值化图像处理。

1. Hough变换:

Hough变换可用于判别直线。经过点(x,y)的直线可用等式y=mx+c表示。在Hough空间使用参数(ρ,θ)来表示经过点(x,y)的直线:
Hough变换
其中,ρ为原点到直线的距离,θ为点(x,y)和原点构成向量的夹角。因此,对于经过图像上任意一点的直线,在Hough空间都表示为一条曲线。如果在直角坐标系中的点共线,那么在Hough空间中对应的曲线必然相交于同一个点。利用Hough实现倾角检测和校正的算法:
  ⑴  假设倾斜角均为锐角,输入二值图像,左下角坐标(R1,C1),右上角坐标(R2,C2)
  ⑵  距离变量D的取值范围为[0,d],d为R2与C2的平方和的平方根
  ⑶  设置一个投票矩阵T(D,θ)
  ⑷  初始化投票矩阵,参数D设步长0.1,参数θ设步长0.2,将对应的T(D,θ)初始化为0
  ⑸  对图像中每一个值为0的像素,分别计算不同θ下的距离D,将对应的T(D,θ)值加1
  ⑹  找到投票矩阵中最大值对应的θ,这对应着所有Hough空间曲线共同相交最多的点,即该点对应的是输入图像中的一条直线,对应的θ即为直线的斜率,也就是输入图像的倾斜角

2. Radon变换:

以线积分的形式将图像空间投影到(s,θ)空间,与Hough变换有相似之处。
Radon变换
算法流程:
  ⑴  对输入图像二值化处理
  ⑵  使用Sobel边界检测算法找到边缘。Sobel有横向和纵向两个模板,对图像中每个点,梯度估计为这两个模板卷积值的平方和的平方根
  ⑶  进行Radon变换,投影到(s,θ)
  ⑷  找到g(s,θ)的最大值和对应角度。如图像中包含一条直线,沿着这条直线的积分值最大
  ⑸  将弧度转为角度的斜率

3. 基于PCA的方法:

需要计算对倾斜角度分布具有最大影响的特征向量,即分布的主分量,因此首先需要将黑色像素点(前景)映射为二维向量,使每个像素点与相同坐标的二维向量匹配,并对每个维度减去其对应强度的均值,然后计算向量的协方差矩阵:
PCA主成分分析
其中,X和Y分别表示二维向量在两个维度的集合,n为集合X和Y的元素个数,Xi为集合X的第i个元素,为其均值。

4. 空间几何坐标变换校正:

使用空间几何坐标变换方法进行校正。用二项式表示:
空间几何坐标变换二项式表示
式中有12个未知参数,要有6对同名像素坐标已知,根据最小二乘法求解系数,然后就可以用来校正几何失真的图像。

5. 图像几何畸变的校正:

任何一种几何失真,都可以用原始图像坐标与畸变图像坐标之间的关系加以描述。假设原图像坐标(x,y),畸变后坐标(x',y'),两坐标之间的关系可用下列方程表示:
原始图像坐标与畸变图像坐标之间的关系
当变换关系h1和h2未知情况下,可用事先选取控制点的方法对图像进行校正。在原图中选取3个已知点(x1,y1)、(x2,y2)、(x3,y3),图像畸变后它们在畸变图像中的坐标分别变成(x'1,y'1)、(x'2,y'2)、(x'3,y'3)。假设这种几何畸变的新旧坐标之间满足线性关系,方程为:
原始图像坐标与畸变图像坐标之间的关系
或写成矩阵形式:HA=B
原始图像坐标与畸变图像坐标之间的关系
解此方程组可获得一组唯一的系数。
假设在整幅图像各处畸变规律相同,那么就可以逐点把对应于(x,y)的解(x',y')的灰度f(x',y')赋予g(x,y)。

四、图像插值:

图像进行几何变换,特别是进行缩放时,需要一个用于灰度级的插值算法。因为一般情况下,输入坐标的位置坐标为整数,而变换后输出图像的位置坐标为非整数,反之也如此。
实现几何运算时有向前映射法和向后映射法两种。向前映射法是将输入图像的灰度一个像素一个像素地转移到输出图像中,即从原图像坐标计算出输出图像坐标。
向后映射法是向前映射变换的逆,即输出像素一个个地映射回输入图像中。如果一个输出像素映射到的不是输入图像的采样栅格的整数坐标处的像素点,则其灰度值就需要基于整数坐标的灰度值进行判断,这就是插值。常用的插值算法有最近邻插值、双线性插值和双三次插值等。

1. 最近邻插值:

这是最简单的插值算法,输出像素的值为输入图像中与其最邻近的采样点的像素值。表示为:
最近邻插值
对于反向变换得到的一个浮点坐标,对齐简单取整,得到一个整数型坐标,对应的像素值就是目标像素的像素值。这种方法得到的图像质量不高,产生人为加工的痕迹。
对于缩放图像,设图像分别在i轴方向和j轴方向按比例放大Si和Sj倍,又设放大图像中的像素点(i2,j2)与原图中的点(i1,j1)对应,则关系式为:i1=i2/Si,j1=j2/Sj。
一般地,坐标不是整数,所以必然落在4个坐标为整数的点之间,设这4个整数点分别是(i, j)、(i+1, j)、(i, j+1)、(i+1, j+1),点p(x1, y1)的坐标选取与它最邻近点的坐标,如当u<1/2及v<1/2时,p(x1, y1)坐标选取(i, j),这就是缩放图像的最邻近插值算法。

2. 双线性插值:

又称为一阶插值,是线性插值扩展到二维的应用,线性插值是指根据两个点的值线性地确定位于这两个点连线上的某一点的值。使用这种方法,输出像素的值为输入图像中距离它最近的2x2邻域内采样点像素灰度值的加权平均。
双线性插值基于对插值像素周围4个源像素点值与之距离权重为考量依据,计算得到的像素点的像素值。插值公式如下:
双线性插值
式中,矩形4个角点像素点分别为f(i,j)、f(i+1,j)、f(i,j+1)、f(i+1,j+1),得到的像素点小数坐标为f(i+u,j+v)。因为距离f(i,j)越远权重越小,所以权重表示为(1-u)和(1-v)。
操作步骤为:获取源图像像素数组,根据放缩比率获得目标图像的宽和高;循环目标图像上的每个像素,根据坐标寻找其在源图像中的4个相邻像素;根据小数部分坐标计算得到的像素值即为目标像素像素值。
也可根据输出图像宽度和高度,将图像的宽度和高度均分,来确定输出图像的灰度值。输出图像中任意一点(x,y)的灰度值由输入图像中4个点(a,b)、(a+1,b)、(a,b+1)和(a+1,b+1)的灰度值来确定。其中a和b的值为:
双线性插值
像素点(x,y)的灰度值为:
双线性插值
其中,
双线性插值
另外一种算法:假设单位正方形的顶点坐标分别为f(0,0)、f(1,0)、f(0,1)、f(1,1),对正方形中任意一点f(x,y):
双线性插值
双线性插值具有抗锯齿功能,是最简单和常见的图像放缩算法。但这种双线性插值计算量大,没有考虑边缘和图像的梯度变化,具有低通滤波性质,会使图像轮廓在一定程度上模糊。
线性插值的假设是原图的灰度在两个像素之间是线性变化的,一般情况下双线性插值都能取得不错的效果,更精确的方法是采用曲线插值,即认为像素之间的灰度变化规律符合某种曲线方程,但也使处理的计算量加大。

3. 三次插值:

双线性插值的平滑左右会使图像的细节退化,而且斜率的不连续性导致产生不希望的结果,可以通过高阶插值来弥补。对于一个频率受限的连续信号来说,Sinc(x)是理想的插值函数,为了计算一个离散函数g(x)在x0处的插值,先将函数Sinc移到x0处,然后和所有样本值g(u)相乘,再将结果相加起来,即g(u)和Sinc(x)进行卷积运算,因此连续函数在x0处重建值是:
Sinc(x)理想的插值函数
其中*表示卷积运算。如果离散信号g(u)的长度有限,为N,须将其假设为周期性的,即g(u)=g(u+kN)。在这种情况下,上式可以修改为:
Sinc(x)理想的插值函数
可以看出,离散函数g(u)在位置x0处的理想插值不只与一些邻近的样本值有关,而是和g(u)的无限多个值有关,其权值随着与给定插值点x0距离的增大连续减小。其中Sinc(x)为:
Sinc(x)理想的插值函数
然而在实际应用中,Sinc函数不适合做插值内核,一是因为其无限延伸性,二是缓慢衰减性带来振铃等视觉干扰。
一个有用的插值函数必须是一个低通滤波器,一方面能够保持最大信号带宽的前提下带来最小的模糊效应,另一方面又能够对急剧的信号变化进行很好的重建。Sinc函数是一个理想的低通滤波器,可以保持最大带宽和信号连续性,但在信号过渡部分表现很差;而最邻近插值可以很好地处理阶跃和冲击信号,但是在样本之间重建一个连续信号通常也不成功。因此插值函数的设计始终要涉及一个折中问题,其插值结果的质量取决于特定的应用场合和主观评价。一些插值函数应用截短之后的Sinc函数或者Sinc函数的近似作为内核,使得卷积核更加紧凑,而且降低了振铃现象,经常使用的是三次插值,卷积核定义为分段的三次多项式:
三次插值使用了如下的三次多项式来逼近理论上的最佳插值函数sin(x)/x::
三次插值
上式中,|x|是周围像素沿x方向与原点的距离。待求像素(x,y)的灰度值由其周围16个点的灰度值加权插值得到,公式为:
三次插值
其中:
三次插值
更普遍的三次插值公式为:
三次插值
信号控制参数a用来调整函数的倾斜程度,推荐使用a=1,也即前面的公式,但此时在图像边缘表现出很强的过冲,并且在信号的连续部分有很强的涟漪效应。而当a=0.5时,得到的表达式对应于CatMull-Rom样条。效果要好得多,尤其是在平滑的信号区域。
三次插值延伸范围较小,计算简单,通常用于光栅显示中,在允许任意比例缩放的同时,较好地保持了图像细节。因为三次插值内核是一个分段三次多项式,在计算机图形学中也叫三次样条。

4. 样条插值:

样条函数的一般形式含有两个控制参数:
样条函数
函数的一阶和二阶导数在任何地方都是连续的,因此轨迹不会存在任何不连续性,角点和曲率也不会急剧变化。当b=0时,函数确定了一个一维系列函数基样条,和三次插值函数相等。
样条函数有三个特例,S(x,0.5,0)为CatMull-Rom样条,S(x,0,1)为三次B样条,S(x,1/3,1/3)为米切尔-奈特拉瓦里函数。
① CatMull-Rom插值:
将控制参数设为a=0.5和b=0,函数就称为CatMull-Rom样条:
CatMull-Rom样条函数
CatMull-Rom插值重建出的结果在锐度方面和三次插值相似,但在平滑信号区域的效果明显要好很多。
② 三次B样条函数:
当参数a=0和b=1时,对应函数为:
三次B样条函数
该函数在任意地方都是正的,当用作插值内核时会产生一个类似于高斯平滑滤波器的平滑效果,没有振铃。利用该方法重建的函数不能通过所有的离散样本点,因此利用三次B样条不能称为插值,只能称为信号的近似。
③ 米切尔-奈特拉瓦里函数:
当参数a=1/3和b=1/3时,对应函数为:
米切尔-奈特拉瓦里函数
这个函数是CatMull-Rom样条和三次B样条的加权和,这个方法是一个很好的折中,具有很小的过冲量、很高的边缘锐度,并在平滑区域有很好的信号连续性。由于得到的函数不穿过所有原始样本点,因此米切尔-奈特拉瓦里方法也是一个近似。

5. 双立方插值:

是一种高精度的插值算法,采样像素周围16个源像素值,然后根据权重系数进行计算。双立方插值基于三次多项式插值公式:
双立方插值
其中,p0、p1、p2、p3为同排的4个邻近点。对于二维图像,需要使用16个邻近像素点:
双立方插值
其中,x、y表示采样点G的小数部分坐标。这种插值称为双立方blur版本,图像有模糊。
双立方插值还有一个sharpen版本,是基于CatMull-Rom采样实现,数学表达式为:
双立方的sharpen版本
双立方插值,可以用简化数学公式计算16个像素的权值系数与其对应像素值的乘积:
双立方的sharpen版本
其中a、b分别为采样插值点的小数部分坐标,P(x,y)为源像素值,Rc为插值采样权值计算公式,指CatMull-Rom方法。这种算法的关键是计算CatMull-Rom权重。

6. Lanczos采样插值算法:

Lanczos插值属于加窗的Sinc函数方法,主要用于在数字信号之间进行插值,它基于Lanczos核与窗口两个参数来计算采样值,是基于sin函数值计算权重。数学表达式:
加窗的Sinc函数
Lanczos插值的特殊窗口函数定义为:
Lanczos插值的窗口函数
其中a表示滤波器的阶数。窗口函数也是一个截短的Sinc函数,将窗口函数和Sinc函数相乘,可以得到一维插值内核:
Lanczos插值函数
阶数a=2,3的Lanczos滤波器在图像处理中经常使用,相应的窗口函数为:
阶数a=2,3的Lanczos插值函数
将窗口函数和Sinc函数相乘,可以得到一维插值内核:
阶数a=2,3的Lanczos内核
a=2的2阶插值内核与CatMull-Rom很像,但在平滑信号区域相对较差并在连续高幅值区域引进隆起;a=3的3阶插值内核降低了2阶的人工痕迹,但在边缘有额外的过冲和涟漪效应。
计算流程为:
  ⑴  计算图像放缩比例ratio
  ⑵  计算采样像素,计算整数与浮点数坐标
  ⑶  计算Lanczos窗口中每个源像素点权重
  ⑷  根据权重计算加权平均值得到新像素值
  ⑸  对每个采样点重复前面4步,得到结果像素数组
上述算法中涉及计算权重x,取像素点坐标所在行与列的算术平方根后的值,除以常量1000得到权重x,其中的1000是计算权重x时使用的经验值。
Lanczos插值与立法、CatMull-Rom和米切尔-奈特拉瓦里方法方法相比,并不具有优势。

7. K次放大K-times zooming:

可以实现任意比例的放大,其中K为放大因子factor。实现步骤为:
  ⑴  取两个相邻像素,以两个像素值的差的绝对值OP
  ⑵  对OP除以放大因子K,得到步长S
  ⑶  将S加到两个像素中像素值较小的值上,得到的新像素值插到两个像素之间
  ⑷  继续对新得到的像素值加上步长,生成新像素,直到新像素个数达到K-1个
  ⑸  重复上述步骤,在行列方向即可得到放大之后的图像采样

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659