• Matlab 实用代码集


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

    1、函数多输入多输出

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

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

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

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

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

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

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

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

    1. InImage(InImage < 0) = NaN;
    2. Image = 10*log10(InImage);
    3. %% 第一种
    4. Value_max = max(Image(:));
    5. Value_min = min(Image(:));
    6. % 像素归一化
    7. 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

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

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

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

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

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

    6、人机交互选取数据

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

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

    7、颜色替换

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

    1. image = imread('测试.JPG'); % 读取图像
    2. figure('Name','原图')
    3. imshow(image); % 显示
    4. R = image(:,:,1); % 红色
    5. G = image(:,:,2); % 绿色
    6. B = image(:,:,3); % 蓝色
    7. index = find(R<20 & G<20 & B<20); % 索引,找出被替换颜色的范围
    8. R(index) = 255; % 红色通道赋值
    9. G(index) = 255; % 绿色通道赋值
    10. B(index) = 255; % 蓝色通道赋值
    11. Out_Image(:,:,1) = R; % 输出图像红色通道
    12. Out_Image(:,:,2) = G; % 输出图像绿色通道
    13. Out_Image(:,:,3) = B; % 输出图像蓝色通道

    9. 图片添加地理信息

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

    1. % Read a JPEG image from a file.
    2. Image = imread('_J6A5783.JPG');
    3. % 定义图片经纬度范围
    4. lonlim = [-20 20]; % 经度范围[max min]
    5. latlim = [-10 10]; % 纬度范围[max min]
    6. rasterSize = size(Image); % 栅格(图片、数据)大小(行、列)
    7. R = georefcells(latlim,lonlim,rasterSize,'ColumnsStartFrom','north');
    8. % R.RowsStartFrom = 'east'
    9. % 生成Geotiff文件
    10. filename = 'Geo-Hlz' + ".tif";
    11. geotiffwrite(filename, Image, R)
    12. % 创建地图并显示数据
    13. figure('Name','效果图')
    14. usamap(Image,R)
    15. geoshow(filename)

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

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

    1. close all;clear;clc;
    2. long =[120 121 122 119 118 115 130 129 128 127]; %经度
    3. lat =[ 60 61 60 59 57 56 55 61 68 64]; %维度
    4. Hight =[ 12 15 16 17 11 15 15 19 9 21]; %高度
    5. Num =[ 1 2 5 3 4 6 1 0 8 4]; %数量
    6. figure('Name','3D数据可视化')
    7. scatter(long,lat,40,Num,'filled');
    8. ax=gca;
    9. ax.XDir='reverse';
    10. %view(-31,14)
    11. xlabel('经度')
    12. ylabel('维度')
    13. zlabel('高程/m')
    14. cb=colorbar;
    15. cb.Label.String='人数/人';
    16. figure('Name','4D数据可视化')
    17. scatter3(long,lat,Hight,40,Num,'filled')
    18. ax=gca;
    19. ax.XDir='reverse';
    20. view(-31,14)
    21. xlabel('经度')
    22. ylabel('维度')
    23. zlabel('高程/m')
    24. cb=colorbar;
    25. cb.Label.String='人数/人';

  • 相关阅读:
    React给方法使用useState
    Oracle EBS 部署JSP
    喵 ~ 小程序搭建记录
    网安入门17-XSS(打Cookie)
    Servlet 架构思路(MVC)
    聊聊“死锁“
    CCES软件开发ADSP-21489的详解
    HTML5的学习
    C# RulesEngine 规则引擎:从入门到看懵
    最全最简洁的gitlab代码提交流程
  • 原文地址:https://blog.csdn.net/weixin_41649786/article/details/127651399