因为动图表现更直观一点,因此想用动图,就学习了一下,以下是学习结果。

目录

  • 1. 情景介绍
  • 2.代码:
  • 3.效果展示:
  • 4. 不用2%线性拉伸的影像进行快速动图制作

1. 情景介绍

(1) 现有2张图片 hua1.jpg(650 x 650 x 3), hua2.jpg(904 x 600 x 3).想以动图(gif)的形式进行展示。
(2) hua1.jpg

hua2.jpg

2.代码:

fclose all
clear all
clcaddpath 'D:\gx_GF12\matlab测试'%读入两幅rgb影像
im1_data_name='C:\Desktop\hua1.png';
im2_data_name='C:\Desktop\hua2.png';
%rgb影像进行2%线性拉伸,适合遥感影像等,可不做拉伸。一般需要对float,single影像进行2%线性拉伸
im1_strech=img_strech(im1_data_name,3);%3表示3通道rgb数据
im2_strech=img_strech(im2_data_name,3);
%两幅影像才见到相同大小
im1=im1_strech(1:500,1:500,:);
im2=im2_strech(1:500,1:500,:);
%影像展示
imshow(im1);
imshow(im2);
%因为gif文件不支持三维数据,需调用rgb2ind将图像数据(im)中的RGB数据转换为索引图像(A)
[im1_ind,map1] = rgb2ind(im1,256);
[im2_ind,map2] = rgb2ind(im2,256); %写成gif文件
dt = 1; %设置两张影像展示间隔时间为2s
imwrite(im1_ind,map1,'D:\test10.gif','gif','LoopCount',Inf,'DelayTime',dt); % 写入第一张影像
imwrite(im2_ind,map2,'D:\test10.gif','gif','WriteMode','append','DelayTime',dt);%写入第二张影像,(此处可写为循环,写多幅影像)

2%线性拉伸的函数:

