matlab图片插值数据_使用双线性插值法放大图像(matlab实现)
双线性插值计算公式:
f(i+u,j+v) = (1-u)(1-v)f(i,j)+u(1-v)f(i+1,j)+(1-u)vf(i,j+1)+uvf(i+1,j+1)
这个公式表明了如何利用矩阵中的四个像素值计算新的像素值,这些新的像素值就组成了放大后的图像。
下图是如何将3x3的图像放大为4x4的图像:
原图像表示为3x3的矩阵(像素值处在黑线的交叉点上),如何计算4x4矩阵的值呢?(像素值处在红色虚线交叉点及红线与黑线的交点上)
比如新图像B的第一列与原图像A的第一列的对应关系是:
B(1,1) = A(1,1)
B(1,2) = A(1,1.66667)
B(1,3) = A(1,2.33334)
B(1,4) = A(1,3.00001)
应用上面的公式,实际上就是用A的含有小数点的位置的像素值来计算B的像素值,但含有小数点位的像素是不存在的,这里称为虚拟位置。
用原图像A的值就能计算出放大后B的值,是不是很神奇?
实际上可以这样认为:双线性插值就是把放大后的图像再压缩到原来图像的尺寸大小,计算原图像中虚拟的像素值,等同于计算放大后图像的像素值,
对于本例来说,B图像的步长相当于A图像步长的(3-1)/(4-1)=0.66667倍。下面我们就可以利用这个比率来对应B中像素位置与A中虚拟像素位置的关系。
B(1,1) = A(1,1) (1-1)*0.66667+1=1
B(1,2) = A(1,1.66667) (2-1)*0.66667+1=1.66667
B(1,3) = A(1,2.33334) (3-1)*0.66667+1=2.33334
B(1,4) = A(1,3.00001) (4-1)*0.66667+1=3.00001
根据上面的对应关系,我们就可以用代码实现了。
现在还有一个问题:
我们计算虚拟像素值是需要周围四个原像素值,比如上列中的(下图中红圈圈住的部分)
A(1,3) = (1-0)(1-0)A(1,3) + (1-0)0A(1,4) + 0(1-0)A(2,3) + 00A(2,4)
显然这里的A(1,4)和A(2,4)是无法索引到得,因为原图像是3x3的矩阵。
为了解决这个问题,在A的最后一行,与最后一列分别加上0,这样A就变成了4x4的矩阵。
图示中扩展的0行0列的元素位置用红色的坐标标示,红色斜箭头把需要用到扩展A矩阵的虚拟像素点位置都标了出来。
实验结果:
原图像:
放大四倍后的图像:
代码实现:
主程序代码:
clear ; close all;clc
image= imread('bird.png');%载入图像的值
r= image(:,:,1);%由于真彩图是红蓝绿三个像素的叠加
g= image(:,:,2);%这里把r,g,b分离出来单独调用函数计算
b= image(:,:,3);%计算完成后再进行组装
%这里需要手动设置放大的倍数
w= 4;%w放大的是竖直方向
l= 4;%l放大的是水平方向
r= extenRGB(r,w,l);%调用函数计算放大后的r值
g= extenRGB(g,w,l);%调用函数计算放大后的g值
b= extenRGB(b,w,l);%调用函数计算放大后的b值
%下面把计算完成后的rgb再组装起来
outRGB(:,:,1) = r;outRGB(:,:,2) = g;outRGB(:,:,3) = b;outRGB= uint8(outRGB);%格式转换,否则无法显示
imshow(outRGB);%显示放大后的图像
主程序调用的函数:
%像素放大计算函数 extenRGB()
function Output=extenRGB(A,w,l)%A矩阵分别代表r,g,b矩阵
[m,n]= size(A); %读取A的行和列
A= [A;zeros(1,n)]; %在A的最后一行加入两行0
A= [A zeros(m+1,1)]; %在A的最后一列加入两列0%这样A就变成(m+1)x(n+1)的矩阵,这是为了解决索引A矩阵时的边界溢出问题
ini_u= (m-1)/(w*m-1); %步长比,如果把原来的一步A(1,1)到A(2,1)看做1,那么计算放大后的
ini_v= (n-1)/(l*n-1); %图像B(2,1)相当于计算A(1+ini_u,1),即每步加ini_u
Output= zeros(w*m,l*n); %初始化输出矩阵for j = 1:l*n; %左边两个语句的功能是:z_u,z_v向左取整,u,v取小数,原理如下
z_v= floor((j-1)*ini_v+1); %比如A为3x3的矩阵,要放大为Output是4x4大小,即放大了4/3倍,
v= (j-1)*ini_v+1 - z_v; %新的一步的距离相当于原来的(3-1)/(4-1)=0.66667
for i = 1:w*m; %Output(1,1) = A(1,1) %(1-1)*0.66667+1=1z_u= floor((i-1)*ini_u+1); %Output(1,2) = A(1,1.66667) %(2-1)*0.66667+1=1.66667u= (i-1)*ini_u+1 - z_u; %Output(1,3) = A(1,2.33334) %(3-1)*0.66667+1=2.33334
%Output(1,4) = A(1,3.00001) %(4-1)*0.66667+1=3.00001
%===================下面是双线性插值的代码实现================================Output(i,j)= (1 - u)*(1 - v)*A(z_u, z_v ) +...
(1 - u)* v *A(z_u, z_v + 1) +...
u*(1 - v)*A(z_u + 1, z_v ) +...
u* v *A(z_u + 1, z_v + 1);
end
end
matlab图片插值数据_使用双线性插值法放大图像(matlab实现)相关推荐
- 图片插值数据_结合PS用这招来增强ArcGIS插值图出图效果
1 概述 在一些科研领域,经常会遇到使用插值的方式进行处理,并生成最终的插值图.插值图在ArcGIS里面非常容易生成,只要具备了采用点数据,通过ArcToolBox里面的插值的工具可以直接生成最终的插 ...
- “双线性插值法”实现图像的缩放
本学期修读"数学实验"相关课程,课程设计以"双线性插值法实现图像缩放"为研究方向,写篇博文记录一下自己的心路历程– 文章目录 前言 一.图像基础知识 二.双线性 ...
- Opencv下双线性插值法进行图像放缩
关于图像放缩的算法有很多,本文主要介绍双线性插值法进行图像放缩,本文参考了: http://www.cnblogs.com/funny-world/p/3162003.html 我们设源图像src的大 ...
- matlab读入txt数据_教程合集 | MATLAB文件读写(以nc与txt为例)
周一到!我们又和大家见面啦!最近几周的主题是,有了数据,那我们怎么读写数据文件呢?气象中的特殊资料又有哪些处理方法呢?以txt和nc文件做引子,欢迎各位拍砖~ No.1 基础通用知识 读写文件时有一些 ...
- 【图像处理】双线性插值法扩展图像像素及其代码实现(亚像素)
亚像素图像 大家有没有你想过,在软件层面,如何提高图像处理的精度?比如,我们要用图像处理测量工业零件的周长,怎么在不改变硬件条件的情况下尽可能得到更高的精度? 我们平时看到的图像都是由像素点组成的,不 ...
- matlab图片在word/wps中模糊解决方法,matlab图片转pdf后信息丢失解决方法
在写论文的时候,不免需要把matlab的仿真图片贴在论文里,但是matlab图片另存为后就会降低像素,变得模糊,怎么才能让图片清晰呢? 可以按下面步骤试试: (1)matlab跑出仿真图后,在菜单栏依 ...
- bmp 双线性插值_基于双线性插值算法的图像放缩技术与实现_冯慧君
九江 332000) 2 ( 闽发证券有限责任公司 上海 200031) 3 ( 华为技术有限公司 上海 200121) 摘 要 本文介绍了双线性插值算法在图像放缩领域的应用和具体实现的方法 , 并通 ...
- matlab相关性分析频谱_信号与系统:用matlab分析wav音频的频谱
信号与系统:用matlab分析wav音频的频谱 2018-11-25 [天水浪客一门课程的平时作业,matlab确实强大,用它做这个有点杀鸡用牛刀的意味...软件太大了,直接靠安装了此软件的同学搞定, ...
- matlab图片白边_科学网—[原创] matlab输出图片无白边 - 杨光的博文
今天要做一个gif动画,可惜GIF Movie Gear不认eps文件,无奈只好输出png格式的文件,麻烦来了,输出的图像有白边!之前挥之不去的问题再一次来了.在网上搜索一个多小时,都是说什么先ims ...
最新文章
- FreeMarker对应各种数据结构解析
- Cisco路由器故障诊断技术
- sizeof(数组名)和sizeof(指针)
- 机器视觉传感器选型,交互作用决定取舍
- RT5350原厂SDK及AP移植步骤详解
- Android -- WebView进度条
- android activity启动模式_从0系统学Android--2.5Activity启动模式
- 中断程序_ABB机器人中断程序详解(安川FANUC)
- intouch写数据到MySQL_如何将intouch数据插入到SQL数据库
- 宇电智能调节仪AIBUS 及MODBUS 通讯协议说明V8.0
- tftp: timeout
- 辅修计算机科学与技术有哪些课程,计算机科学与技术专业辅修课程表.doc
- matlab几何形状面积计算,小学数学几何图形计算公式总结
- css+html实现时间轴
- matlab画一条平滑曲线,Matlab画平滑曲线的两种方法( 拟合或插值后再用plot即可)...
- 【python爬虫】QQ空间爬虫 笔记
- java中ArrayList(基础)
- Adaptive AUTOSAR Diagnostic Manager模块介绍(一)
- 成为会带团队的技术人 架构设计:治理好系统复杂度才最务实
- 【判断是否为手机号】
热门文章
- 使用变量对象引出作用域链
- UWP Composition API - 锁定列的FlexGrid
- day12-mysql 增删改查
- git:Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists)....
- 【ruby项目,语言提交检查(一)】怎样高速学习ruby ?
- fullpage的应用
- Xen 和 KVM 下如何关闭 virbr0
- 6个强大的PHP/Mysql代码生成器介绍
- Visual Studio 6.0编译PWLib1.12总结
- icop java,java基于spring注解AOP的异常处理的方法