Matlab 实用代码集

2023-05-16

        本博客将存放一些常用的Matlab代码片段,整理成博客,并持续更新,以便写代码可以调用。

1、函数多输入多输出

        Matlab写函数的时候,输入输出个数经常是不固定的,

narginchk(1,3);                         %输入参数个数必须是1-3个,否则宝座
nargoutchk(0,1);                        %输出参数个数必须是0-2个,否则报错
% 不同输入个数参数情况
if nargin == 1
    Var2=2;                             % 无第二个参数输入,则第二个入参赋值
end

        实例:可以参考我的博客《利用matlab实现SAR 图像线性拉伸显示》https://blog.csdn.net/weixin_41649786/article/details/118404909?spm=1001.2014.3001.5501

2、图片去掉黑边(空值)

        遥感图像中,经常会有NAN值,显示的时候会有黑边,影响美观

clear;close all;clc;
Image  = imread('D:\Code\Matlab\遥感图像变化检测\Area\202201121.tif');
Image(Image<0) = nan;
him = imshow(Image);
set(him, 'AlphaData', ~isnan(Image))

3、数据进行对数-归一化

        有的数据需要显示出更好的效果,需要对数据进行先对数,然后归一化。例如SAR图像散射值大的能达到2^16=65536,直接看图片是一片黑,因此需要调亮暗部细节。

InImage(InImage < 0) = NaN;
Image = 10*log10(InImage);
%% 第一种
Value_max = max(Image(:));
Value_min = min(Image(:));
% 像素归一化
OutImage = uint8((255/(Value_max-Value_min))*Image);        %图像(像素)归一化

也可以用拉伸显示的方式进行显示, 可以参考我的博客《利用matlab实现SAR 图像线性拉伸显示》https://blog.csdn.net/weixin_41649786/article/details/118404909?spm=1001.2014.3001.5501

4、经纬度坐标数据类型转换

        经纬度坐标有两种形式保存:一种是度度度(小数形式,例如117.649)形式的数据,一种是度分秒(117-38-57.98东、117-38-57.98E)形式的数据,因此经常需要将两种数据进行转换。

第一种:度度度转化为度分秒,核心:度数=取整,分数=取整((值-度数)*60),秒数=((值-度数)*60-分数)*60

Str = abs(Str);                         % 排除负号的影响
degree = fix(Str);                      % 度
minute = fix((Str-degree)*60);          % 分
second = ((Str-degree)*60-minute)*60;   % 秒

 第二种:度分秒转化为度度度,核心:度分秒=度+分/60+秒/3600=度

second = str2double(Str(temp1(2)+1:Leng));                  %秒"
minute = str2double(Str(temp1(1)+1:temp1(2)-1));            %分'
degree = str2double(Str(1:temp1(1)-1));                     %度°
coor = PN*(((second/60)+minute)/60+degree);                 %经纬度(十进制)

5、计算N天前(后)的日期

 day1 = datetime(datestr(now,'yyyy-mm-dd'))+caldays(1)     % 明天
 day0 = datetime(datestr(now,'yyyy-mm-dd'))                % 今天
 day_1 = datetime(datestr(now,'yyyy-mm-dd'))-caldays(1)    % 昨天

6、人机交互选取数据

        弹出文件选择框,选择想要的数据

% 选择需要处理的tif文件
[FileName,PathName,index] = uigetfile({'*.shp'},'tif文件读取','MultiSelect','on');
% 判断是或选择

7、颜色替换

        替换图片中的某一种(类)的颜色,可以参考我的博客《利用Matlab替换图片部分颜色》https://blog.csdn.net/weixin_41649786/article/details/125291724?spm=1001.2014.3001.5501

image = imread('测试.JPG');                      % 读取图像
figure('Name','原图')
imshow(image);                                  % 显示
R = image(:,:,1);                               % 红色
G = image(:,:,2);                               % 绿色
B = image(:,:,3);                               % 蓝色

index = find(R<20 & G<20 & B<20);               % 索引,找出被替换颜色的范围
R(index) = 255;                                 % 红色通道赋值
G(index) = 255;                                 % 绿色通道赋值
B(index) = 255;                                 % 蓝色通道赋值
Out_Image(:,:,1) = R;                           % 输出图像红色通道
Out_Image(:,:,2) = G;                           % 输出图像绿色通道
Out_Image(:,:,3) = B;                           % 输出图像蓝色通道

