对矩阵进行处理的时候,有时候需要求局部最大值,但是matlab中的max()函数只能求最大的一个值,并且无法返回最大值所处的位置,为此,本文利用matlab的find和sort函数实现了求矩阵局部最大值。
M = rand(9,9); % 矩阵 m = 3; % 范围大小 np = 3; % 最大值个数 local = zeros(fix(9/3*9/3*np),3); n = 0; % 局部最大值计数器 [a,b] = size(M); subMatrix = zeros(m,m); % 子矩阵,局部最大值为这个矩阵内的最大值 for x = 1:m:a for y = 1:m:b subMatrix = M(x:x+m-1,y:y+m-1); s = sort(subMatrix(:),'descend'); for k = 1:np [r,c] = find(M == s(k)); n = n+1; local(n,:) = [r,c,s(k)]; end end end
注:本文中的目标矩阵的行列数恰好是子矩阵的整数倍,请根据实际情况进行修改。