matlab 图像 局部极值,[转载]matlab 图像局部求极值

求极值的具体语句:

极值:

data是你的数据,

find(diff(sign(diff(data)))==-2)+1

找到极大值的位置

find(diff(sign(diff(data)))==2)+1

找到极小值的位置

data(find(diff(sign(diff(data)))==-2)+1)和

data(find(diff(sign(diff(data)))==2)+1)

返回的是极大值和极小值

要想diff(sign(diff))出现-2,只有是sign的结果为-1,1排列的时候,-1代表,前一次的diff运算前面的数值比后面大,1代表,后一次diff运算后面的数值比前面大,因而,x-a,x,x+b,a,b均为正数,则x为极小值。

同理判断极大值。

find查找到极值的索引后还要+1,是因为,差分运算(diff)后的数据的长度比原始数据少1,见help。

%方法一

x=0:0.01:20;

y=2*sin(x/2)+cos(2*x)/2;

% indmax=find(diff(sign(diff(y)))<0)+1;%极大值点

% indmin=find(diff(sign(diff(y)))>0)+1;%极小值点

ind=find(diff(sign(diff(y)))~=0)+1;%极值点

plot(x,y,x(ind),y(ind),'ro')

%方法二

x=0:0.01:20;

y=2*sin(x/2)+cos(2*x)/2;

indmax=intersect(find(diff(y)>0)+1,find(diff(y)<0));%极大值点

indmin=intersect(find(diff(y)<0)+1,find(diff(y)>0));%极小值点

plot(x,y,x(indmax),y(indmax),'ro',x(indmin),y(indmin),'go')

%方法三

x=0:0.01:20;

y=2*sin(x/2)+cos(2*x)/2;

yf=y(2:end-1)-y(1:end-2); %前向差分

yb=y(2:end-1)-y(3:end); %后向差分

I=find(yf.*yb>=0)+1; %寻找极值点(不考虑首尾两点)

plot(x,y,'b',x(I),y(I),'r*');

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值