9. 图片添加地理信息

        给图片添加地理信息需要用到:GeographicCellsReference、GeographicPostingsReference、MapCellsReference、MapPostingsReference等其中的某一个类(对象),通过创建这些类(对象),来生成包含地理信息的R,代码如下:

% Read a JPEG image from a file. 
Image = imread('_J6A5783.JPG');
% 定义图片经纬度范围
lonlim = [-20 20];      % 经度范围[max min]
latlim = [-10 10];      % 纬度范围[max min]
rasterSize = size(Image);       % 栅格(图片、数据)大小(行、列)
R = georefcells(latlim,lonlim,rasterSize,'ColumnsStartFrom','north');
% R.RowsStartFrom = 'east'

% 生成Geotiff文件
filename = 'Geo-Hlz' + ".tif";
geotiffwrite(filename, Image, R)
% 创建地图并显示数据
figure('Name','效果图')
usamap(Image,R)
geoshow(filename)

10. 数据可视化(3D、4D)

例如:经度、纬度、高度以及数量,利用不同颜色表示不同数据;

close all;clear;clc;

long  =[120 121 122 119 118 115 130 129 128 127];       %经度
lat   =[ 60  61  60  59  57  56  55  61  68  64];       %维度
Hight =[ 12  15  16  17  11  15  15  19   9  21];       %高度
Num   =[  1   2   5   3   4   6   1   0   8   4];       %数量

figure('Name','3D数据可视化')
scatter(long,lat,40,Num,'filled');
ax=gca;
ax.XDir='reverse';
%view(-31,14)
xlabel('经度')
ylabel('维度')
zlabel('高程/m')
cb=colorbar;
cb.Label.String='人数/人';

figure('Name','4D数据可视化')
scatter3(long,lat,Hight,40,Num,'filled')
ax=gca;
ax.XDir='reverse';
view(-31,14)
xlabel('经度')
ylabel('维度')
zlabel('高程/m')
cb=colorbar;
cb.Label.String='人数/人';

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab 实用代码集 的相关文章

