matlab彩色图像缩放(双线性与双立方插值)

双线性插值原理可以参考这篇博文:双线性内插法
立方插值的推导我参考的这篇文章:Cubic interpolation
数学推导过程上面两篇文章解释得还是比较清楚,可以自己拿笔推一推,至于双线性和双立方可以理解为先行(或列)插值再列(或行)插值。

程序代码:

双线性插值函数
BilinearInterpolae.m

function imgn = BilinearInterpolae(img,m,n)%取出单个通道imgR = img(:, :, 1);[h, w] = size(imgR);for t= 1:3for i = 1:h*m          %新高度,即行for j = 1:w*n      %新宽度,即列x = i/m;         %坐标(i,j)对应原图中(x,y);x/i=h/(h*m)y = j/n;           u = x-floor(x); %取得虚坐标x的小数部分 v = y-floor(y);if x < 1           %,x,y可能对应原图中非整数坐标位置,所以需要进行边界处理x = 1;endif x > hx = h;endif y < 1y = 1;endif y > wy = w;end%按权重进行双线性插值imgn(i,j,t) = img(floor(x), floor(y), t)*(1-u)*(1-v)+ ...img(floor(x), ceil(y), t)* (1-u) * v + ...img(ceil(x), floor(y), t)* u * (1-v) + ...img(ceil(x), ceil(y), t)* u * v;        endendend
end

三次插值函数
cubicInterpolate.m

%----------- p = [p1   p2   p3   p4]-----------
%---------------f(-1) f(0) f(1) f(2)-----------function value = cubicInterpolate(p,x)   %p的大小4*1p = double(p);a = -0.5*p(1) + 1.5*p(2) - 1.5*p(3) + 0.5*p(4);b = p(1) - 2.5*p(2) + 2*p(3) - 0.5*p(4);c = 0.5*p(3) - 0.5*p(1);d = p(2);value=a*x^3 + b*x^2 + c*x + d;
end

双立方插值函数(调用三次插值函数)
bicubicInterpolate.m

function revalue=bicubicInterpolate(p,x,y)         %x,y被包含于[0,1]之间arr = zeros(4,1);for i=1:4arr(i) = cubicInterpolate( p(i,1:4), y);   %先行插值endrevalue = cubicInterpolate(arr,x);             %再列插值end

主程序
mian.m

