[图像]图像缩放算法-双线性内插法
原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:http://blog.csdn.net/humanking7/article/details/45014879
简介:
图像缩放算法–双线性内插法,以及详解Matlab二维插值算法的 interp2()
1.原理介绍
双线性内插法是利用待求象素四个邻象素的灰度 (RGB可以分别进行插值)
在两个方向上作线性内插,公式推导如下 (原谅我没用visio和MathType,还是用手简单粗暴)
2.代码实现
原来做这个只是为了验证一下 Matlab 的 interp2()
函数,但是发现了一些问题,原来以为是 Matlab 错了,最后发现是我太年轻了,不过也怪文档不清晰 (感觉吐槽好无力啊)
。
众所周知,Matlab的取值是先行后列,但这个函数的用的坐标系是图像坐标系,如上图所示,所以函数 interp2(src, x, y)
中的 x
和 y
不是 矩阵src
的行和列,而且 x和y
既可以单一的 位置值,也可以是 位置值的矩阵,其实很简单的映射关系,但是就是特别绕 (我承认我智商有点着急)
。代码附上 (Matlab实现)
。
2.1.插值函数代码:
function zi = qfxInterp2(src, x, y)% if src is a matrices , number x expresses the position in the column direction and the number y expresses the position in the row direction.% O ---------------------> x(u,i)% |% |% | 点src(x, y) 在Matlab里面表示为 src(y, x)% |% |% |% y(v,j)% x与y应该有着相同的大小。最终形成的zi也是和x, y的size相同。% 如果用这个函数进行图像的变换, 则src是图像, x和y还有zi应该和src的size一样大, 关系为:% 点zi(u, v)是原图像中的点src( x(u, v), y(u, v) ), 但实际上这个点是通过插值得到的。x, y, src, zi都是u*v大小的矩阵, 只是src和zi存的是像素值, x和y存的是zi对应像素的插值坐标。% src(i, j)=a ----------------src(i+1, j)=b% | |% | dv% | |% | src(i+du,j+dv)% |<--------- du --------->% src(i, j+1)=c---------------src(i+1, j+1)=d%Matlab的取值顺序和上述的坐标系不同, 注意切记[row,col] = size(x);[imax,jmax] = size(src);%不能超过插值表的界限for v = 1:rowfor u = 1:coli = floor(x(v,u));j = floor(y(v,u));du = x(v,u) - i;dv = y(v,u) - j;a = getValue(src, j, i, jmax, imax);b = getValue(src, j, i+1, jmax, imax);c = getValue(src, j+1,i, jmax, imax);d = getValue(src, j+1,i+1, jmax, imax);zi(v,u) = (1-du)*(1-dv)*a + (1-dv)*du*b + (1-du)*dv*c + du*dv*d;endendendfunction value = getValue(mat,r,c,rMax,cMax)if((r>rMax)||(r<=0)||(c>cMax)||(c<=0))value = 0;elsevalue = mat(r,c);endend
2.2.结果对比:
调用函数以及与 Matlab的 interp2()
对比:
clearclcsource = [ 1, 2;3, 4];%想要插值的目标位置xLocal = [1.2,1.2 ;1.8,1.7];yLocal = [1.2,1.8;1.2,1.8];I = interp2(source, xLocal, yLocal )I2 = qfxInterp2(source,xLocal,yLocal)
Matlab输出效果:
I =1.6000 2.80002.2000 3.3000I2 =1.6000 2.80002.2000 3.3000
[图像]图像缩放算法-双线性内插法相关推荐
- 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章
昨天开始写一个录制屏幕和声音存储为视频文件的程序,差不多完成了. 屏幕录制使用方法:抓屏(方法很多,BitBlt.DirectX.MirrorDriver等),缩放,X264压缩(开源的,自己封装) ...
- MATLAB实现数图的缩放:双线性内插法
实验内容: 用双线性内插法实现位深度为8的灰度图像的缩放. 思路: 输入原图像以及缩放后图像的像素要求(宽度*高度),处理后输出新图像. 我是用matlab来实现scale(input_img,sca ...
- 双线性内插法--图像缩放算法
目录 一.问题描述 二.算法原理 双线性内插法 双线性内插法参数计算 三.算法效果 四.算法代码 一.问题描述 我们在处理图像的时候常常会遇到图像放大的问题,那么选择什么样的图像放大算法,能有什么样的 ...
- 图像缩放--双线性内插法及其python实现(图文代码)
双线性内插法 #数字图像处理 我将最近学数字图像处理,写的一些代码放到了github 中保存,有机会一起学习.有错误和需要补充的地方欢迎评论. 理论简介 双线性插值是图像内插缩放的一种方法. 简单来说 ...
- 图像去畸变矫正及双线性内插法
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 通过采集的图像我们可以得到畸变后的图像,要得到没有畸变的图像要通过畸变模型推导其映射关系. 真实图像 ...
- 超实用!图像去畸变矫正及双线性内插法
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 通过采集的图像我们可以得到畸变后的图像,要得到没有畸变的图像要通过畸变模型推导其映射关系. 真实图像 ...
- 数字图像处理学习笔记(七)——用Pycharm及MATLAB实现三种图像内插法(最近邻内插法、双线性内插法、双三次内插法)
数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...
- 三种图像内插法(最近邻内插法、双线性内插法、双三次内插法)的做法 代码实现
参考博客 数字图像处理学习笔记(四)--数字图像的内插.度量.表示与质量_闭关修炼--暂退的博客-CSDN博客 数字图像处理学习笔记(七)--用Pycharm及MATLAB实现三种图像内插法(最近邻内 ...
- 几个图像缩放算法的比较
几个图像缩放算法的比较 前段时间由于项目的需求,需要实现图像的缩放功能,期间查找了不少关于图像缩放算法的资料,现把自己的心得整理一下. 由于研究生期间没有选修过图像处理方面的课程,所以对图像缩放的原理 ...
最新文章
- Go Reflect
- Linux基础之网络配置
- python 自定义函数和循环_Python循环语句——对for循环和while循环应用自定义函数公式的实践,套用,练习...
- Linux+Apache2.4+PHP5.6+MySQL5.6源码安装步骤
- nginx的函数调用
- c#学习体会:使用 ref 和 out 传递数组
- try to navigate from button to line item page
- python编写统计选票的程序_使用python编写微信公众号发稿统计程序
- 2019年大数据发展趋势预测
- Altium Designer之PCB
- ps中如何同图层获取css代码
- 如何玩转sortablejs-vuedraggable实现表单嵌套拖拽功能
- LuaForUnity5:Lua的字符串
- Windows和Linux 服务器的访问方式
- 用友ERP-NC系统 漏洞 NCFindWeb接口任意文件下载
- 如何使用python游戏开发模块—pygame?
- 最新Erphpdown v13.11modown8.02主题破jie版去授权无域名限制版本
- FPGA设计中提高工作频率及降低功耗题目合集
- gRPC如何在Golang和PHP中进行实战?7步教你上手!
- 基于Cesium搭建单体化平台全流程简单记录