特征缩放

2024-06-06

特征缩放(通用7篇)

特征缩放 篇1

摘要:智能设备的多样化,使不同设备的播放器在播放同一H.264/AVC视频时,需要针对显示器的分辨力先将解码图像进行缩放,再输出到显示器。而放大算法的复杂度往往会影响智能设备播放视频的实时性。针对这一问题,提出一种新的基于H.264/AVC视频解码图像的快速缩放方法。该方法的创新性在于将图像缩放操作和解码过程联系起来,并使缩放处理单位分解到宏块级,从而省去对特定的跳过模式宏块的缩放处理。实验表明,与传统方法相比,该方法在图像质量高度保真的情况下,对放大速度的提升可高达150%。

关键词:智能设备,H.264/AVC标准,图像缩放,快速方法,跳过宏块

0引言

随着智能设备[1]的日益多样化,不同设备上的视频播放器在播放同一视频时,对压缩视频流进行解码之后,往往需要针对终端显示器的分辨力,先将图像进行缩小或放大,再输出到显示器[2]。

H. 264 / AVC[3,4,5]是目前主流的视频编解码标准,该标准的解 码操作远 比传统的 压缩标准 复杂[6],需要占据解码终端的大量资源; 加上图像缩放算法( 特别是放大算法) 本身也较为复杂,并且对视频流的处理必须达到每秒25帧以上的速率,使得许多视频播放终端难以满足实时缩放要求。

因此,研究H. 264 /AVC解码后的图像缩放,寻找更为快速的替代方法,对于在资源受限的智能设备上实时播放H. 264 /AVC视频,具有重要的应用价值。

1传统H.264/AVC视频播放流程

一般视频播放器对H. 264 /AVC视频流的处理,可以用如图1所示的流程来表述。

图1中,解码器负责对压缩码流进行标准规定的解码操作,缩放模块将解码器输出的YUV格式数据与目标显示器的分辨力进行适配并缩放,显示模块则把缩放模块送来的数据转换为RGB格式并送入显示器进行显示。

从图1不难看出,传统视频播放器在宏观上将解码器和缩放模块互相孤立: 总是先从压缩码流中解出一幅图像,再将整幅图像送入缩放模块进行统一处理。也就是说,传统播放器的缩放模块,其输入、输出单位是一幅完整的图像。

这种孤立看待各处理模块的方式,使播放器在缩放时对整幅图像所有像素一视同仁,执行相同的操作,摒弃了解码器已经获取的图像不同位置像素的相关 信息,因而难以 提高缩放 操作的执 行效率[7]。

2H.264/AVC标准的跳过模式

与以往的其他视频压缩标准一样,H. 264 /AVC对图像进行压缩编码的单位是———宏块。

为了降低码率,编码器并不是对当前宏块的像素值直接编码,而是对当前宏块与参考宏块之间的残差进行编码。根据参考宏块与当前宏块是否位于同一帧图像之内,预测模式可以分为帧内预测和帧间预测。跳过( SKIP) 模式是一种帧间预测模式。 H. 264 / AVC规定,一个宏块要以跳过模式进行编码,必须同时满足以下2个条件[8]:

( 1) 运动矢量( MV) 为零( 即当前宏块在当前帧中的位置,与参考宏块在参考帧中的位置完全相同) ,或MV等于运动矢量预测值( MVP,由已解码的宏块计算得到) 。

( 2) 经过变换和量化后的系数全部为零。

条件( 1) 表明,SKIP宏块相对于参考宏块的运动情况为: 没有任何运动,或者运动了MVP。对于后者,解码器在收到SKIP宏块的头信息后,需要对参考宏块进行运动补偿才能得到当前宏块,而对于前者,解码器直接视参考宏块为当前宏块,无需进行任何运动补偿操作。

条件( 2) 表明,SKIP宏块与其参考宏块完全相同。利用这一特性,编码时对SKIP宏块完全不需要发送任何图像残差数据,从而节约了大量码率和编码时间。

3基于SKIP宏块特征的H.264/AVC图像缩放快速方法

3.1加速缩放操作的思路

在H. 264 /AVC视频流中通常存在大量SKIP宏块,特别是在内容为低、中等运动程度的视频中, 这种情况尤为明显[9]。

研究发现: 在这些SKIP宏块中,绝大多数宏块的MV为零。

如前所述,若一SKIP宏块的MV为零 ( 下称MVZ_SKIP宏块) ,则表明该宏块:

( 1 ) 位置上,相对于参考宏块没有任何运动 。

( 2 ) 图像内容上,与参考宏块完全相同 。

这就为加速解码后的缩放操作提供了思路: 既然MVZ_SKIP宏块与其参考宏块在位置上、内容上毫无二致,那么就无需对这种宏块进行缩放操作,而只须复制其参考宏块的缩放结果即可。

这样一来,借助MVZ_SKIP宏块在视频流中所占的统计优势,可以节约大量的缩放处理时间,达到加速缩放操作的目的。

3.2打破常规的播放流程

要实现3. 1节所述思路,必须将解码器所获得的各宏块的模式信息与缩放操作有机结合起来。这就需要打破图1所示的传统播放流程,改变图像缩放模块的输入输出单位———由传统的以整幅图像为输入、输出单位,改为以宏块为单位。

这样一来,图像缩放模块每检测到一个MVZ_ SKIP宏块,就可跳过其缩放操作,从而节省对图像进行缩放的时间。

3.3新方法的流程图和具体步骤

3.3.1流程图

基于上述MVZ_SKIP宏块特征的H. 264 /AVC解码图像缩放快速方法,其详细流程如图2所示。

3.3.2具体步骤

图1中所述流程对应的具体步骤如下:

( 1) 解码阶段: 除执行常规解码操作外,还需要记录下各宏块的类型,并且对于SKIP宏块,需要记录其位置和MV信息。

( 2) 在缩放阶段,根据宏块特点,分2种情况进行处理。

1对于非MVZ_SKIP宏块( 即非SKIP,或者虽然是SKIP但MV非零的宏块) ,进行常规的缩放操作。

2对于MVZ_SKIP宏块,则直接复制参考宏块所对应的缩放后的YUV数据,作为当前宏块缩放的结果。

