求一个峰值的方式我就不多说了,find函数就可解决,求两个三个或者更多个该怎么解决?
首先介绍一个函数imregionalmax,具体用法大概就是这样:
PeaksMap = imregionalmax(matrix);
surf(double(PeaksMap));
matrix是原始二维矩阵,由于PeaksMap是logical类型,需要先转换为double
它可以把原始矩阵中所有波峰置1,其余数置0
然后我们就可用find函数搜索这个图中大小为1的值的位置
[maxRow,maxCol]=find(PeaksMap==1);
也就是所有波峰的位置信息就可以得到,再将位置信息带入到矩阵matrix中,那么所有波峰的峰值也可以求出来
peaks=zeros(1,length(maxCol));
for ii=1:length(maxRow)
peaks(ii)=matrix(maxRow(ii),maxCol(ii));
end
再对求出来的波峰值进行降序排列
%升序排列
[peaks_sort,I] = sort(peaks);
%所有波峰降序排列
peaks_sort=fliplr(peaks_sort);
最后就能得到想要数量的波峰峰值以及其各自的位置信息文章来源:https://www.toymoban.com/news/detail-785867.html
%找到需要的若干个波峰
peaks_num=2;%想搜索的波峰数目
maxRow1=zeros(1,peaks_num);
maxCol1=zeros(1,peaks_num);
findpeak=peaks_sort(1:peaks_num);
for jj=1:length(findpeak)
[maxRow1(jj),maxCol1(jj)]=find(matrix==findpeak(jj));
end
以下是完整代码,如果您觉得有帮助,可以帮忙点赞收藏!文章来源地址https://www.toymoban.com/news/detail-785867.html
clc;clear;close all;
% 创建一个示例的二维矩阵
matrix = ...
[0,0,0,0,0,0,0,0,0,0;
0,0,5,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,6,0,0,0;
0,0,0,0,0,0,0,0,0,0;
0,0,0,7,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,9,0,0;
0,0,11,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0;
];
figure(1)
surf(matrix);%三维波束图
PeaksMap = imregionalmax(matrix);%对所有波峰置1,其余数置0
figure(2)
surf(double(PeaksMap));%三维波束图
%找到所有波峰的坐标
[maxRow,maxCol]=find(PeaksMap==1);
%% 峰值排序
peaks=zeros(1,length(maxCol));
for ii=1:length(maxRow)
peaks(ii)=matrix(maxRow(ii),maxCol(ii));
end
%升序排列
[peaks_sort,I] = sort(peaks);
%所有波峰降序排列
peaks_sort=fliplr(peaks_sort);
%找到需要的若干个波峰
peaks_num=2;%想搜索的波峰数目
maxRow1=zeros(1,peaks_num);
maxCol1=zeros(1,peaks_num);
findpeak=peaks_sort(1:peaks_num);
for jj=1:length(findpeak)
[maxRow1(jj),maxCol1(jj)]=find(matrix==findpeak(jj));
end
到了这里,关于Matlab 求二维矩阵的2个或者更多个峰值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!