随机推荐

  • 下篇 | 开发板AMR接收虚拟机Ubuntu传来的文件

    上篇笔记 xff1a 虚拟机Ubuntu向开发板AMR传送文件 已经做好了虚拟机向开发板传送文件的笔记啦 xff0c 然后有发送肯定有接收的 xff0c 不然就发空气啦 xff01 接下来 xff0c 写开发板如何接受虚拟机发送过来的文件的
  • 解决QT->setText()中文出现乱码问题,使用QString或者tr()均出现乱码。

    微软VC编译器源代码使用GB2312编码进行保存 源码中的汉字字符串在生成可执行文件的过程中被转换成了本地编码 Qt内部是使用Unicode编码 xff0c 即QString保存的是Unicode编码的字符串 Qt内部需要使用Unicode
  • Qt 下载图片并显示图片

    源码下载 xff1a 图片下载器 include 34 mainwindow h 34 include 34 ui mainwindow h 34 include lt QHostAddress gt include lt QDebug g
  • 海康威视 web3.0开发 常见错误 404,403

    海康威视 web3 0开发 常见错误 404 xff0c 403 配置情况 IE 浏览器 43 nginx 43 thinkPHP5 0 43 海康威视200万星光级红外球机1080P变焦云台球机DS 2DC4223IW D 关于如何使用网
  • 虚拟USB设备总结

    开发环境 xff1a windows 首先来总结最近研究的虚拟USB设备 xff0c 进而虚拟USB键盘成功了 xff0c 开心 xff01 得出了一个C S框架 xff0c 首先说一下客户端 客户端有两个部分 xff0c 用户空间工具和底
  • C#Winform:《DataGridViewComboBoxCell值无效》解决方案

    值无效 xff0c 可能是你下拉框选项 xff0c 没有这样的值 xff0c 而你却设置这个值 dataGridView1 Rows i Cells 1 Value 61 Hello World 解决方法就是在窗体的构造函数里添加如下代码
  • FFmpeg笔记

    1 下载 xff0c 配置 FFmpeg官网 xff1a https ffmpeg org 用的系统是Ubuntu18 04 所以直接apt get就可以了 sudo apt get install ffmpeg 2 简介 xff0c 上手
  • 《WPF中TextBox绑定Double类型数据,文本框不能输入小数点》解决方案

    在App cs文件里面 xff0c 重写OnStatup xff0c 添加下面一条语句即可 span class token keyword public span span class token keyword partial span
  • stm32 HAL库串口收发-中断接收DMA发送不定长数据

    使用的时候发现 xff1a 接收完一个字节立即用DMA的方式发送出去 xff0c 会出现数据的丢失 xff0c 如用串口调试助手发送1234 xff0c 返回的只有13 目前只能用缓存buf 43 协议结束 xff08 如0x0d 0x0a
  • headers Authorization

    var auth 61 96 host user host pass 96 const buf 61 Buffer from auth 39 ascii 39 strauth 61 buf toString 39 base64 39 con
  • 平衡车入门---MPU6050陀螺仪的使用

    平衡车入门 MPU6050陀螺仪的使用 一 MPU6050简介二 学习MPU6050的步骤三 I2C协议简介四 MPU6050硬件介绍五 MPU6050的几个重要寄存器六 原始数据的单位换算七 角度换算 滤波算法 一 MPU6050简介 M
  • C++ 为什么基类的析构函数要声明为虚函数

    1 为什么声明基类析构函数为虚函数 xff1f xff08 1 xff09 基类指针 指向 基类对象 xff1a 不用考虑基类析构函数是否声明为虚函数 xff08 2 xff09 基类指针 指向 派生类对象 xff1a 若基类析构函数不为虚
  • std::map find和count效率测试

    1 简介 在使用标准模板库中的map容器且遇到键值对的值为自定义struct或class类型时 xff0c 考虑到特殊场景 xff08 即不能确保key自始至终唯一 xff09 xff0c 若插入新元素 xff08 new 对象 xff09
  • 随机生成8位长字符串(大小写字母及数字组合)

    1 简要说明 项目上开发要用到随机生成一个8位长的字符串 xff08 类似Java工具类中的UUID xff09 xff0c 作为id来对同一事物的不同个体进行唯一标识 xff0c 如同一个班级里学生名字几乎不同 xff0c 偶尔会有重复
  • C++引用和指针区别

    1 C 43 43 引用和指针区别 xff1a 指针是一个新的变量 xff0c 指向另一个变量的地址 xff0c 我们可以通过访问这个地址来修改另一个变量 xff1b 而引用是一个别名 xff0c 对引用的操作就是对变量的本身进行操作指针可
  • TCP/UDP端口号

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是TCP UDP端口号 在IP网络中 xff0c 一个IP地址可以唯一地标识一个主机 但一个主机上却可能同时有多个程序访问网络 要标识这
  • C/C++ 电脑微信dat文件解密及工具分享

    1 前言 最近想整理下照片 xff08 回忆 怀旧 xff09 xff0c 以前也知道在微信pc端聊天时 xff0c 图片 视频 文档等文件会缓存在一个目录下 xff08 电脑微信 左下角三条杠 设置 文件管理 xff09 xff0c 点击
  • ODBC::SQLExecDirect返回-1 错误信息ORA-00604 ORA-01000

    在通过使用微软提供的ODBC SDK读取数据库 xff08 SELECT xff09 时 xff0c 发现Oracle读着读着就读不到数据了 xff08 MySQL和SQL Server是正常的 xff09 xff0c 经调试发现SQLEx
  • std::vector与deque首尾增删及遍历(应用于CListCtrl虚拟列表)混合性能测试

    1 简介 在工作项目中应用MFC类库的CListCtrl刷新加载数据 xff0c 一开始是用InsertItem SetItemText 和DeleteItem 等成员函数来实现数据在列表视图控件中的新增和删除 xff08 最多显示500条
  • Matlab 实用代码集

    本博客将存放一些常用的Matlab代码片段 xff0c 整理成博客 xff0c 并持续更新 xff0c 以便写代码可以调用 1 函数多输入多输出 Matlab写函数的时候 xff0c 输入输出个数经常是不固定的 xff0c narginch