4实验结果

为便于表述,将第3节所述新方法记为N方法,而将第2节所述的传统播放方法命名为T方法。 对2种方法进行播放速度的对比实验,验证N方法的有效性。

在H. 264 /AVC标准测试序列中,选取低、中等运动程度的测试视频claire、paris和silent作为实验数据,先使用编码器对上述3个测试视频进行压缩( 设定量化参数QP为26) ,然后用T和N两种方法分别进行“解码—放大2倍”操作( 放大算法采用线性插值算法[10]) ,对比两种方法的播放速度。

执行对比实验程序的计算机采用Intel Celeron M 1. 5GHz CPU,896M内存。

实验结果如表1( 为减小误差,表中标注的耗时是10次操作的平均值) 所示。

由表1不难看出:

( 1) 在图像质量方面: 采用N方法放大输出的图像,相对于传统方法放大输出的图像,Y分量的平均PSNR高达60d B以上,说明二者高度相似,即采用N方法输出的图像保真度高。

( 2) 在执行时 间上,N方法比传 统方法快114. 78% ~ 150. 92% ,表明N方法的执行速度有明显优势。

综上所述,N方法在输出高度保真的放大图像的前提下,放大速度最多可提高150% 。

5结束语

文中提出一种基于H. 264 /AVC视频流中SKIP宏块特征的图像缩放快速处理方法。该方法将图像缩放操作和视频流的解码过程相互联系,并且把缩放操作的单位分解到宏块级,从而省去对MV为零的SKIP模式宏块的缩放处理。

实验表明,与传统方法相比,新方法在图像质量高度保真的前提下,对放大速度的提升可以高达150% ,因而非常适用于在资源受限的智能设备上实时播放H. 264 /AVC视频。

特征缩放 篇2

关键词:图像缩放,宽高比,BufferedImage

1 引言

图像信息是人类传递视觉信息的主要媒介, 在人类的感知中扮演着非常重要的角色。图像的缩放变换是一种比较常见的需求, 在图像处理和计算机图形学中, 图像缩放是指对数字图像的大小进行调整的过程。实际应用中, 经常需要对数字图像进行缩放变换。图像的缩放变换是非平凡的, 在进行缩放处理时, 需要在处理效率和变换后图像的平滑度及清晰度上做出选择。图像缩放变换的方法很多, 以插值算法较为常见。

2 保持图像宽高比的图像缩放

无论在应用中实现哪种插值算法, 都需要程序员对数字图像处理有较多的理解, 其算法的实现也较为复杂。在Java语言中, java.awt.image.Buffered Image[1,2]类实现了get Scaled Instance方法可以方便的用来进行图像的缩放变换。get Scaled Instance方法需要三个参数, 第一个参数指定缩放后图像的宽度, 第二个参数指定缩放后图像的高度, 第三参数指定缩放时使用的算法类型, 可取的类型为SCALE_DEFAULT, SCALE_FAST, SCALE_SMOOTH, SCALE_REPLICATE, SCALE_AREA_AVERAGING。但是get Scaled Instance方法在进行图像缩放变换时若原图像的宽高比与指定的宽高值比不一致, 则不能保持图像纵横比, 会使变换后的图像发生畸变。本文提供一种基于get Scaled Instance方法的简单算法, 可以在进行图像缩放时保持图像纵横比。

2.1 算法设计思想

假设待缩放图像的宽度为src W, 高度为src H, 宽高比为rs。缩放目标宽度为width, 高度为height, 宽高比为rd。图1中可以很容易地看出, 当宽度比rs<=rd时, 变换后图像的高度不能大于目标高度, 因此变换后的图像高度可取目标高度, 变换后图像宽度则应该为目标宽度乘以原图像的宽高比;宽度比rs>rd时, 变换后图像的宽度不能大于目标宽度, 因此变换后的图像宽度可取目标宽度, 变换后的图像实际图像高度等于目标高度除以原图像的宽高比。

由此可得算法步骤:

(1) 取得原图像的宽度和高度, 计算原图像的宽高比;计算目标宽度和高度的宽高比。

(2) 若原图像的宽高比小于等于目标宽高比, 则变换后的图像的实际高度等于目标高度, 而变换后的图像实际图像宽度等于目标宽度乘以原图像的宽高比。若原图像的宽高比大于目标宽高比, 则变换后的图像的实际宽度等于目标宽度, 而变换后的图像实际图像高度等于目标高度除以原图像的宽高比。

(3) 由步骤 (2) 所得宽度和高度对图像进行缩放变换。

2.2 算法实现

由以上设计思想可编写方法如下:

3 结语

文章给出了一种基于Buffered Image.get Scaled Instance方法的保持图像纵横比的图像缩放算法。算法简单, 易于编程实现。

参考文献

[1]Ken Arnold James, Gosling David Holmes.Java程序设计语言[M].北京:人民邮电出版社, 2006.

特征缩放 篇3

数字图像取证技术可以分为主动取证和盲取证两大类。数字水印技术[1,2,3]是主动取证中的主要标志性技术,但这是一种主动取证方法,需要对图像进行预先处理,大大限制了其应用范围。数字图像盲取证技术[4,5]因为其更广泛的应用范围而受到越来越多的重视,盲取证技术不需要预先向图像中加入标识版权的先验信息,而是直接对取自各种来源的数码图像进行真实性和原始性的鉴别。

细缝裁剪( Seam-carving) 方法[6]是由Avidan, Shai提出的一种基于内容的图像缩放技术。这种技术通过计算各个像素的能量值来有目的的选择“细缝”(Seam),通过复制或移除细缝来达到放大或缩小图像的目的。细缝的选择标准决定了复制或移除细缝对图像重要细节的影响最小,从而达到视觉上的失真最小。细缝裁剪技术因其独有的优势而迅速被承认并且大面积使用,比如,该项技术已经加入到Adobe Photoshop CS4中使得一般操作者也能更容易的使用。细缝裁剪技术还可以通过删除经过指定区域的细缝来实现对图像中某个物体的移除而达到篡改的效果。但是迄今为止针对采用细缝裁剪技术进行图像篡改的相应的检测技术还没有被更多的重视和开发。在仅有的文献中,Min Wu提出了一种基于哈希的预测判别方法[7],这是一种主动取证方法, 应用受到一定限制;Fillion C提出了一种融合特征后用于SVM ( Support Vector Machine) 训练的方 法[8],但是识别的准确率和成功率不高。

