数字图像处理中的常用特殊矩阵及MATLAB实现详解

一、前言

       Matlab的名称来源于“矩阵实验室(Matrix Laboratory)”,其对矩阵的操作具有先天性的优势(特别是相对于C语言的数组来说)。在数字图像处理中,为了提高编程效率,我们可以使用多种方式来创建特殊的矩阵或图像处理矩阵,如全零矩阵、全1矩阵、单位矩阵、空矩阵个、序列矩阵、稀疏矩阵、随机矩阵等。这些函数在图像模拟、统计分析、优化算法等多个领域都有广泛的应用。通过调整参数和结合MATLAB的其他功能,可以灵活地生成各种满足特定数字图像处理需求的随机矩阵。

二、特殊矩阵的生成及应用

1.全零矩阵

       元素全为零的矩阵称为全零矩阵,MATLAB可以使用zeros创建全零矩阵。如zeros(5),生成一个5×5的矩阵元素全为零的方阵,而zeros(3,4)则生成3×4的矩阵元素全为零的矩阵

       注意:如果使用zeros生成全零矩阵,其在MATLAB图像显示是黑色。

>> I=zeros(256,256);

>> imshow(I),title('全零矩阵图像')

2.全1矩阵

      元素全为1的矩阵称为全1矩阵,MATLAB可以使用ones创建全1矩阵。如ones(5),生成一个5×5的矩阵元素全为1的方阵,而ones(3,4)则生成3×4的矩阵元素全为1的矩阵。

注意:如果一个矩阵是全1矩阵,其在MATLAB图像显示是白色。

>> onesMatrix=ones(256,256);

>> figure,imshow(onesMatrix),title(‘全1矩阵’)

>> whos onesMatrix

       矩阵元素的数据类型为double,一个像素占8个Bytes。

3.单位矩阵

       如果一个方阵对角线上的元素全为1,而其他的元素全为零则称单位矩阵,MATLAB可以使用eys创建单位矩阵。

如eye(5),生成一个5×5的单位矩阵。

I=eye(5);

figure,imshow(I)

whos I

 

        矩阵元素的数据类型为double。

4. 空矩阵

空矩阵是指有一个或多个等于零的维度(0×0,0×1,1×0)

示例:

emptyMatrix=[]          %创建空矩阵

size(emptyMatrix)       %行列数都为0

length(emptyMatrix)     %矩阵长度为0

numel(emptyMatrix)      %元素个数为0

isempty(emptyMatrix)    %判断是否为空矩阵,返回逻辑值1(真)

5. 序列矩阵

在MATLAB中创建一个序列矩阵,可以使用冒号操作符 : 或者函数 linspace 和 meshgrid。以下是一些示例:

 5.1 创建一个1到20间隔为2的序列矩阵(从1开始):

1)使用冒号操作符 “:”创建

>> A = 1:2:20;

2) 使用linspace函数创建

>> A=linspace(1,19,10) %保存10个数据

5.2 生成一个二维网格采样点矩阵和生成三维曲面图

       Matlab的meshgrid函数是用于生成网格坐标的函数,它可以将二维或三维数组作为输入,生成对应的网格坐标矩阵。这个函数在绘制三维图形、进行数值分析等方面有着广泛的应用。

语法格式: meshgrid(x, y)或meshgrid(X,Y,Z)

其中,x和y可以是任何一维或二维数组,分别表示x轴和y轴的坐标;X和Y可以是任何一维或二维数组,表示x轴和y轴坐标的范围;Z是可选的,如果提供,则生成三维图形的网格坐标矩阵。

示例1-生成二维网格采样点矩阵并绘制其矩阵点图

%使用meshgrid生成二维矩阵点并绘制二维坐标点图
clear all;
close all;
clc;
x=1:3;y=2:5;
 [X,Y]=meshgrid(x,y)
 plot(X,Y,'+','LineWidth',2,'Color','r'),title('显示meshgrid生成的二维网格点');
 xlim([-2,5]);
 ylim([-2,6]);
 grid on

