Matlab 求二维矩阵的2个或者更多个峰值

求一个峰值的方式我就不多说了,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);

最后就能得到想要数量的波峰峰值以及其各自的位置信息

%找到需要的若干个波峰
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

以下是完整代码,如果您觉得有帮助,可以帮忙点赞收藏!

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

版权声明:本文为博主作者:龟速派原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/Gao_shan123/article/details/133794425

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2024年4月22日
下一篇 2024年4月22日

相关推荐