本文采用提取正常图像和经过细缝裁剪篡改后的图像的马尔科夫特征,并用SVM进行训练,来达到区分正常图像和细缝裁剪篡改图像的目的,实验结果表明本文所提方法取得了良好的的检测效果。

1细缝裁剪方法

细缝裁剪就是通过复制或者移除“细缝”来实现图像缩放的目的,所谓“细缝”是根据能量值来选定的一条竖直方向或水平方向的一条线,以垂直细缝为例,这条线是从上至下的一条曲线,该曲线在图像每一行都有且仅有一个像素,曲线上相邻2个像素之间是八连通的,这保证了是一条连续的曲线。 关于细缝需要说明以下两点:1细缝的选择是基于像素能量的大小来选取,这里选用式(1) 计算所得出的能量值来进行比较选取;2之所以要细缝上相邻像素八连通从而实现整条细缝是一条连续的曲线,而不是直接选取每一行(以垂直细缝为例)的能量值最低的像素直接复制(放大时)或者删除掉(缩小时),是因为每列能量值最小的像素一般分散分布,直接复制或删除这些像素将会产生比较严重的不连续视觉效果,造成很明显的人为失真痕迹。

对于大小为N1× N2大小的图像,用式(2) 定义一条垂直细缝:

式中,某条竖直细缝包含的像素集由s表示。该竖直细缝含有N1个像素,{ai,bi}iN=11表示N1个像素的坐标集((a,b)代表图像中第a行第b列)。

根据式(2),可以用Is= {I(si)}iN=11= {I(i,x( i)}iN=11来表示细缝的所有像素,那么在若干条细缝中,通过式(3)求得在缩放过程中起关键作用的最优细缝, 也就是总能量值最小的细缝:

细缝的查找过程采用动态编程技术实现,从第2行开始对每个像素( i,j) 计算其M( i,j) 的值:

通过式(4)可以看出,首先逐一检查上一行与当前像素八连通的3个相邻像素的能量值,找到值最小的像素,将当前元素能量值与该像素能量值相加作为当前像素的最终能量值,依次按照以上策略进行计算并记录路径,这样当计算到最后一行的时候,该行每个像素的能量值就是某条细缝的能量累加值,通过对最后一行像素的能量值的遍历可以找到总能量值最低的细缝在最后一行像素的位置,通过此像素进行回溯,就可以找到整条细缝,这种能量值最低的细缝将在图像缩放过程中发挥最大的作用。

当图像需要放大时,通过复制最优细缝来实现。 如果细缝中的某个像素是a2,它的复制决定于它附近的2个像素,比如{a1,a2,a3},复制细缝后为{a1b1,b2,a3},b1 、b2通过式(5)求得:

如果a2恰好处在图像的边缘,比如{a1,a2},则复制细缝后为{a1,b,a2},b的值由式(6)求得:

图像通过插值和细缝剪缩放后的效果对比如图1所示。

通过图1可以看出细缝裁剪技术在图像缩放方面体现出的优越性。用插值方法得到的缩放图像对使得图像的细节发生了变形和失真,而使用细缝裁剪方法得到的缩放效果在最大程度上保证了图像细节不发生变化,因此视觉效果最好。

2基于马尔科夫特征的细缝裁剪篡改检测

2. 1特征提取

一般来讲,通过数码设备获取的数字图像,相邻像素之间存在一定的关联关系。细缝裁剪通过细缝的插入和删除来实现图像的缩放,这个过程必然会明显的影响插入或删除细缝相应区域的相邻像素的相关性。

马尔科夫过程可以很好的描述像素间的相关性以及空间上的连续性变化。通过计算图像频域(比如DCT域)的马尔科夫转移概率矩阵,提取相应特征,加以训练,使其能够用以区分正常图像和经过细缝裁剪篡改后图像,具体步骤如下:

1对源图像进行8 × 8块离散余弦变换从而得到DCT系数矩阵。

2 DCT系数矩阵取整,然后取绝对值( 得到矩阵F)。

3计算F的差矩阵( 水平、竖直、对角线、反对角线4个方向):

4设置阈值T(正整数),对Fh、Fv、Fd、Fm中的所有元素值验证,> T或者 < - T,则改为T或者 - T。

5对Fh、Fv、Fd、Fm分别求各自对应方向的转移概率矩阵:

式中,i,j∈{-T,-T +1,-T +2,…0,…,T -2,T -1,T};su, sv表示图像的原始行数和列数,当括号内条件成立时 δ ( ·) = 1,否则 δ( ·) = 0。

6将式(8)所求得的转移概率矩阵的所有元素作为特征。维数为(2T +1) × (2T +1) ×4 =324(T =4)。

2. 2分类训练

由于支持向量机(SVM)[9]在小样本高维数据的分类表现出很好的性能。本文采用使用RBF核的LIBSVM[10,11]。分类过程将所有未经篡改的正常图像标为“- 1”,所有经过细缝裁剪篡改的图像标为“1”,从而将问题转化为一个二值分类问题。 使用LIBSVM首先对混合图像集进行训练,该训练集包含原始图像和篡改图像。将训练的结果用于含正常图像和按各种比例缩放的篡改图像的测试集进行分类测试。

3实验结果分析

实验对灰度图像和彩色图像两大类进行分别测试。针对灰度图像的实验采用在数字图像取证领域最广泛使用的哥伦比亚大学图像库,该图像库由933张正常图片和912张拼接图片组成。由于图像库涵盖了11大类各种纹理情况的图像,因而在此图像库上的实验结果具有很好的可信性。11类图像的具体纹理特征如表1所示。

实验采用11大类共933张正常图片作为正常图像库并针对每一类正常图像使用细缝裁剪技术产生篡改图像库。其中,分别对正常图像进行0. 5、0. 8比例的缩小和1. 2、1. 5比例的放大。共得到包含4 × 933 = 3 732张篡改图像的篡改图像集。包含933张的正常图像集和3 732张的篡改图像集将为SVM的训练和分类测试提供所有需要的图像。图片实例如图2所示。

彩色图像采用CASIA 2. 0,该库包含7 491张正常图像和5 123张篡改图像。图像大小从240 × 160到900 × 600不等,并且包含未压缩图像和不同压缩比例因子的JPEG压缩图像。7 491张正常图像都是自然图像,包含场景、动物和建筑等9大类。图片实例如图3所示。

软件平台采用Matlab R2009a,硬件平台采用Intel E7500 2. 93 GHz,2 G内存的台式机。大量实验表明,差矩阵和转移概率矩阵求取时取T = 4可以达到最好的效果。

针对灰度图像库,对含有正常图像和篡改图像各300幅(随机挑选)的训练集进行训练,然后对11大类图像逐一选取正常和篡改后各100幅图像(随机挑选)分别检测正确率,结果如表2所示。

TPR( True Positive Rate) 代表在所有待检测篡改图像中 正确检出 的比率; TNR ( True Negative Rate) 代表在所有待检测正常图像中正确检出的比率。Accuracy代表所有待检测正常和篡改图像总的正确检出比率。Total代表所有11 × 100 × 2 = 2 200幅测试图像总的检测正确率。

针对彩色图像库,在9大类共7 491张正常图片中,每类随机选取200张图片,共200 × 9 = 1 800张;每类中随机选取50张并用细缝裁剪进行比例为50% 、80% 、120% 和150% 的缩放,共得到50 × 9 × 4 = 1 800张缩放篡改图片; 每类随机选取50张并使用细缝裁剪移除部分图片细节,得到50 × 9 = 450张篡改图片:训练集即由1 800张正常图片和1 800 + 450 = 2 250张篡改图片组成。测试集由所有7 491张正常图片和2部分篡改图片组成:一部分是每类中随机选取200张并按50% 、80% 、120% 和150% 比例缩放后的200 × 9 × 4 = 7 200张;一部分是每类中随机选取50张并用细缝裁剪方法去除部分图像细节的共50 × 9 = 450张。测试结果如表3所示。

从表2和表3可以看出,基于马尔科夫特征的检测方法检测经过细缝裁剪篡改过的图像具有很高的准确率。从表2可以看出,算法针对纹理较强的图像表现出更高的识别准确率,针对平滑图像表现略差,原因是纹理丰富的图像像素间的变化更显著, 体现在相关性上就更强,在转移概率矩阵中也就具有更明显的特征。考虑到篡改图像基本都是纹理较为复杂的图像,所以本算法在实际应用中应该具有很强的分辨识别能力。从表3可以看出,算法在彩色图像库的检测结果比灰度图像库略差,这应该归因于彩色图像库的图像大小变化和不同压缩比例的JPEG图像的影响。

ROC( Receiver Operating Characteristic Curve) 曲线能够直观地反映出算法分类的效果,采用TPR作为纵轴,FPR(被错认为篡改图像正常图像的数目占测试集中所有正常图像的比例)作为横轴。曲线的AUC( Area Under the Curve) 值越高表明分类的效果越好,分类测试所得ROC曲线如图4所示。通过图4可以看出,基于马尔科夫特征的算法ROC曲线有很好的AUC值,在实际分类中会取得很好的 效果。

4结束语

特征缩放 篇4

1 图像缩放概述

图像缩放变换属于图像几何变换的一种类型,图像缩放要实现的就是在输出像素和输入像素之间建立一种映射关系,使得在输出图像的每一个位置均有待输出像素值产生。输出像素和输入像素之间的映射关系可以有两种不同的定义方法: 前向映射和逆向映射[1]。

前向映射将输出像素的坐标定义为输入像素的坐标的函数mf,如式1所示,其中Q[u,v]表示输出像素坐标,I( x,y)表示输入像素坐标。前向映射有两个问题: 1) ,如果对图像进行放大操作,在输出图像中将会有部分像素点没有相对应的输入像素,即产生空洞现象; 2) ,如果对图像进行缩小操作,输出图像中的部分像素点将会对应输入像素中的多个像素点,使得输出出现混乱。

