• [知识分享] MATLAB 可以将多个二维图合成为三维瀑布图
    在 MATLAB 中,你可以将多个二维图合成为三维瀑布图。具体来说,你可以将每个二维图的数据整理成合适的三维矩阵,然后使用 mesh 或 surf 函数来绘制三维瀑布图。下面是一个示例代码,演示如何从多个二维图创建一个三维瀑布图:示例数据说明假设你已经有三个时域响应数据对应不同的齿侧间隙 ( b ),现在我们将这些数据组合成一个三维瀑布图。步骤一:准备数据假设我们有以下数据:时间 ( t )齿侧间隙 ( b ) 的几个取值对应的振幅响应数据 ( z )步骤二:构建三维矩阵并绘制% 假设的数据 t = 0:0.1:10; % 时间轴 b_values = [0.1, 0.2, 0.3]; % 齿侧间隙的不同取值 % 振幅响应数据 (y_1(:,2)*rb2-y_1(:,3)*rb3-b),这里用随机数据代替 z1 = sin(t); % 第一个齿侧间隙对应的振幅响应 z2 = cos(t); % 第二个齿侧间隙对应的振幅响应 z3 = sin(t/2); % 第三个齿侧间隙对应的振幅响应 % 将数据堆叠成一个矩阵 Z = [z1; z2; z3]; % 每一行对应一个齿侧间隙的响应数据 % 构建时间和齿侧间隙的网格 [T, B] = meshgrid(t, b_values); % 绘制三维瀑布图 figure; surf(T, B, Z); xlabel('时间 t'); ylabel('齿侧间隙 b'); zlabel('振幅响应'); title('三维瀑布图');定制化绘图你可以根据需要对绘图进行定制化,例如调整颜色、视角等:% 调整视角 view(45, 30); % 使用网格线 grid on; % 添加颜色映射 colormap jet; colorbar;完整示例以下是一个完整的例子,包括所有步骤:% 假设的数据 t = 0:0.1:10; % 时间轴 b_values = [0.1, 0.2, 0.3]; % 齿侧间隙的不同取值 % 振幅响应数据 (y_1(:,2)*rb2-y_1(:,3)*rb3-b),这里用随机数据代替 z1 = sin(t); % 第一个齿侧间隙对应的振幅响应 z2 = cos(t); % 第二个齿侧间隙对应的振幅响应 z3 = sin(t/2); % 第三个齿侧间隙对应的振幅响应 % 将数据堆叠成一个矩阵 Z = [z1; z2; z3]; % 每一行对应一个齿侧间隙的响应数据 % 构建时间和齿侧间隙的网格 [T, B] = meshgrid(t, b_values); % 绘制三维瀑布图 figure; surf(T, B, Z); xlabel('时间 t'); ylabel('齿侧间隙 b'); zlabel('振幅响应'); title('三维瀑布图'); % 调整视角 view(45, 30); % 使用网格线 grid on; % 添加颜色映射 colormap jet; colorbar;通过上述步骤,你可以将多个二维图合成为一个三维瀑布图,并根据需要进行进一步的自定义和调整
  • [技术干货] 【数字识别】基于matlab数字仪表识别
    一、简介1 灰度化 (grayscale)将彩色图像转化为灰度图像的过程称为图像灰度化。彩色图像中的像素值由RGB三个分量决定,每个分量都有0-255(256种)选择,这样一个像素点的像素值可以有1600万种可能(256256256),而灰度图的像素点的像素值是RGB三个分量值相同的一种特殊的彩色图像, 只有256种可能。所以在图像处理中,往往将各种图像首先灰度化成灰度图像以便后续处理,降低计算量。灰度是指只含亮度信息,不含色彩信息的图像。黑白照片就是灰度图,特点是亮度由暗到明,变化是连续的。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征,使用灰度图的好处:① RGB的值都一样。② 图像数据即调色板索引值,就是实际的RGB值,也就是亮度值。③ 因为是256色调色板,所以图像数据中一个字节代表一个像素,很整齐。所以,做图像处理时一般都采用灰度图。要表示灰度图,就需要把亮度值进行量化,有四种方法:(1)分量法将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。(2)最大值法将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。(3)均值法将彩色图像中的三分量亮度求平均得到灰度图的灰度值。(4)加权平均法根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像,f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))。2 二值化(binaryzation)图像的二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。二值化的常用算法有:全局二值化: 一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是设定一个全局的阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。将大于T的像素群的像素值设定为白色(或者黑色),小于T的像素群的像素值设定为黑色(或者白色)。全局二值化,在表现图像细节方面存在很大缺陷。为了弥补这个缺陷,出现了局部二值化方法。局部二值化:按照一定的规则将整幅图像划分为N个窗口,对这N个窗口中的每一个窗口再按照一个统一的阈值T将该窗口内的像素划分为两部分,进行二值化处理。局部二值化也有一个缺陷。这个缺陷存在于那个统一阈值的选定。这个阈值是没有经过合理的运算得来,一般是取该窗口的平局值。这就导致在每一个窗口内仍然出现的是全局二值化的缺陷。为了解决这个问题,就出现了局部自适应二值化方法。局部自适应二值化:在局部二值化的基础之上,将阈值的设定更加合理化。该方法的阈值是通过对该窗口像素的平均值E,像素之间的差平方P,像素之间的均方根值Q等各种局部特征,设定一个参数方程进行阈值的计算,例如:T=aE+bP+c*Q,其中a,b,c是自由参数。这样得出来的二值化图像就更能表现出二值化图像中的细节。3 反色(inverse)反色的实际含义是将R、G、B值反转。若颜色的量化级别是256,则新图的R、G、B值为255减去原图的R、G、B值。这里针对的是所有图,包括真彩图、带调色板的彩色图(又称为伪彩色图)、和灰度图。真彩图不带调色板,每个象素用3个字节,表示R、G、B三个分量。所以处理很简单,把反转后的R、G、B值写入新图即可,比如一个点的颜色为(0,0,0),反色后为(255,255,255)。带调色板的彩色图,其位图中的数据只是对应调色板中的一个索引值,我们只需要将调色板中的颜色反转,形成新调色板,而位图数据不用动,就能够实现反转。
  • matlab 画三维图 及 画图
    matlab 画三维图 及 画图ton_tom 2021-04-19 20:50:40 104 收藏 6分类专栏: matlab版权画三维图在这里插入图片描述可以三维旋转至合适位置,再另存为.jpg效果更佳在这里插入图片描述gca(get current figure)clc;close all;clear;w = [11256   6291    4397    3209    2584    2063    1796 .... ;...    ;....];xlable = {'128m' '64m' '32m' '16m' '8m' '4m' '2m' '1024k' '512k' '256k' '128k' '64k' '32k' '16k'};ylable = { 's1'      's2'      's3'      's4'      's5'      's6'      's7'      's8'      's9'      's10'     's11'     's12'     's13'     's14'     's15'};% xlable = fliplr(xlable);% ylable = fliplr(ylable);surf(w)set(gca,'XTick',1:14);set(gca,'YTick',1:15);set(gca,'XTickLabel',ylable);set(gca,'YTickLabel',xlable);title('存储器山');xlabel('工作集大小(字节)');ylabel('步长(字)');zlabel('读吞吐率(MB/s)');% 固定化纵横比   axis vis3d% 透明hidden on%看不到遮挡的网格 off能看到alpha(0.8)  %[0 1]值越小透明度越大% shading faceted     %默认的方式    %shading flat   画矩形、正方形[左下角x位置 左下角y位置 矩形长 矩形高]>> rectangle('position',[0 0 5 5],'LineWidth',3);>> rectangle('position',[1.5 0.5 1 1]);>> rectangle('position',[3.5 3.5 3 1]);在这里插入图片描述画圆角矩阵rectangle('Position',[0 0 2 4],'Curvature',0.2)    1等高线及标签在这里插入图片描述[C,h] = contour(w);        #画等高线 clabel(C,h)                #线上加标签