clear all;
close all;
clc;imgsrc = imread('parrot-1088-725.jpg');
img = imresize(imgsrc, [floor(725/5),floor(1088/5)]);
%imshow(img);m = 4;            %放大或缩小的宽度的倍数
n = 4;            %放大或缩小的高度的倍数%取出单个通道
imgR = img(:, :, 1);
[h, w] = size(imgR);%%双线性插值
imgn2 = BilinearInterpolae(img,4,4);%%双立方插值
imgn3 = zeros(h*m,w*n);
%初等行变换[rot|E]——>[E|rot']
%rot'=[1/m 0 0;0 1/n 0;0 0 1]
rot = [m 0 0;0 n 0;0 0 1];      for t = 1:3for i = 1:h*mfor j = 1:w*ncoord = [i j 1]/rot;          %缩放后的图像像素坐标coordinate在原像素中的坐标pix=[i/m j/n 1]u = coord(1)-floor(coord(1)); %x方向(纵轴)虚坐标与左上点实坐标相减的小数部分v = coord(2)-floor(coord(2)); %y方向(横轴)虚坐标与左上点实坐标相减的小数部分if coord(1) < 2            %边界处理,也可以用卷积时常用的边界扩展防止越界coord(1) = 2;endif coord(1) > h-2coord(1) = h-2;endif coord(2) < 2coord(2) = 2;endif coord(2) > w-2coord(2) = w-2;endx0=floor(coord(1));           %左上角点纵坐标,rowy0=floor(coord(2));           %左上角点横坐标,colRec_pixel = img(x0-1:x0+2, y0-1:y0+2, t);  %虚坐标(x,y)坐标的16邻域的像素imgn3(i,j,t) = bicubicInterpolate(Rec_pixel, u, v); %双立方插值      endend
endfigure(1),imshow(uint8(img));
figure(2);imshow(imgn2);
figure(3);imshow(uint8(imgn3));

原图:
原图
双线性插值效果图
双线性插值效果图双立方插值效果图
双立方插值效果图线性插值和三次插值但从效果上来说我没看出明显的差别,但是理论上应该是三次插值比二次插值好

代码参考了以下两篇博文,部分地方按自己的理解做了修改
https://blog.csdn.net/ywxk1314/article/details/81286413?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

https://blog.csdn.net/weixin_33895475/article/details/94746783

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

灵活运用 SQL SERVER FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道&#xff0c;其实它就是将查询结果集以XML形式展现&#xff0c;有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主. 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR…

LeetCode题库整理【Java】—— 1两数之和

LeetCode题库整理【Java】 1.两数之和 题目&#xff1a;给定一个整数数组和一个目标值&#xff0c;找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案&#xff0c;且同样的元素不能被重复利用。 示例: 给定 nums [2, 7, 11, 15], target 9 因为 nums[0] nu…

poj3749

简单题 View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>usingnamespacestd;stringst;intmain(){//freopen("t.txt", "r", stdin);while(getline(cin, st)) {if(st "ENDOFINPUT")…

LeetCode题库整理【Java】—— 7整数反转

LeetCode题库整理【Java】 7.整数反转 题目&#xff1a;给出一个32位的有符号整数&#xff0c;你需要将这个这个整数中每位上的数字进行反转。 示例1&#xff1a; 输入&#xff1a; 123 输出&#xff1a; 321 示例2&#xff1a; 输入&#xff1a; -123 输出&#xff1a;…

LeetCode题库整理【Java】—— 2 两数相加

LeetCode题库整理【Java】 2.两数相加 题目&#xff1a;给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储 一位 数字。 如果&#xff0c;我们将这两个数相加起来&#xff0c;则会…

用 toto 3分钟建轻量级博客

对于程序员或创业团队来说&#xff0c;还是有必要拥有一个属于自己的博客。Wordpress 曾经让个人或企业搭建博客变得非常容易。但是我们觉得 Wordpress 还是有些重量级&#xff0c;所以选择了一个非常轻便的工具 toto&#xff0c;一段只有200多行代码的Ruby应用程序。 前提条件…

LeetCode题库整理【Java】—— 3 无重复字符的最长子串

LeetCode题库整理【Java】 ## 3 无重复字符的最长子串 题目&#xff1a;给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输…

【正式发布】火星人敏捷开发手册2012-12-25(基于Scrum的敏捷开发免费培训教材及公司内部宣传材料)...

2012-12-25&#xff1a;新增松结对编程4页。 预告&#xff1a;下一更新日期&#xff1a;2013-03-01。 您可以在非商业场合免费使用&#xff08;详见文档最后的授权页面&#xff09;&#xff1a; 作为培训前的预习阅读。打印并张贴在公司走廊上。作为企业内部小组培训教材使用。…

SpringMVC学习笔记-新建工程及一些注意事项

1、学习网站 &#xff1a;B站狂神说 狂神说的文档链接&#xff1a;https://mp.weixin.qq.com/s/8ddT6FD0Y4f3XdbEz0aqpQ 2、新建SpringMVC工程 &#xff08;我的是IDEA2020.3&#xff09; &#xff08;1&#xff09;新建工程 &#xff08;2&#xff09;命名 &#xff08;3&a…

SpringMVC之——转发与重定向

与视图解析器的关系 有视图解析器时转发和重定向都可以成功&#xff0c; 无视图解析器时转发需要补全路径才能成功&#xff0c;重定向不能访问WEB-INF下的页面&#xff08;如图中的test.jsp&#xff09; 视图解析器配置在web.xml中绑定的springmvc配置文件中 有视图解析器时 转…

什么是JSON? 以及jackson的使用

1、题外话 前后端分离时代 后端部署后端&#xff0c;提供接口&#xff0c;提供数据 json 前端独立部署&#xff0c;负责渲染后端的数据 2、什么是JSON JSON(JavaScript Object Notation, JS对象标记)是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。 ●采用完全独立…

流程图

开始和结束可以使用椭圆形&#xff0c;条件判断可以用菱形&#xff0c;一般的处理用矩形&#xff0c;使用带箭头的线把程序的执行流程标出来就行了 最要的是表示出系统每一步都做什么转载于:https://www.cnblogs.com/mmnyjq/archive/2011/07/20/2112002.html

新建Mybatis工程

1、新建一个普通的Maven工程&#xff0c;点击next 在需要的目录下命名你的工程&#xff0c;点击finish 2、在pom.xml中导入依赖&#xff0c;包含mysql,mybatis和单元测试三个部分的依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…

org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the

错误&#xff1a;绑定异常 org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)at org.apache.ibatis.session.Configur…

一个H3CNE测试的配置

H3CNE的配置 拓扑图&#xff1a; R1[R1]dis cu#version 5.20, Alpha 1011#sysname R1#password-control login-attempt 3 exceed lock-time 120#undo voice vlan mac-address 00e0-bb00-0000#ipsec cpu-backup enable#undo cryptoengine enable#nat address-group 0 10.1.1.3 1…

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration.

错误&#xff1a;找不到Mapper.xml org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in com/kuang/UserMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configu…

推荐5个应用 jQuery 特效的精美网站

jQuery 在现在的 Web 开发项目中扮演着重要角色&#xff0c;借助 jQuery 可以让网站有更好的可用性和用户体验&#xff0c;让访问者对网站留下非常好的印象。今天这篇文章向大家分享5个应用 jQuery 的精美网站&#xff0c;一起欣赏。 Webalon 非常好的图片滑动效果&#xff0c;…

详解pager-taglib-2.0配合SSH分页

一. pager-taglib-2.0简介预览. pager-taglib-2.0支持多种风格的分页,打开其源码&#xff0c;可以看到&#xff0c;处理标签的类为&#xff1a; PagerTag&#xff0c;有兴趣的同学可以研究下源码。 Simple&#xff1a; Text Icon&#xff1a; JSPTags.com &#xff1a; AllTheW…

IDEA写sql语句的时候没有提示信息的处理办法

不出现提示信息的方法: 在File ——>settings ——>Languages &Frameworks ——>SQL Dialects中配置数据库类型&#xff0c; 将项目路径添加进来 配置完成后Apply——>OK

字中字效果-html5实例

用html5实现如图字中有字效果 实现思路&#xff1a;用canvas输出文字&#xff0c;然后分析像素点&#xff0c;根据像素点输出文字。 核心代码&#xff1a; var canvas;var ctx;var tex;var blankStr " ";//输出空白$(function () {$("button#bt").click(…