逆向映射将输入像素的坐标定义为输出像素的坐标的函数me,如式( 2) 所示,其中Q[u,v]表示输出像素坐标,I( x,y) 表示输入像素坐标。逆向映射对每一个输出像素逆向映射出对应的输入像素,因此更适合产生输出数据流。当采用逆向映射对图像进行缩放操作时,被逆向映射出的坐标值往往不是整数,为了估计输出的像素值通常要在期望位置处对输入像素值进行重采样,等效于用一个采样插值核对输入的像素值进行加权[1],如式( 3) 所示,其中C( x,y) 表示采样函数,I[x,y]表示输入像素坐标,K[x,y]表示插值内核。

2 图像插值算法的选取

常见的图像插值算法有最近邻内插算法、双线性内插算法、双三次内插算法和B样条插值算法[2]。

最近邻内插算法是最简单的图像插值算法,该算法的原理为直接选取距离期望位置最近的源图像位置的像素值作为输出像素值。该算法丢失了源图像中的大量信息,使得图像变得模糊边缘部分不清晰,放大后有马赛克现象,缩小后有严重失真[3]。

双线性内插算法用与期望位置最近邻的4个像素值估计期望位置的像素值,若用( x,y) 表示期望位置,用Q( x,y) 表示输出像素值,I( x,y) 表示输入像素值,双线性内插算法的赋值公式为

双三次内插算法用期望位置最近邻的16个像素值估计期望位置的像素值。双三次插值算法可分离为分段三次插值核[4],如式( 5) 所示,其中a为自由参数,KKeys( s) 表示插值核为

B样条插值算法的原理是以期望位置为中心利用B样条核对源像素值进行估计从而得出期望像素值。3次B样条核的解析公式为

双三次内插算法主要应用于商业图像编辑程序( 如Adobe Photoshop等) 中,算法复杂度较高。B样条插值算法在使用过程中需要用到矩阵求逆等运算[5],算法复杂度更高。考虑到现实应用场景和FPGA的资源情况,本次设计选用双线性内插算法。

3 基于 FPGA 的双线性内插原理

