首首悄先在matlab新建文件保存为goldmin.m
function[x,y] = goldmin(f,xa,xb,s)
% 黄金分割法桥芹粗求解函数最小值
% 输入
% f 待优化函数
g = (sqrt(5)-1)/2% 黄金分割比,0.618
a = xa
b = xb
x2 = a + g*(b-a)
x1 = a + b - x2
y1 = f(x1)
y2 = f(x2)
while abs(b-a) >s
if y1<y2
b = x2
x2 = x1
x1 = a + b - x2
end
>>f = @(x) 2*x^2-x-1
>>[x,y]=goldmin(f,-1,1,0.001)
x =
0.2497
y =
-1.1250
>>
即当x=0.2497时取最小值-1.125
菲波那契数列
经研究发现,相邻两个菲波那契数的比值是随序号的增加而逐渐趋于黄金分割比的。即f(n-1)/f(n)→0.618…。由于菲波那契数都是整数,两个整数相除之商是有理数,所以只是逐渐逼近黄金分割比这个无理数。但是当我们继续计算出后面更大的菲波那契数时,就会发现相邻两数之比确实是非常接近黄金分割比的敏镇。
image_1=imread('E:\ebook\lena.bmp')%读入图片image_1=rgb2gray(image_1)%灰度化
[m,n]=size(image_1)%计算图片的像素点个数,行列,n是列数,Gray
num=zeros(1,256)%存放各灰度级出现的次数
p=zeros(1,256)%存放慧铅各灰度级的比率
image_1=double(image_1)%双精度化
for i=1:m
for j=1:n
num(image_1(i,j)+1)=num(image_1(i,j)+1)+1%统计各灰度级的像素点个数
end
end
for i=1:256
p(i)=num(i)/(m*n)%计中碧销算各灰度级出现的比率
end
for i=2:256
if p(i)~=0
st=i+1%实现寻找出现比卖游率不为0的最小灰度值
break
end
end
for i=256:-1:1
if p(i)~=0
nd=i-1%实现找出出现比率不为0的最大灰度值
break
end
end
%以下程序实现利用最小方差和法找出门阈值
w=infth=0
for t=st:nd%最小非零比率灰度值到最大非零比率灰度值
qt1=0qt2=0%前景后景像素点比率
u1=0 u2=0%前景后景均值
v1=0 v2=0%
for i=1:t
qt1=qt1+p(i)
end
for i=1:t
u1=u1+i*p(i)/qt1
end
for i=1:t
v1=v1+((i-u1)^2)*p(i)/qt1
end
for i=t+1:256
qt2=qt2+p(i)
end
for i=t+1:256
u2=u2+i*p(i)/qt2
end
for i=t+1:256
v2=v2+((i-u2)^2)*p(i)/qt2
end
if qt1*v1+qt2*v2<w
th=tw=qt1*v1+qt2*v2
end
end
for i=1:m
for j=1:n
if (image_1(i,j)+1>th)
image_2(i,j)=255
else
image_2(i,j)=0
end
end
end
image_2=uint8(image_2)%读入读出变换
figure,imshow(image_2)%显示二值化后的图片
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)