function img_matrx_new= img_strech(img_file_name,n)%对float,single影像进行2%线性拉伸,到0-255之间。
%输入影像可以是单波段,也可以是RGB,当然也可以是多波段影像%   streched_image=img_strech(img_filename,band_num)
%   img_filename:表示原始影像的文件名
%   band_num:表示输入影像的波段数目img_matrix = imread(img_file_name);for i=1:nimg=img_matrix(:,:,i);% 这里默认输入图像为单通道[ylen, xlen] = size(img);%     fprintf(' ... Img Xlen: %d pixels\n', xlen);%     fprintf(' ... Img Ylen: %d pixels\n\n\n', ylen);% 线性拉伸max_val = max(img(:));%img(find(img<=1))=nan;min_val = min(img(:));% temp_img=img(:);% min_val = min(temp_img(find(temp_img~=0)));% %b=min(B(find(B~=0)));%     fprintf(' ... ... ... ... ... ... ... ... ... ...\n');%     fprintf(' ... Min Val is %d \n', min_val);%     fprintf(' ... Max Val is %d \n', max_val);%     fprintf(' ... ... ... ... ... ... ... ... ... ...\n\n');% 统计直方图% 输入图像为16位,取值范围为 0 到 65535bins = 0:65535;histcount = histc(img(:)', bins); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%histcount(1) =0; %因为自己使用的影像,有很多nodata_value,但是数值为0,所以加这一步骤%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%清除临时变量 clear bins max_val min_val; % 直方图裁剪,计算左值和右值 [l_val, r_val] = calc_lr_val(histcount, xlen*ylen, 0.02); % 根据左值和右值,将图像由16位映射至8位 img_8bit = img_map(img, l_val, r_val); % 保存结果 img_matrx_new(:,:,i)=img_8bit;%imwrite(img_8bit, 'res_blue.png');end% return (img_matrx_new);end
% ------------------------------------
% 计算直方图左右裁剪的灰度值
% 2015/07/01
%
% Input histcount --> 直方图
% tt --> 图像像素个数
% per --> 左右裁剪的百分比
%
% Output l_val --> 左值
% r_val --> 右值
% ------------------------------------function [l_val, r_val] = calc_lr_val(histcount, tt, per)%     fprintf(' ... ... ... ... ... ... ... ... ...\n');
%     fprintf(' ... CALC LEFT AND RIGHT VALUE \n');
%  per_tt = tt*per;  % 按百分比裁剪的像素个数 % 计算左值tmp = 0;l_val=0;for i = 1:length(histcount)tmp = tmp + histcount(i);if tmp >= per_ttl_val = i;break;endend% 计算右值tmp = 0;r_val=0;for i = 1:length(histcount)tmp = tmp + histcount(length(histcount)-i+1);if tmp >= per_ttr_val = length(histcount)-i+1;break;endend%     fprintf(' ... Stretch Percentage is %d%%\n', per*100);
%     fprintf(' ... Left Val is %d \n', l_val);
%     fprintf(' ... Right Val is %d \n', r_val);
%     fprintf(' ... ... ... ... ... ... ... ... ...\n\n');return
% ------------------------------------
% 将图像映射至 [0, 255] 区间
% 2015/07/01
%
% Input img_16bit --> 16位原图像
% l_val --> 映射左值
% r_val --> 映射右值
%
% Output img_8bit --> 输出8位拉伸后图像
% ------------------------------------function [img_8bit] = img_map(img_16bit, l_val, r_val)[xlen, ylen, c] = size(img_16bit);img_8bit = zeros(xlen, ylen);%     fprintf(' ... ... ... ... ... ... ... ... ...\n');
%     fprintf(' ... IMG MAPPING FROM 16BIT TO 8BIT \n');
%     fprintf(' ... Img mapping begin ... ... \n');
%  % 按照左右值映射img_8bit = (img_16bit - l_val).*(255/(r_val-l_val));img_8bit = uint8(round(img_8bit));%     fprintf(' ... Img mapping finshied !!! !!! \n\n');
%
return

3.效果展示:

4. 不用2%线性拉伸的影像进行快速动图制作

fclose all
clear all
clcfiles=dir('D:\sift_code\dense_match\ge_jn\files');del = 0.5; % time between animation framesfor i = 3 : length(files)Fig = figure(1);temp_name=files(i).name;filename =temp_name(4:end-10);imshow([files(i).folder,'\',files(i).name]);title(filename);drawnow % capture the plot as an imageframe = getframe(Fig);im = frame2im(frame);[imind,cm] = rgb2ind(im,256);if i == 3imwrite(imind,cm,'D:\test.gif','gif','Loopcount',inf,'DelayTime',del);elseimwrite(imind,cm,'D:\test.gif','gif','WriteMode','append','DelayTime',del);end
end

参考文章:
https://blog.csdn.net/xsz591541060/article/details/97641058
https://blog.csdn.net/qq_42145674/article/details/89959689

MTALAB制作动图相关推荐

  1. 动图如何在线制作?教你一键在线制作动图

    相信不少小伙伴都想要自己制作gif动图,由于很多小伙伴并不知道动态图片怎么制作,所以就会选择从网上寻找gif在线制作的方法.但是网上很多制作gif动图的工具使用起来比较麻烦的时候应该怎么办呢?这时候, ...

  2. Qt—绘图与定时器(制作动图)

    绘图使用画家类QPainter void Dialog::paintEvent(QPaintEvent *event) {QPainter painter(this);//在此文本框绘图//前两个参数 ...

  3. r语言 html gif,推荐 :6步教你用R语言制作动图

    原标题:推荐 :6步教你用R语言制作动图 引言 数据可视化可能是数据科学领域最重要却通常最少被提及的部分. 我这么说是因为创造数据故事和可视化对你的顾客最终怎么看待你的工作有巨大的影响.数据科学不仅仅 ...

  4. MATLAB制作动图并保存

    目的 制作PPT时常常会使用到动图,自己录屏制作实在是太麻烦,就琢磨了一下MATLAB制作动图的方法,网上找的教程学习了一下. 一通百通,只简单做了个正弦曲线的动图 过程 存成的曲线如下图所示: 程序 ...

  5. MATLAB制作动图或视频

    (来点有用的)MATLAB制作动图或视频 主要函数介绍 情况一:对数据进行操作 情况二:对界面进行操作 其他 by HPC_ZY 在CSDN发现一个类似的居然要VIP才能查看,顿时有点无语,所以自己做 ...

  6. 利用Python制作动图演示坐标变换理论

    利用Python制作动图演示坐标变换理论 永磁同步电机是一个非线性.强耦合的物理系统,因而不便直接进行控制.后有研究人员创造性的提出了坐标变换理论(后逐渐成为矢量控制的一个部分),让永磁同步电机得以转 ...

  7. 利用NCL和Shell制作动图

    利用NCL和Shell制作动图 两个步骤: 1. NCL画图 必须保存成PDF格式,且frame设置为翻页: begincam_file1 = addfile("./run/FHIST_LK ...

  8. 13渐变 过渡 动画 利用多张图片制作动图

    13渐变 过渡 动画 利用多张图片制作动图 一.渐变 线性渐变 设置普通渐变background:linear-gradient(颜色1,颜色2)设置渐变比例background:linear-gra ...

  9. 如何用视频制作动图? 视频转gif动图怎么做?

    gif动图由于它的表现形式深受大众的喜爱.当我们想要自己制作的gif动图的时候应该怎么办呢?制作动图的方法有很多种,其中视频转gif是比较常见的制作gif动图的一种,而且制作过程非常的简单.只需要使用 ...

最新文章

  1. iptables(二)--扩展详解
  2. Kafka集群部署详细步骤(包含zookeeper安装步骤)
  3. OpenStack绝非昨日黄花 | 人物志
  4. appium java 点击事件_“按钮点击”在Appium Android测试中给出“处理命令时出现未知的服务器端错误 . ”...
  5. HTML5 API详解(14):Notification 实现桌面提醒
  6. SpringCloud工作笔记077---SpringBoot中使用JPA操作数据库
  7. @Target({ElementType.METHOD, ElementType.TYPE})
  8. SQL Server 和 Oracle 的常用函数对比
  9. 最简单的视音频播放示例8:DirectSound播放PCM
  10. Java并发编程基础-锁-synchronized状态变换
  11. 文件读写: 二进制方式和文本方式的区别
  12. 0018计算机应用基础国考考试大纲,《计算机应用基础》考试大纲
  13. 二叉树遍历的几种常见方法
  14. mysql数据库链接_连接MySQL数据库
  15. 西数桌面云储存服务器,小白折腾NAS 篇九:超详细拆解小记 — Western Digital 西部数据 Elements 桌面硬盘12TB...
  16. Win10:更改桌面路径位置,彻底解放你的C盘
  17. 计算机无法显示硬盘盘符,电脑硬盘不显示盘符怎么办 移动硬盘不显示盘符的原因...
  18. 程序员的九阳神功,学会逆天改命!
  19. Win10右键菜单没有新建选项怎么解决?
  20. 金融跨计算机考研,计算机跨金融——我的二战考研复习计划给你们

热门文章

  1. 闲聊机器学习医疗应用的“最后一公里”
  2. 海思Hi3518ev300视频监控摄像开发板防雷防静电推荐图
  3. JAVA JDBC 基础学习之 JDBC 原理(一)
  4. 2023年软件设计师中级(考点分析+复习笔记+历年真题+电子版课本
  5. 基于docker-compose部署es集群和es-head
  6. vue组件间相互传值
  7. 使用vuex对兄弟组件传值_Vue 组件之间传值(父子组件传值,vuex传值)
  8. 关于计算机的作文论文怎么写,怎么写关于介绍电脑的作文
  9. vscode python 格式化_python格式化代码只懂autopep8?这里有更好的
  10. Linux卸载RabbitMQ