采用逆向映射计算出的期望位置往往不是整数,设计中把期望位置的坐标分解为整数部分和小数部分。考虑到FPGA不方便进行浮点运算,因此把期望位置的坐标放大256倍( 即左移8位) 后取后8位作为小数部分,如式( 7) 所示。其中( xr,yr) 为整数部分,用以确定源像素点的位置; ( xi,yi) 为小数部分,用以确定各像素点的权重,对各像素点经行加权处理进而估计出期望位置的像素值。双线性内插算法示意图如图1所示,其中阴影部分为期望位置,I( x,y) 为各像素点的像素值。

4 基于 FPGA 实现图像双线性内插算法

该图像缩放模块为全景视频拼接系统的一部分,图像在进行缩放前已经做了去隔行、桶形畸变矫正等预处理操作,经过预处理操作后的视频数据存储在外部DDR2存储器( Double Data Rate 2 SDRAM) 中,在进行图像缩放前各路视频数据已经经过DDR2读取模块读取到FPGA的先入先 出队列( First Input First Output,FIFO) 中进行缓存。

图像缩放的关键是根据映射关系确定读写时序和读写地址。双线性内插算法需要用到期望位置附近的两行视频图像数据,因此利用两组RAM对视频信号进行缓存,用FPGA控制RAM的读写地址,从而可以保证读写地址的正确性。考虑到进行缩放时读写缓存RAM的时序复杂性,对读写时序的控制利用状态机实现,从而可以保证缩放时读写RAM时序的正确性。对图像进行缩放操作可以用4个状态机协同合作来实现,包括写RAM状态机、读RAM状态机、垂直缩放状态机和水平缩放状态机。

1) 写RAM状态机完成对对视频信号进行缓存的两组缓存RAM的写操作。2组RAM具有相同的读写地址,可以保证读取到的视频数据为同一列的数据,对两组RAM进行写操作时利用片选信号,实现两组RAM的乒乓操作。写RAM状态机完成的主要工作是产生写RAM的地址,控制写RAM的时序,控制写RAM的片选信号。写RAM状态机的流程图如图2所示。

2) 读RAM状态机的主要工作是产生读取RAM的地址,对读出RAM的数据个数进行计数从而控制读RAM时序。读RAM状态机的流程图如图3所示。

3) 垂直缩放状态机的主要工作是移动垂直采样窗口,读取FIFO中与期望位置相邻的两行数据并写入RAM中进行缓存,同时计算该两行数据的权重。垂直缩放状态机的流程图如图4所示。

4) 水平缩放状态机的主要工作是: 第一,对缩放后的图像的行像素个数进行计数,产生行结束标志从而控制垂直和水平缩放的时序; 第二,平移水平采样窗口,读取缓存RAM中与期望位置相邻的水平方向上的两个像素点并计算此两点的权重。水平缩放状态机的流程图如图5所示。

基于FPGA的线性内插算法的运算顺序为先进行垂直方向的插值运算,再以垂直方向的插值运算结果为基础进行水平方向的插值运算。插值运算模块的功能框图如图6所示,其中data1_in和data2_in为像素数据输入端口,data1_weight和data2_weight端口分别对应像素数据输入端口的权重。插值运算模块以像素数据以及其对应的权重为基础计算出插值运算后的像素数据data_out。插值运算模块的仿真波形如图7所示,从仿真波形中可以看出在像素数据输入3个时钟后输出插值运算后的像素数据。

上述各模块协调工作可以实现1路视频信号的缩放操作,效果图如图8所示,其中图8a为缩放前的原始图像,图8为放大后的图像,图8c为缩小后的图像。把上述视频图像缩放模块例化出多个,每个模块连接不同的视频数据码流可以实现多路视频信号的缩放处理,2路视频信号的缩放效果图如图9所示,其中图9a为缩放前的原始图像,图9b为放大后的图像,图9c为缩小后的图像。

5 小结

本文基于双线性内插算法在FPGA平台上设计实现的多路视频信号的缩放装置为全景视频拼接系统的一部分,利用FPGA并行处理的优势可以实现多路视频信号的同时缩放操作,从而保证了拼接后视频的实时性。根据美国电子消费品制造协会( Consumer Electronics Association,CEA) 制定的未压缩数字视频标准CEA-861所提供的传输时序,该装置可输出1 080p( 1 920×1 080) 的高清数字视频至数字显示器显示,输出帧率为60 f/s( 帧/秒) 。4路视频信号实现同时缩放的效果图如图10所示。

摘要:基于双线性内插算法,设计改进了一种以FPGA为硬件平台的多路视频信号的图像缩放装置。把与期望位置相邻的两行像素缓存在RAM中,先对垂直方向进行插值运算,再对水平方向进行插值运算。利用FPGA并行处理的优势实现多路视频信号的实时缩放。

特征缩放 篇5

1 常用的图像缩放技术

图像的插值过程就是根据已知的观测点像素值建立起一个简单、连续的解析模型,以便能够让该模型预知或者推测物理量在非观测点处的特性。在实际中我们最广泛采用的插值方法有最邻近插值、双线性插值、双立方插值。

1.1 最邻近插值

这是一种最简单的插值方法,原理就是令待插入点像素等于最靠近的临近点的像素值。

其中,f(i,j)代表位于(i,j)位置的原图像像素点的像素值;u、v分别表示待插值点距最相邻像素点在水平和竖直方向的距离。

1.2 双线性插值

这种方法主要利用映射点在输入图像的4个邻点的灰度值对映射点进行插值,即待插点处的数值用离待插点最近的四个点的值加权求得。双线性插值的原理图如下:

经计算得到插值公式(2):

1.3 双三次方插值1

双三次方差值(又称立方卷积插值),该方法是通过计算与待插值的像素点相邻近的16个像素点的像素值,从而得到待插值的像素值。这种方法需要以插值基函数为基础进行运算,常用的插值基函数如下图所示:

图2中的基函数的表达式如下:

如此用三次三项式s(t)对sin C函数进行拟合,推出双立方插值的公式(3),如下:

1.4 不同插值方法的比较

图3是三种插值的效果图。

表1是三种插值的优缺点比较结果:

从图3和表1所示可以看出,双立方插值的效果最好,因此本文的算法设计建立在双立方插值的基础之上。

