当前位置: 首页 > news >正文

Matlab 双线性内插 缩放矩阵或图像 函数

1、全代码:

function [ZI] = imblizoom(I,zmf)
%% ----------------------双线性插值法缩放矩阵或图像---------------------------
% Input:
%       I:图像文件名或矩阵(整数值(0~255))
%       zmf:缩放因子,即缩放的倍数
% Output:
%       缩放后的图像矩阵 ZI
% Usage:
%       ZI = SSELMHSIC('ImageFileName',zmf)
%       对图像I进行zmf倍的缩放并显示
%    Or:
%       ZI = SSELMHSIC(I,zmf)
%       对矩阵I进行zmf倍的缩放并显示
%    ...
%-------------------------------------------------------------------
    %%%%    Authors:   Zhi Liu
    %%%%    XiDian University Student
    %%%%    EMAIL:     zhiliu.mind@gmail.com
    %%%%    DATE:      16-12-2013
    
%% Step1 对数据进行预处理
if ~exist('I','var') || isempty(I)
    error('输入图像 I未定义或为空!');
end
if ~exist('zmf','var') || isempty(zmf) || numel(zmf) ~= 1
     error('位移矢量 zmf未定义或为空或 zmf中的元素超过2!');
end
if isstr(I)
    [I,M] = imread(I);
end
if zmf <= 0
     error('缩放倍数 zmf的值应该大于0!');
end
%% Step2 通过原始图像和缩放因子得到新图像的大小,并创建新图像。
[IH,IW,ID] = size(I);
ZIH = round(IH*zmf); % 计算缩放后的图像高度,最近取整
ZIW = round(IW*zmf); % 计算缩放后的图像宽度,最近取整
ZI = zeros(ZIH,ZIW,ID); % 创建新图像
%% Step3 扩展矩阵I边缘
IT = zeros(IH+2,IW+2,ID);
IT(2:IH+1,2:IW+1,:) = I;
IT(1,2:IW+1,:)=I(1,:,:);IT(IH+2,2:IW+1,:)=I(IH,:,:);
IT(2:IH+1,1,:)=I(:,1,:);IT(2:IH+1,IW+2,:)=I(:,IW,:);
IT(1,1,:) = I(1,1,:);IT(1,IW+2,:) = I(1,IW,:);
IT(IH+2,1,:) = I(IH,1,:);IT(IH+2,IW+2,:) = I(IH,IW,:);
%% Step4 由新图像的某个像素(zi,zj)映射到原始图像(ii,jj)处,并插值。
for zj = 1:ZIW         % 对图像进行按列逐元素扫描
    for zi = 1:ZIH
        ii = (zi-1)/zmf; jj = (zj-1)/zmf;
        i = floor(ii); j = floor(jj); % 向下取整
        u = ii - i; v = jj - j;
        i = i + 1; j = j + 1;
        ZI(zi,zj,:) = (1-u)*(1-v)*IT(i,j,:) +(1-u)*v*IT(i,j+1,:)...
                    + u*(1-v)*IT(i+1,j,:) +u*v*IT(i+1,j+1,:);
    end
end
end

注:这个函数是我之前在网上上找的,一个前辈创作的,不知道后来我改了没有,想找前辈(前辈信息,注释上有,非常感谢!!)原文章没找到。贴在这里是 构建自己的 matlab 体系的时候用到了。

2、调用实例

imshow(Henan,[]);
axis on
imshow(imblizoom(Henan,0.5),[]);
axis on
imshow(imblizoom(Henan,2),[]);
axis on

结果:
在这里插入图片描述

相关文章:

  • Matlab 求不规则图形的 内切圆和外接圆 函数
  • Matlab 画地图时搞定经纬度注释 函数
  • Matlab 从全国 shp 中扣出某一省份的shp并画图 函数
  • Matlab 根据 shp 裁剪矩阵/图像 函数
  • 误差理论与平差基础学习笔记(Ⅱ)
  • Linux bash 编程笔记(基础篇)
  • 基于C语言 的实现数学上常用的功能
  • C++ 编程笔记【1】(基础篇)
  • 对各种单位的汇总
  • Linux Vim 编辑器的使用笔记
  • GNSS 常用缩略语汇总
  • Origin 使用笔记
  • 对 VIIRS/NPP 夜光数据的解读
  • matlab 对数组/矩阵 的一些常用操作+如何判断两个含有nan的矩阵是否相等?
  • Matlab 计算年积日
  • ES6指北【2】—— 箭头函数
  • 〔开发系列〕一次关于小程序开发的深度总结
  • echarts花样作死的坑
  • egg(89)--egg之redis的发布和订阅
  • EventListener原理
  • Hibernate最全面试题
  • JavaScript 基本功--面试宝典
  • JavaScript的使用你知道几种?(上)
  • Javascript设计模式学习之Observer(观察者)模式
  • js
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Rancher如何对接Ceph-RBD块存储
  • SQL 难点解决:记录的引用
  • 关于springcloud Gateway中的限流
  • 排序算法学习笔记
  • 悄悄地说一个bug
  • 如何解决微信端直接跳WAP端
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 函数计算新功能-----支持C#函数
  • 选择阿里云数据库HBase版十大理由
  • ​iOS实时查看App运行日志
  • ​渐进式Web应用PWA的未来
  • #git 撤消对文件的更改
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $.ajax()方法详解
  • (4) PIVOT 和 UPIVOT 的使用
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)hibernate配置管理
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十五)使用Nexus创建Maven私服
  • (四) Graphivz 颜色选择
  • (转)linux 命令大全
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net实现客户区延伸至至非客户区
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .net项目IIS、VS 附加进程调试
  • @Transactional 竟也能解决分布式事务?
  • [ACTF2020 新生赛]Upload 1
  • [Android] Amazon 的 android 音视频开发文档