双线性插值的图像缩放问题

初次开始写博客,想记录下自己在公司实习所做过的事情以及学习到的东西,虽然还是有很多东西不了解也还没做出来,但是也希望这是一种体验。

我于2018.9.3入职进行实习,到现在也快过去两个月了,我在公司进行了轮岗,在大部分岗位都待了几周,现在回到了我应该待的部门—数字IP设计部。其中很多心路感受等有空的时候再一一补上。现在我的任务就是学习图像缩放,一方面我需要一个写论文的方向,另一方面公司说年底会开发这方面的芯片,让我提前做好知识储备。今天就记录一下自己在最近学习中的心得吧。

我所学习的图像缩放采用的算法就是双线性插值,这个算法很古老,自己查到的论文上很多都是2000年左右的,但是可能工程上需要这种稳定的算法把。各种论文中对这种算法的描述和改进很多(因为自己有点偷懒,看的英文的很少)。但是有的论文明显看书来在水,废话不多说,来说说双线性差值吧。

双线性插值最核心的就是那一个公式,放一个图在这里,公式就不编辑了。按照我自己的思路,首先要有缩放因子,然后通过缩放因子对图片拉伸或者缩小。但是在这里我就有一个疑问,是不是有一个寄存器先存住这个初次变化的图像呢?然后在这个初次缩放图像的基础上,通过向后映射的方法,计算出新的目标图像每一个像素点的灰度值,这样就得到了新的目标图像。

这个算是算法上的一点记录,那在硬件上怎么实习呢?这也是我现在还很有疑问的地方,先把这些都记录下来,不清楚的点后面再依次解决。

(1)       在硬件上首先要能接受源图像,这时候应该有个FIFO来缓存进来的数据(如果是对图片缩放还好,但是如果是对视频进行缩放需要FIFO能存储的住高速的视频源)。那么什么时候需要读取数据,什么时候读取第几行数据,这都需要一个控制。

(2)       然后,要从FIFO中将源图像读取出来,首先可以进行垂直方向上的插值,这样的话就需要读出源图像中的两行数据,这两行数据放置在两个RAM中。那么在这个拥有两个RAM的缓冲区中,还需要一个步长值x,这个步长值我个人是认为承担着两个任务。第一,每个x可以看作是加权系数,来让上下两行数据进行垂直方向上的插值。第二,x整数前面的系数每增加1,就意味着插值的两行要向下移动。比如,原来源数据的是第一第二行,但是x的整数位进位了,那么就需要从FIFO中读取第二第三行了。

(3)       在进行完垂直方向的插值之后,需要再进行水平方向的插值,计算公式不需要列出,但是还有几个要注意的就是水平和垂直方向插值都需要指针,需要告诉我什么时候一行结束了,什么时候整个帧的插值都结束了。

对于硬件怎么设计以及各个寄存器应该怎么配置,现在还处于迷茫状态中。为什么写下这篇博客,主要是最近情感遇到了重大问题,很难受,希望通过整理这些东西让我有一个缓冲,也能让我的注意力有所转移,后面有问题再补充。

原文地址:https://www.cnblogs.com/MU-Ricky/p/9889003.html

时间: 2024-10-11 00:50:36

双线性插值的图像缩放问题的相关文章

图像缩放算法

图像缩放算法较多,下面仅以最邻近插值算法和双线性插值算法作介绍. 如下图1所示,表示原始图像和缩放以后的图像. 图1 图像缩放(原始图像à缩放图像) 图像缩放就是将原始图像中的点经过某一算法映射到目标图像的点的行为,即要找到目标图像中的点p1对应在原始图像中点p0,简单而言就是找点p0. 假设: 原始图像src的分辨率为(srcW * srcH): 目标图像dst的分辨率为(dstW * dstH). 那么: 原始图像宽与目标图像宽的比例 原始图像高与目标图像高的比例 由 所以,原始图像中的点p

图像处理之基础---图像缩放中的一些 灰度插值算法