2 视频图像缩放的算法流程

2.1 视频图像缩放处理流程

目前计算机与电视机彩色显示器显示彩色都是采用R、G、B相加混色的原理。因此我们在处理视频图像缩放之前,首先将用摄像机或者其他设备摄得的彩色视频图像信号经过分色、分别放大校正后得到RGB图像2,然后再进行如图4的分析。

图4是视频图像信号经过摄像摄得的并经过相关处理之后的算法流程3,因为RGB颜色空间适合于显示系统,却并不适合于图像处理,所以通过(1)中RGBto YUV模块将RGB信号转换成YUV信号,YUV是被欧洲电视系统所采用的一种颜色编码方法,Y表示明亮度(Luminance),也就是灰阶值;U、V表示的则是色度(Chrominance),描述影像色彩及饱和度。其中YUV与RGB信号转换的如公式(4)所示:

图4中(2)(3)步骤中提到的子函数Compute Resize(),实现的主要功能是计算插值的像素位置和相应的系数。

图4中(2)(3)(4)步骤中各个功能函数组成函数Bicubic Resize(),完成的主要功能就是利用双立方插值算法生成插值系数,完成图像横向和纵向的缩小或者放大,然后输出处理后的缩放图像。

2.2 双立方插值算法

在这里我们设计一种基于双立方插值的算法并且能够运用在视频图像缩放中,具体的流程图如下:

如图5所示,其中(i,j)代表目标像素,i代表行数,j代表列数,设置他们的初始值为0,它在源图像中的邻近像素坐标为(x,y)。从RGBto YUV模块传送的源图像数据,得到宽w和高h,然后第一步根据宽和高的缩放比例的倒数Sx、Sy得到目标图像的宽wd=w/Sx、高hd=h/Sy。

首先因为设置了初始值,i的值小于宽度hd,对横向进行一次缩放,j加1,如此循环一直到j不满足条件,即j>=宽度wd;此时,i的值开始加1,当i<高度hd时,进行纵向的缩放,如此循环到i不满足条件,即i的值等于hd时,此时说明已经达到理想的缩放结果,直接输出缩放出的目标图像。

在横向和纵向的缩放过程中会计算出相对应的横向和纵向偏移量fu和fv,以及该行所在内存首地址:原始起始地址+(int)(i*Sy)*(一行数据的宽度),各行横向四点的地址为:各行起始地址+(int)(i*Sy)*(一个像素的字节数)。这样我们就求出了待插值的位置。我们设置一个缓存空间来存储相邻16个像素相对于源像素的横向和纵向的偏移量。在求横纵向偏移量的时候,我们要注意最后一行和最后一列的处理。

根据sin C基函数并经过计算求得双立方插值的插值系数(权重)为公式(5):

公式(2-2)中x为插值点据各抽头点的距离(注意:距离有正负之别,左边为负、右边为正)。在进行横向缩放的时候,在横向上进行四个抽头与对应系数的乘累加,当横向缩放完成后,再将纵向抽头及其系数进行乘累加。

最后将经过处理的值输出并结束。

3 算法的硬件实现

本文设计主要从两方面来节省硬件资源:第一,采用从水平和垂直方向这两个方向进行缩放功能设计的思路,每个单元输出的插值点只和输入的四个点有关系,这样以来,双立方插值算法得以实现,并且节约了硬件上的资源。第二,我们在对图像进行操作时,有时会出现成比例缩放的特殊情况,比如长和宽都缩小为原来的一半,或者都放大一倍的操作,因此在这里我们设计两个模块,当遇到这种情况时,直接对它们整体进行缩放,而不用再在水平和垂直方向分别进行两次缩放,这样做的好处是可以减少运行时间,提高整体处理的效率。

此缩放模块由ram A和ram B组成的乒乓ram、RGBto YUV444模块、Fifo缓存器和YUV444to YUV422四个模块组成4。

模块的工作过程5:图像数据存放在乒乓ram中,能够更有效地占用总线,RGBto YUV444模块从ram中读出数据,将RGB信号转换成YUV信号,并将YUV信号存放在Fifo缓存器中,当Fifo缓存器存满一行数据的时候把使能信号拉高,通知YUV444to YUV422模块可以进行图像数据的缩放处理的工作了,此时YUV444to YUV422模块从Fifo缓存器中读出数据,进行缩放大小的判断,若为特殊的成倍数的缩放,则可以在特定的模块进行缩放,然后直接输出图像数据;否则,首先进行水平方向的缩放。然后根据行地址判断当前是否在纵向上已经有所需抽头数行的数据缓存在缓存器中。如果不满足,则读行地址,继续对水平方向进行缩放,否则读列地址对垂直方向进行缩放。最后输出YUV像素数据和有效信号给下一级模块。图中,缓存器起到一定缓存像素数据的作用。

4 仿真

图像缩放模块的功能验证主要是通过仿真工具Modelsim软件进行仿真6。下图为将720*480的图像放大到1920*1080的图像的仿真图。

图7中(a)为经仿真之后的输入模块像素的仿真图,(b)为输出模块的像素的仿真图。我们可以简单分析:i_data/o_data分别为输入/输出的图像像素,从仿真图中可以看出,结果符合我们欲将图像放大的要求。

5 结束语

经过验证,整个算法的设计和硬件实现都可以满足初步构想,可以较清晰利的在视频图像处理中显示图像,并解决了硬件上资源消耗严重的问题。

摘要:该文首先介绍了三种图像缩放时常见的插值算法,并对它们进行比较分析,最终确定了该文是基于双立方插值(也叫双三次插值)技术的实现,接着在此基础上设计了一种应用于视频图像缩放的算法,最后在硬件方面实现了相对应的图像缩放的硬件设计并对它进行了功能仿真。该文的亮点在于视频图像缩放的双立方插值算法的设计,以及在硬件实现上为节省硬件资源所做的设计。

关键词:双立方插值,图像缩放,算法,视频图像

参考文献

[1]王会鹏,周利莉,张杰.一种基于区域的双三次图像插值算法[J].计算机工程,2010,11:33-34.

[2]王新红.数字视频图像处理与通信[M].北京:机械工业与出版社,2009.