上面程序运行结果如下所示:

    由上可知X和Y都是3行4列的矩阵,X矩阵的每一列值相同,分别是1、2和3,Y矩阵的每一行值都相同,分别是2、3、4和5,这是因为MATLAB的坐标原点是左上角,X正方向水平向右,Y正方向垂直向下。

示例2-生成三维曲面图:

[X,Y] = meshgrid(-2:.2:2, -4:.4:4);

Z = X .* exp(-X.^2 - Y.^2);

surf(X,Y,Z)%创建三维曲面图

6. 稀疏矩阵

       稀疏矩阵—在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。MATLAB提供了sparse函数来创建稀疏矩阵。在MATLAB中,创建一个稀疏矩阵可以通过sparse函数实现,该函数接受行索引、列索引和非零值作为输入,并生成一个稀疏矩阵。

以下是创建稀疏矩阵的示例代码:

% 定义行索引、列索引和对应的值  

rows = [1; 3; 4; 5;6];  

cols = [1; 2; 3; 4; 8];  

values = [10; 20; 30; 35;40];  

% 使用sparse函数创建稀疏矩阵  

S = sparse(rows, cols, values);  

% 显示稀疏矩阵  

disp('显示稀疏矩阵的行列和非零值'),disp(S);  

% 如果你想要看到稀疏矩阵的完整形式(包括零),可以使用full函数  

disp('显示稀疏矩阵的完整形式'),disp(full(S));  

上面程序运行结果如下:

7.随机矩阵

       在MATLAB中,生成随机矩阵的常用函数是rand、randn、randi等。这些函数提供了不同的随机分布选项,以满足不同的应用需求,下面对上述各函数的含义和使用方法进行简要说明。

7.1 rand 函数

     rand函数生成均匀分布的随机数。其基本语法是rand(n)生成一个n×n的矩阵,rand(m,n)生成一个m×n的矩阵,而rand(size(A))生成与矩阵A相同大小的矩阵。

应用实例:生成一个5×5的均匀分布随机矩阵,并计算其均值和标准差。

MATLAB程序代码如下:

% 生成5x5的随机矩阵并计算其均值和标准差  

A = rand(5);  

% 计算均值  

%meanA = mean(A(:));  

meanA=mean2(A);  

% 计算标准差  

%stdA = std(A(:));  

stdA=std2(A);

disp('随机矩阵A:');  

disp(A);  

disp(['均值: ', num2str(meanA)]);  

disp(['标准差: ', num2str(stdA)]);

运行结果如下图所示:

7.2  randn

      randn(random normal distribution)是一种产生标准正态分布的随机数或矩阵的函数。randn函数生成标准正态分布的随机数(均值为0,标准差为1)。其语法与rand相同。

应用实例:生成一个10×10的标准正态分布随机矩阵,并计算其均值和标准差,并绘制其直方图以验证分布。

MATLAB程序代码如下:

% 生成10x10的标准正态分布随机矩阵  

B = randn(10,10);  %rand(10,10) 等价于rand(10)

meanB=mean2(B);   

stdB=std2(B);

% 绘制直方图  

figure;  

histogram(B(:), 'Normalization', 'pdf');  

title('标准正态分布随机矩阵的直方图');  

xlabel('值');  

ylabel('概率密度');

disp('随机矩阵B:');  

disp(B);  

disp(['均值: ', num2str(meanB)]);  %数据(n*n)不足够多,均值不绝对为0

disp(['标准差: ', num2str(stdB)]); %数据(n*n)不足够多,标准差不绝对为1

7.3  randi 函数

      在MATLAB命令提示符下,输入help  randi就会显示如下帮助:

randi- Pseudorandom integers from a uniform discrete distribution.因此randi函数生成指定范围内的均匀分布的伪随机整数。其基本语法是randi([imin, imax])生成介于imin和 imax之间的随机整数(包含imin和imax),或者randi(imax)生成1到imax之间的随机整数。