在图像缩放,旋转等一些图像处理中,对图像进行插值是不可缺少的一个步骤,下面对一些常用的插值算法进行介绍: 1.最近邻插值 这种插值方法是最简单的一种插值算法,图像输出的像素值的大小直接设为与其最邻近的点的大小即可,这个算法最简单,不需要多说,可以表示为 f(x,y) = g(  round(x)  ,   round(y)  ) 原图                                                                                  

视频图像处理基础知识0(双线性插值算法进行图像缩放)

双线性插值(说的很明白) 来自:http://www.cnblogs.com/linkr/p/3630902.html http://www.cnblogs.com/linkr/p/3630902.html 双线性插值,这个名字咋一听很高大上的样纸,再在维基百科上一查(见文末,我去,一堆的公式吓死人),像俺这种半文盲,看到公式脑子就懵的类型,真心给跪.虽然看着好复杂,但仔细一看道理再简单不过了,所以还是自己梳理一下好. 双线性插值,顾名思义就是两个方向的线性插值加起来(这解释过于简单粗暴,哈哈)

[转载]双线性插值算法进行图像缩放及性能效果优化

原文地址:双线性插值算法进行图像缩放及性能效果优化 一)转自http://handspeaker.iteye.com/blog/1545126 最近在编程时用到了双线性插值算法,对图像进行缩放.网上有很多这方面的资料,介绍的也算明白.但是,这些文章只介绍了算法,并没有具体说怎么实现以及怎么实现最好,举个例子,你可以按照网上文章的算法自己写一个双线性插值程序,用它对一张图片进行处理,然后再用matlab或者openCV的resize函数对同一张图片进行处理,得到的结果是不一样的,如果源图片较小,效

图像缩放——双线性插值算法

在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值.如果选择一个坐标系统使得  的四个已知点坐标分别为 (0, 0).(0, 1).(1, 0) 和 (1, 1),那么插值公式就可以化简为: 用矩阵运算来表示的话就是: 图像的空间变换,也称几何变换或几何运算,包括图像的平移.旋转.镜像变换.转置.缩放等.空间变换可如下表示:设(u,v)为源图像上的点,(x,y)为目标图像上的点,则空间变换就是将源图像上(u,v)处的颜色值与目标图像上(x,y)处

图像缩放_OpenCv

图像缩放是一种比较简单的图像处理操作,这里给出opencv中的代码, opencv的版本C语言接口 int resize_c() { const char *pstrImageName = "lena.jpg"; const char *pstrSaveImageName = "lena缩放图.jpg"; const char *pstrWindowsSrcTitle = "原图"; const char *pstrWindowsDstTitle

opencv2 矩阵方式 resize图像缩放代码(转载)

http://blog.sina.com.cn/s/blog_74a459380101r0yx.html opencv2 矩阵方式 resize图像缩放代码(转载) (2014-05-16 09:55:35) 转载▼   分类: Opencv_Function 最近学习opencv的时候遇到的一些技术问题,拿出来分享一下.opencv1和opencv2最大的区别就是c++支持,这使得网上有些资料是opencv1的c语言写的,而有些人喜欢c++,当然接口函数也就不同了.下面是一个c++的openc

图像编程学习笔记7——图像缩放

假设放大因子为ratio,(为了避免新图过大或过小,我们在程序中限制0.25≤ratio≤4),缩放(zoom)的变换矩阵很简单: (2.13) 缩放变换的源代码如下,因为和转置的那段程序很类似,程序中的注释就简单一些. [cpp] view plaincopy /** * 函数名: zoom * 参  数: ratio -- 缩放率 * 功  能: 对图片进行水平和垂直镜像操作 *         只保存原图大小的图像数据,如果没有就用白色填充 */ void zoom(double rati

实现基于最近邻内插和双线性内插的图像缩放

平时我们写图像处理的代码时,如果需要缩放图片,我们都是直接调用图像库的resize函数来完成图像的缩放.作为一个机器视觉或者图像处理算法的工作者,图像缩放代码的实现应该是必须掌握的.在众多图像缩放算法中,最近邻内插算法和双线性内插算法最为基本和常见,所以这篇文章就说一说如何用c++实现这两种算法下的 http://pic.cnhubei.com/space.php?uid=1132&do=album&id=823167http://pic.cnhubei.com/space.php?uid