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*');
總結
以上是生活随笔為你收集整理的matlab 图像 局部极值,[转载]matlab 图像局部求极值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019年密码与安全新技术讲座-课程总结
- 下一篇: SOTA级发丝抠图模型PP-Mattin