求矩阵局部的几个最大值

    对矩阵进行处理的时候,有时候需要求局部最大值,但是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

注:本文中的目标矩阵的行列数恰好是子矩阵的整数倍,请根据实际情况进行修改。





猜你喜欢

转载自blog.csdn.net/sinat_35821976/article/details/80422338