[3]赵兴鹏.视频图像2D转3D算法研究及硬件实现[D].青岛:中国海洋大学,2012.

[4]屈有山,李英才.小波双三次插值搜索算法提高遥感图像分辨力[J].光电工程,2004,31(8):65-68.

[5]邹雪城,向祖权.基于双三次插值算法的图像缩放引擎的设计[J].微电子学与计算机,2007,1(24).

特征缩放 篇6

随着4G高速网络商用速度加快和智能手机的普及, 业界对视频、应用、社交互动、游戏等多媒体应用的竞争日趋激烈。为了满足视频、游戏、社交互动等业务对图像处理能力及质量要求, 移动增值业务提供商必须提供实时大容量的图像处理服务。图片作为信息传递、表达的重要载体, 如何快速高质量地传输图像是人们一直关注的课题。

经典的图像缩放算法有:最近邻插值法、双线性插值法[1]、双立方插值[2]、小波分解[3]、偏微分方程[4]等。当用最近邻插值对手机上的图像进行缩放时, 处理速度快, 但有轻微锯齿现象;双三次插值比双线性插值计算复杂、速度较慢, 效果较好。

作者提出一种基于NDK双线性快速图像插值去噪放大算法, 首先基于NDK进行双线性插值放大, 然后再用中值滤波去噪。实验证明它不仅与双三次插值一样的效果, 而且运行速度快, 适合于手机图像插值应用。

1. NDK双线性快速图像插值去噪算法

1.1 双线性插值方法

双线性插值方法[1]是最为常用的图像缩放方法, 它需要通过对输入图像中距离其最近的4个像素的灰度值采用加权平均运算得出。该算法对图像进行放缩后的新图像的像素值, 需要由四个采样点的像素值来决定, 如图1所示。

由图1可知, 插值点f (i+u, j+v) 是图像放大后需要插入的像素点, 该点周围上下左右的四个像素点f (i, j) , f (i, j+1) , f (i+1, j) , f (i+1, j+1) 为双线性插值需要运算的四个顶点。其计算公式如 (1) 式所示。由公式 (1) 可知, 离插值点越近的点对其像素值得贡献越大, 而插值点越远的点对E点像素值得贡献也就越小。

1.2 基于NDK的双线性插值

Android NDK (Native Development Kit) 是一套工具集合[5], 允许开发者使用像C/C++语言那样实现应用程序的一部分。在开发过程中需要使用JNI机制进行调用。JNI是一种在Java虚拟机控制下执行代码的标准机制。NDK主要是通过JNI从Java代码调用C代码 (即Native编程) , 它主要为上层Java代码提供库函数 (动态库或是静态库) , 但不全部使用Native C代码编写整个Android应用。

在应用程序层中Android NDK通过Java的JNI方式调用C/C++类, C++类定义如下:

1.3 中值滤波去噪

中值滤波[6]是把序列或数字图像中一点的值, 用该点邻域中各点值的中值来替代。二维中值滤波定义如下:设{xij, (i, j) ∈I2}表示数字图像各点的灰度值, 滤波窗口为A, yij为窗口是A在xij点的中值, 则

式 (2) 为A窗口的xij点的中值表达式, 中值滤波窗口既可以是方形, 也可以取近似圆形或十字形。

2. 实验结果

作者使用小米1S手机开发了该图像缩放系统, 并在小米1S手机上进行了测试。

2.1 主观质量比较

由于手机屏幕的限制, 如果放大倍数过小则不能从主观质量上反映算法的优良, 反之如果放大倍数过大则不适合于手机图像插值应用。因此作者对所有图像只进行放大2倍比较。图2、图3为各种算法插值效果图。其中图2和图3都是将原图像先缩小2倍, 然后再放大2倍的图像缩放图。

/d B

从图2和图3可以看得出, 在平滑区域中经NDK双线性插值去噪处理的图像伪边缘数比双立方插值算法少。

2.2 客观质量比较

在客观质量的评价中, 作者使用lena (512×512) 和pepper (512×512) 作为测试图像。在灰度空间上, 先将原始图像进行缩小2倍, 然后再使用各种插值算法放大2倍, 将对放大后的图像与原始图像进行峰值信噪比PSNR (Peak Signal to Noise Ratio) [7]和结构相似度MSSIM (Structural similarity) [8]的定量分析, 分析结果如表1、表2所示。

其中, X是大小为M×N的原始图像, Z是原始图像由某一算法放大再缩小后 (或缩小再放大后) 的目标图像。理论上, PSNR (X, Z) 值越大, 则图像缩放效果越好。

由表1、表2知NDK双线性去噪算法所得到图像的PSNR值和MSSIM值均优于双线性、双三次、NDK双线性插值和最近邻插值。

2.3处理时间比较

在处理时间的评价中, 作者使用lena (512×512) 和pepper (512×512) 作为测试图像。先将原始图像进行缩小2倍, 然后再使用各种插值算法放大2倍, 记录各种算法的处理时间。各种算法的处理时间如表3所示。

(单位:毫秒)

从表3可以看出, 双立方插值时间最长, 为NDK双线性插值时间的40倍, 其次是双线性插值、最近邻插值、NDK双线性插值去噪, NDK双线性插值时间最短。

NDK双线性插值去噪算法无论从主观质量或客观质量上都与双立方插值算法效果相当, 并且其处理时间只有双立方插值算法的1/20, 在处理时间上有很大的优势。

3. 结论

本文提出了一种基于NDK双线性插值去噪算法图像放大方法。在双线性插值的基础上, 通过NDK使用JNI调用C++的双线性插值函数对图像进行放大, 然后使用JNI调用C++的中值滤波函数对图像去噪。实验证明该算法的缩放质量不仅与双三次插值达到一样的效果, 而且运行速度快, 适合于手机图像缩放。

摘要:为了较快较好地获得手机图像的显示效果, 本文提出一种基于NDK双线性插值去噪缩放算法。首先用NDK对手机图像进行双线性插值缩放, 然后再用中值滤波去噪。实验结果表明, 该算法比普通双线性插值算法边缘更加清晰, 处理速度更快, 提高了图像的质量。

关键词:双线性插值,NDK,图像缩放

