编程且利用双线性插值实现图像及缩放.docVIP

编程且利用双线性插值实现图像及缩放.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编程且利用双线性插值实现图像及缩放

一设计题目 编程且利用双线性插值实现图像的缩放 二设计目的 熟悉matlab使用环境及工作原理; 掌握图像缩放的原理; 学会双线性插值法的应用; 体会图像灰度值的变化过程。 三设计原理 1 双线性插值算法 简单比方 原来的数值序列:0,10,20,30,40 线性插值一次为:0,5,10,15,20,25,30,35,40 即认为其变化(增减)是线形的,可以在坐标图上画出一条直线 在数码相机技术中,这些数值可以代表组成一张照片的不同像素点的色彩、色度等指标。 ?为了方便理解,先考虑一维情况下的线性插值 对于一个数列c,我们假设c[a]到c[a+1]之间是线性变化的 那么对于浮点数x(a=xa+1),c(x)=c[a+1]*(x-a)+c[a]*(1+a-x); 把这种插值方式扩展到二维情况 对于一个二维数组c,我们假设对于任意一个浮点数i,c(a,i)到c(a+1,i)之间是线性变化的,c(i,b)到c(i,b+1)之间也是线性变化的(a,b都是整数) 那么对于浮点数的坐标(x,y)满足(a=xa+1,b=yb+1),我们可以先分别求出c(x,b)和c(x,b+1): c(x,b) = c[a+1]*(x-a)+c[a]*(1+a-x); c(x,b+1) = c[a+1][b+1]*(x-a)+c[a][b+1]*(1+a-x); 好,现在已经知道c(x,b)和c(x,b+1)了,而根据假设c(x,b)到c(x,b+1)也是线性变化的,所以: c(x,y) = c(x,b+1)*(y-b)+c(x,b)*(1+b-y) 这就是双线性插值 图像缩放的基本原理:1) 根据已有的数字图像重建物理图像2) 对重建的物理图像以所需要的分辨率重采样clear; I=imread(E:\cel.jpg); Z=rgb2gray(I); [rows,cols]=size(Z); K1 = str2double(inputdlg(请输入行缩放倍数, INPUT scale factor, 1, {0.5}));%行默认变为原来的0.5倍 K2 = str2double(inputdlg(请输入列缩放倍数, INPUT scale factor, 1, {0.5}));%列默认变为原来的0.5倍 width = K1 * rows; height = K2 * cols; Out = uint8(zeros(width,height)); %创建输出图像矩阵 widthScale = rows/width; heightScale = cols/height; for x = 6:width - 6 % 6是为了防止矩阵超出边界溢出 for y = 6:height - 6 oldX = x * widthScale; % oldX,oldY为原坐标,x,y为新标 oldY = y * heightScale; if (oldX/double(uint16(oldX)) == 1.0) (oldY/double(uint16(oldY)) == 1.0) Out(x,y) = Z(int16(oldX),int16(oldY));%若oldX,oldY为整数,直接赋值 else a = double(uint16(oldX)); b = double(uint16(oldY)); x11 = double(Z(a,b)); % x11 赋值I(a,b) x12 = double(Z(a,b+1)); % x12 赋值I(a,b+1) x21 = double(Z(a+1,b)); % x21 赋值I(a+1,b) x22 = double(Z(a+1,b+1)); % x22 赋I(a+1,b+1) Out(x,y) = uint8( (b+1-oldY) * ((oldX-a)*x(a+1-oldX)*x11) + (oldY-b) * ((oldX-a)*x22 +(a+1-oldX) * x12) ); % 用双线性插值计算公式计算 end

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档