01年数学建模A题程序.docx

上传人:b****6 文档编号:7941722 上传时间:2023-01-27 格式:DOCX 页数:6 大小:29.07KB
下载 相关 举报
01年数学建模A题程序.docx_第1页
第1页 / 共6页
01年数学建模A题程序.docx_第2页
第2页 / 共6页
01年数学建模A题程序.docx_第3页
第3页 / 共6页
01年数学建模A题程序.docx_第4页
第4页 / 共6页
01年数学建模A题程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

01年数学建模A题程序.docx

《01年数学建模A题程序.docx》由会员分享,可在线阅读,更多相关《01年数学建模A题程序.docx(6页珍藏版)》请在冰豆网上搜索。

01年数学建模A题程序.docx

01年数学建模A题程序

程序1:

计算最大内切圆半径的粗略范围。

运行前请先将程序中“F:

\01A\图片\”改为图片在你电脑中的实际储存路径。

运行时用鼠标在切片图中点出内切圆的大致位置;

运行后显示的r是半径估计区间的下限,r1是上限。

clear,clc

ima=imread('F:

\01A\图片\');%读入一张图片

figure

imshow(ima)%显示这张图像

[j,i]=ginput

(1);%在坐标上取圆心

i=round(i);j=round(j);

r=1;s=0;

[xxyy]=yuan(j,i,r);

fork=1:

length(xx)

s=s+ima(yy(k),xx(k));

end

whiles==0

r=r+1;

[xxyy]=yuan(j,i,r);

s=0;

fork=1:

length(xx)

s=s+ima(yy(k),xx(k));

end

end

r=r-1%rmin

r1=sqrt((sum(sum(ones(size(ima))))-sum(sum(ima)))/pi)

程序2:

计算最大内切圆半径、圆心坐标,作投影图与三维图。

运行前同样要修改路径。

运行时要调用函数,在命令窗口当tt=100时程序运行完毕,运行时间一般不超过2分钟。

运行结束后,工作空间中,aax,aay为利用计算出的数据拟合后的球心横、纵坐标。

ar为从每张图计算出的最大内切圆半径。

clear,clc

r=28;tt=0;

forii=0:

99

tt=tt+1

ima=imread(['F:

\01A\图片\'int2str(tt-1)'.bmp']);

ima1=ima;

ima1([1512],:

)=0;ima1(:

[1512])=0;

fori=3:

3:

510

forj=3:

3:

510

ifsum(sum(ima(i-1:

i+1,[j-2j+2])))+sum(sum(ima([i-2i+2],j-1:

j+1)))==12

ima1(i-1:

i+1,j-1:

j+1)=0;

end

end

end

%eg=edge(ima,'sobel');求出切片的边缘点的位置

%[yeg,xeg]=find(eg);边缘点的横纵坐标

[yeg,xeg]=find(ima1);

fork=1:

length(xeg)

[xxyy]=yuan(xeg(k),yeg(k),r);

ifrem(k,5)==1

fl=floor(r/sqrt

(2));

ima(yeg(k)-fl:

yeg(k)+fl,xeg(k)-fl:

xeg(k)+fl)=1;

end

fork1=1:

length(xx)

ima(yy(k1),xx(k1))=1;%剔除区域C以外的点

end

end

[yc,xc]=find(1-ima);

len2=500000;len22=0;

fork=1:

length(xc)

len2=500000;

fork1=1:

length(xeg)

t=(xc(k)-xeg(k1))*(xc(k)-xeg(k1))+(yc(k)-yeg(k1))*(yc(k)-yeg(k1));

ift

len2=t;

end

end

iflen2>len22

len22=len2;

z=k;

end

end

len2=500000;len22=0;

fork=:

:

fork0=:

:

len2=500000;

fork1=1:

length(xeg)

xz=xc(z)+k0;yz=yc(z)+k;

t=(xz-xeg(k1))*(xz-xeg(k1))+(yz-yeg(k1))*(yz-yeg(k1));

ift

len2=t;

end

end

iflen2>len22

len22=len2;kx=k0;ky=k;

end

end

end

ax(tt)=yc(z)+ky-256;

ay(tt)=xc(z)+kx-256;

ar(tt)=sqrt(len22);

end

z=0:

99;

A=polyfit(z,ax,7);

B=polyfit(z,ay,7);

aax=polyval(A,z);

aay=polyval(B,z);

figure

(1)

plot(aax,aay)

gridon

figure

(2)

plot(aax,z)

gridon

figure(3)

plot(aay,z)

gridon

figure(4)

plot3(aax,aay,z,'r')

gridon

函数

function[xx,yy]=yuan(x,y,r)

k=1;

forj=x-r+1:

x-1

fori=y-r+1:

y-1

if(x-j)*(x-j)+(y-i)*(y-i)

xx(k)=j;

yy(k)=i;

k=k+1;

break;

end

end

end

fori=y-r+1:

y-1

forj=x-r+1:

x-1

if(x-j)*(x-j)+(y-i)*(y-i)

xx(k)=j;

yy(k)=i;

k=k+1;

break;

end

end

end

xx(k:

k+1)=[x-r+1x];

yy(k:

k+1)=[yy-r+1];

xx=[xxxx2*x-xx2*x-xx];

yy=[yy2*y-yyyy2*y-yy];

以上程序根据国防科技大学向为、王瑛、伍微的论文而编写,但在确定最大圆半径时并不是用二分法,请大家注意。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1