应用实例:生成一个10×12的矩阵,其元素为0到7(每个像素占用3bit)之间的随机整数,并计算矩阵各行的和,矩阵的最小值,最大值和平均值,显示其数字图像和randi分布随机矩阵的直方图。

MATLAB程序代码如下:

%%randi的应用

% 生成10x12的随机整数矩阵  

C = randi([0, 7], 10, 12);  

% 计算每行的和  

rowSums = sum(C, 2);  

meanC=mean2(C);  %计算其均值

minC=min(C(:));  %计算其最小值

maxC=max(C(:));  %计算其最大值

disp('随机整数矩阵C:');  

disp(C);  

disp('每行的和:');  

disp(rowSums);

figure,imshow(C,[]);

figure;  

histogram(C(:));  

title('randi分布随机矩阵的直方图');  

xlabel('灰度值');  

ylabel('频数');

程序的部分运行结果如下:

randi生成的矩阵C如下:

        矩阵C最大值maxC是7,最小值minC是0,平均值meanC是3.45(接近平均数(0+1+2+3+4+5+6+7)/8=3.5)。

矩阵C的图像显示如下图所示:

                   

       矩阵C的灰度直方图如下图所示:

             

       由直方图也可以看出,该分布其接近于均匀分布。大家可以使用上面程序生成100x120的随机整数矩阵并进行图像分析(矩阵的最大值、最小值和平均值和直方图等)。

      撰写博客不宜,如果大家觉得本文对大家学习有帮助,请点赞、收藏和评论,谢谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如,我们输入lookfor inpu…

JDK的配置

