- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
双线性原理及其在DSP上的实现
Resizer模块处理子函数设计
Resizer模块处理子函数的实现方式
422缩放、420的缩放以及两者之间相互缩放,在Resizer模块中都是采用双线性原理实现的,唯一不同的就是根据图像的格式不同,取数据和拼数据的方式稍有不同,另外在实现缩放的同时也加入了根据用户输入的信息在目的图像周围加上任意颜色的边框的功能。
为了提高效率,将相同尺寸的图像直接进行拷贝,所以每种类型的转换都存在拷贝和缩放两类函数。对于源是420的图像,由于Y、U、V分量数据是分段连续的,为了提高效率,对于两倍以内的缩小及各种尺寸的放大还提供了优化快速算法,快速算法效率为通用算法效率的3/5。
另外,由于本模块的所有算法中,都参考了Stride参数,这样每个模块只需要重点实现帧到帧的拷贝和缩放函数即可,其他类型的转换分别可以通过调用这两个函数即可实现。例如:场到场的转换可以通过调用两次帧到帧即可实现;场到帧,可以也是通过调用两次帧到帧实现,这时只需要在每次调用的时候,将目的图像的Stride改为原来的两倍即可,这时第一场就会放在目的图像的奇数行,第二场图像就会放在目的图像的偶数行;帧到场的转换也类似,将源图像的Stride改为原来的两倍,这样就可以通过,先将源图像的奇数行图像缩放到目的图像的第一场,然后将源图像的偶数行数据放在目的图像的第二场,调用两次帧到帧的缩放即可实现。
双线性缩放原理
图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图,也就是用一个像素矩阵来描述图像的方法,对于另一种图像:用函数来描述图像的矢量图,不在本文讨论之列。越是简单的模型越适合用来举例子,我们就举个简单的图像:3X3 的256级灰度图,也就是高为3个象素,宽也是3个象素的图像,每个象素的取值可以是 0-255,代表该像素的亮度,255代表最亮,也就是白色,0代表最暗,即黑色 。假如图像的象素矩阵如下图所示(这个原始图把它叫做源图,Source):234?? 38????22
67???? 44??? 12
89???? 65??? 63
这个矩阵中,元素坐标(x,y)是这样确定的,x从左到右,从0开始,y从上到下,也是从零开始,这是图象处理中最常用的坐标系,就是这样一个坐标:
? ----------------------??|??|??|??|??|∨Y
如果想把这副图放大为 4X4大小的图像,那么该怎么做呢?那么第一步肯定想到的是先把4X4的矩阵先画出来再说,好了矩阵画出来了,如下所示,当然,矩阵的每个像素都是未知数,等待着我们去填充(这个将要被填充的图的叫做目标图,Destination):???????? ???????? ??????? ?
???????? ???????? ??????? ?
???????? ???????? ??????? ?
???????? ???????? ??????? ??
??然后要往这个空的矩阵里面填值了,要填的值从哪里来呢?是从源图中来好,先填写目标图最左上角的象素,坐标为(0,0),那么该坐标对应源图中的坐标可以由如下公式得出:??srcX=dstX* (srcWidth/dstWidth) , srcY = dstY * (srcHeight/dstHeight)
好了,套用公式,就可以找到对应的原图的坐标了(0*(3/4),0*(3/4))=(0*0.75,0*0.75)=(0,0),找到了源图的对应坐标,就可以把源图中坐标为(0,0)处的234象素值填进去目标图的(0,0)这个位置了。
接下来,如法炮制,寻找目标图中坐标为(1,0)的象素对应源图中的坐标,套用公式:(1*0.75,0*0.75)=(0.75,0)
结果发现,得到的坐标里面竟然有小数,这可怎么办?计算机里的图像可是数字图像,象素就是最小单位了,象素的坐标都是整数,从来没有小数坐标。这时候采用的一种策略就是采用四舍五入的方法(也可以采用直接舍掉小数位的方法),把非整数坐标转换成整数,好,那么按照四舍五入的方法就得到坐标(1,0),完整的运算过程就是这样的:(1*0.75,0*0.75)=(0.75,0)=(1,0)那么就可以再填一个象素到目标矩阵中了,同样是把源图中坐标为(1,0)处的像素值38填入目标图中的坐标。依次填完每个象素,一幅放大后的图像就诞生了,像素矩阵如下所示:234? ? 38?? ??22? ? ?22?
67 ???? 44 ?? ?12? ?? 12?
89 ???? 65? ? ?6
文档评论(0)