参考文献

[1]Blu T, Thévenaz P, Unser M.Linear interpolation revitalized[J].IEEE Transactions on Image Processing, 2004, 13 (5) :710~719.

[2]R.G.Keys.Cubic convolution interpolation for digital image processing[J].IEEE Transactions on Acoustics, Speech, Signal Processing, 1981, 29 (6) :1153-1160.

[3]Rafael C.Gonzalez, Riehard E.woods.数字图像处理 (第2版) [M].北京:电子工业出版社.2005:276-321.

[4]张慧玉, 祝轩, 王蕾.基于PDE的图像放大方法研究[J].西安石油大学学报:自然科学版, 2009, 24 (5) :79-81.

[5]孙松.基于Android NDK的智能灯光系统的设计与实现[D].重庆大学硕士学位论文, 2014:15-22

[6]桂预风、陶剑锋.数字图像中值滤波改进算法研究[J].武汉理工大学学报 (交通科学与工程版) , 2004, 28 (1) :103-105.

[7]Wang Z, Bovik A C.Mean Squared Error:Love It or Leave It[J].IEEE Signal Processing Magazine, 2009, 26 (1) :98-117

特征缩放 篇7

关键词:数控加工,坐标平移,旋转,缩放,FANUC

1 引言

在数控手工编程过程中会碰到一些结构特殊的零件, 这些结构可能有些局部对称、相似、重叠等特征, 如果采用常规的指令编程程序复杂、效率低、错误率高, 如果能巧妙的运用诸如平移、旋转缩放等特殊指令编程, 会使程序简单快捷, 既提高了效率又能保证加工质量。本文将结合数控铣削具体实例, 采用FANUC 0i系统进行编程, 来介绍这些指令的编程技巧, 其他系统也可以起到举一反三的启示效果。

2 图例分析

如图1所示零件主要为复合内型腔的加工, 我们把重点放在型腔Ⅰ、Ⅱ、Ⅲ的分析上, 孔系加工省略, 不做讨论。仔细分析会发现, 轮廓Ⅱ为轮廓Ⅰ的放大两倍, 轮廓Ⅲ为轮廓Ⅰ的平移与旋转一定角度。所以我们可以初步确定一个方案, 用轮廓Ⅰ编一个子程序, 其他采用平移、缩放、坐标旋转指令, 在主程序中调用子程序达到简化编程目的。

3 简化编程特殊指令功能与格式的认识

(1) 坐标平移指令G52。功能:将当前工件坐标系复制并平移到指定的位置, 形成新的子坐标系, 又称为局部坐标系。指令格式:“G52 X_Y_Z_”, 其中X_Y_Z_是子坐标系原点相对于当前工件坐标系原点的坐标值;执行“G52 X0 Y0 Z0”, 为取消坐标系平移。注意事项:局部坐标系只是工件坐标系的补充, 它不能替代工件坐标系, 是一个子集或子系统, 只有在选择了标准或附加的工件偏置后, 才能设定局部坐标系。G52指令设置一个新的临时程序原点, 在含有G52指令的程序段中, 绝对值编程方式的指令值就是在该局部坐标系中的坐标值。

(2) 坐标系旋转指令G68、G69。功能:将工件坐标系旋转某一指定的角度, 以简化编程。在G17指定的平面内, 指令格式:G68 X_Y_R_表示, X_Y_为旋转中心坐标值, R_为旋转角度, 取值范围为“-360°~360°”, 逆时针旋转为正, 反之为负。G69为坐标系旋转指令取消。G68和G69两指令必须成对使用, 缺一不可。

(3) 缩放指令G51、G50。功能:编程的形状可以被放大或缩小。有两种格式, 其中格式一为:G51 X_Y_Z_P_;X、Y、Z为比例缩放中心的坐标;P为比例缩放系数;该格式表示沿所有轴以相同的比例进行缩放, 沿各轴以不同比例缩放本文不讨论。G50为取消缩放指令, G51、G50配对使用。

4 编程策略

正是由于该零件在结构上有旋转、相似的特点, 可以综合采用“G52+G68/G69, G52+G51/G50”来编程, 首先以Ⅰ型腔编一个子程序, 选择刀具准10三刃平底刀, 一次下刀到加工面, 本文主要目的是为了介绍简化编程的方法, 下刀方式没有做进一步探讨, 读者可以进一步优化 (如采用螺旋下刀等) , 走刀路线圆弧切入和切出, 采用顺铣的方式, 如图2所示, 先用轮廓Ⅰ编一个子程序。

然后编写整个轮廓主程序:

5 几点说明

在以上编程中综合运用了多个特殊指令的嵌套, 辅以子程序, 其中恰当使用刀补, 使程序紧凑, 要注意以下事项:

(1) 在缩放及旋转功能下不能使用G52指令, 但在G52下能进行缩放及坐标系旋转。

(2) 使用坐标旋转指令, 旋转中心不同, 旋转后图形各点坐标也不相同。因此, 可以先将工件原点平移至旋转中心 (用G52指令) , 然后执行“G68 X0 Y0 R__”程序段进行工件坐标系旋转, 编程会变得非常简单。

(3) 在G69程序段之后, 必须有移动指令控制刀具在旋转的坐标平面移动, 以确保取消旋转有效。

(4) 如果兼有坐标平移、坐标旋转、半径补偿等指令的情况下, 建立上述状态各指令的先后顺序是“先平移, 后旋转, 再刀补”, 而取消上述状态各指令的先后顺序是“先刀补, 后旋转, 再平移”。

总之, 综合运用坐标系平移、坐标系旋转、缩放指令、半径补偿等, 配合子程序调用, 可以使看似复杂的零件变成简单, 提高了加工效率, 有较大的使用价值。

参考文献

[1]BEIJING-FANUC 0i-TB操作说明书B-63834C/01[Z].BEIJINGFANUC, 2003/07.

【特征缩放】推荐阅读:

缩放算法07-31

事件特征07-16

水泥特征07-18

底层特征07-19

特征因子07-19

词汇特征07-22

几何特征05-08

供求特征05-09

构图特征05-09

链式特征05-10

上一篇:任职能力论文下一篇:《新一代领导者》