安装好JDK后,配置三个环境变量 第一步,配置JAVA_HOME. 先找到JDK的安装目录,然后复制路径,在电脑的环境变量里增添变量名为JAVA_HOME,变量值为 C:\Program Files\Java\jdk1.8.0_192。(具体根据你的JDK安装路径&…

使用flutter做圆形进度条 (桌面端)

前言 最近收到一个需求,需要使用flutter 来做一个圆形进度条,这可难倒我了,毕竟我是做前端的,flutter 之前接触的也少,但没办法,既然需求有了,也得硬着头皮上了,先来看看做的效果。…

一些电脑的操作技巧,你知道吗?

我整理了几个电脑使用的实用技巧,能够帮你提升办公效率,一起来看看吧! 技巧一:反方向移动单元格 一般来讲,我们按下【Tab】键、【Enter】键的时候,会切换到右边或者下边的单元格,想要反向移动…

c-periphery RS485串口库文档serial.md(serial.h)(非阻塞读)(VMIN、VTIME)

c-peripheryhttps://github.com/vsergeev/c-periphery 文章目录 NAMESYNOPSISENUMERATIONS关于奇偶校验枚举类型 DESCRIPTIONserial_new()serial_open()关于流控制软件流控制(XON/XOFF)硬件流控制(RTS/CTS)选择流控制方法 serial_…

基于Java+SpringMvc+Vue技术的慈善捐赠平台设计与实现(源码+LW+部署讲解)

项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑! 软件开发环境及开发工具: 操作系统:Windows 10、Windows 7、Windows 8 开发语言:java 前端技术:JavaScript、VUE.j…

水源地(水库)水质、水位、流量监测系统

随着全球气候变化和工业化进程的加速,水库作为重要的水资源储备和调节设施,其水质、水位和流量的监测与管理显得尤为重要。水库水质、水位、流量综合监测系统正是在这样的背景下应运而生,旨在实现对水库水资源的全面、实时、准确的监测与管理…

【吊打面试官系列-Dubbo面试题】Dubbo 服务降级,失败重试怎么做?

大家好,我是锋哥。今天分享关于 【Dubbo 服务降级,失败重试怎么做?】面试题,希望对大家有帮助; Dubbo 服务降级,失败重试怎么做? 可以通过 dubbo:reference 中设置 mock"return null"…

基于微信小程序+SpringBoot+Vue的自助点餐系统(带1w+文档)

基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序的自助点餐系统前后台分离,让商品订单,用户反馈信息,商品信息等相关信息集中在后台让管理员管理,让用…

【杰理蓝牙开发】AC695x 音频部分

本文主要记录 杰理蓝牙audio接口的使用,包括ADC和DAC原理的介绍和API接口的使用。 【杰理蓝牙开发】AC695x 音频部分 0. 个人简介 && 授权须知1. ADC【音频数据采集】硬件部分1.1 单片机引脚1.2 硬件电路设计1.3 MIC 输入通路解释 2. 【DAC】音频信号编解码…

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型

目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天(chat completion) 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…

生成式AI入门,我推荐这本书

对于生成式AI入门,选择一本合适的书籍是至关重要的。以下是一本备受推荐的书籍,它非常适合作为生成式AI入门的首选: 《生成式AI入门与AWS实战》 专业评论 这本书非常适合用于入门生成式 AI 应用程序开发。互联网上关于这个主题的信息铺天盖地…

ByteBuffer调试工具类

一个可以形象展示ByteBuffer内容的方法,便于调试 package com.example.netty;import java.nio.ByteBuffer;public class ByteBufferUtil {/*** 打印ByteBuffer的内容,以十六进制和ASCII字符的形式展示。** param buffer 要展示的ByteBuffer*/public sta…

实战|EDU挖掘记录-某学校sql注入挖掘记录

本文来源无问社区,更多实战内容,渗透思路尽在无问社区http://www.wwlib.cn/index.php/artread/artid/9755.html 某大学的办公系统,学号是我从官网下载的优秀人员名单找到的,初始密码为姓名首字母加身份证后六位,我是社…

ctfshow-web入门-php特性(web142-web146)

目录 1、web142 2、web143 3、web144 4、web145 5、web146 1、web142 要求 v1 是数字,之后将 v1乘以 0x36d(即16进制的869)五次,然后将结果转换为整数并赋值给变量 $d,使用 sleep 函数使程序休眠 $d 秒&#xff0c…

Linux进程控制——进程终止

文章目录 进程终止从main函数return返回exit退出_exit和exit的区别程序异常终止perror与errno 进程终止 我们之前在命令行界面要终止一个进程时直接ctrlc来干掉一个进程是比较暴力的做法 实际上我们通常会使用一些函数调用接口或者系统调用接口来控制进程的退出 就像我们完成…

Redis使用场景-热点数据缓存

什么是缓存? 为了把一些经常访问的数据放入缓存中已减少对数据库的访问,从而减少数据库的压力,提高程序的性能。【内存中存储】-效率快 缓存的原理 什么样的数据适合放入缓存中? 1.查询频率高且修改频率低 2.数据安全性低 哪些组件…

3.k8s:服务发布:service,ingress;配置管理:configMap,secret,热更新;持久化存储:volumes,nfs,pv,pvc

目录​​​​​​​ 一、服务发布 1.service (1)service和pod之间的关系 (2) service内部服务创建访问 (3)service访问外部服务 (4)基于域名访问外部 (5&#xff…

Docker快速搭建WordPress博客系统网站

WordPress 是一款广泛使用的开源内容管理系统(CMS),用于创建和管理网站和博客。 主要功能: 易于使用的界面:WordPress 提供了一个直观的后台管理界面,使用户能够轻松创建、编辑和管理网站内容。 主题和模板:WordPress 提供了各种主题和模板,可根据网站需求进行选择和自…

Volatile vs Atomic

Volatile vs Atomic 1、Volatile 变量2、Atomic 变量 💖The Begin💖点点关注,收藏不迷路💖 volatile和atomic这两个关键字经常会出现在我们的视线中。它们虽然看似相似,实则功能大不相同。 1、Volatile 变量 作用&…