服务承诺





51Due提供Essay,Paper,Report,Assignment等学科作业的代写与辅导,同时涵盖Personal Statement,转学申请等留学文书代写。




私人订制你的未来职场 世界名企,高端行业岗位等 在新的起点上实现更高水平的发展




matlab主程序命令代码解析--matlab编程代写
2017-02-23 来源: 51Due教员组 类别: 写作技巧
对于大多数的留学生来说,出国在外留学面临的难题有许多,其中光是国外大学作业就已经足够让不少的学生们头疼,今天我们要为各介绍的就是matlab编程作业的写作,这种编程类的作业完成起来还是具有一定的难度,我们不仅要学会去熟悉matlab的运行环境,还要熟悉该程序的相关命令代码,才能够使用matlab执行一些我们想要完成的命令与操作,为了帮助各位更好的看懂matlab主程序命令代码,今天matlab编程代写平台就来为各位解析解析matlab主程序中那些常见的命令代码都代表着什么意思吧。
I0=imread('8.jpg'); % 必须为二值图像
I=im2bw(I0,0.4); %将图像I0 二值化处理,阈值取0.4,将结果保存在I
[y0 x0]=size(I); %读取二值化后的图像高度y0和宽度x0(即像素点数)
Range=sum((~I)'); %sum((~I))为求数列~I(~I为取I的相反)的每列的和,结果为一个行向量,在此sum((~I)’)
%即为求图像I中每行的和,sum((~I)’)=0即表示二值图像I中此行没有黑点。
Hy=0; %初始化参数Hy,用于存放图像存在黑点的行数(即图像的图中黑色文字实际高度)。
for j=1:y0 %for 语句循环,j从1开始每次加1,加到y0为止。
if (Range(j)>=1)
Hy=Hy+1; %如果第j行的像素点有黑色,Hy参数加1。
end %结束条件语句
end %结束for循环语句
RangeX=sum((~I)); %sum((~I))为求图像I中每列的和,sum((~I))=0即表示二值图像I中此列没有黑点。
Wx=0; %初始化参数Wx,用于存放图像存在黑点的列数(即图像的图中黑色文字实际宽度)。for i=1:x0 %for 语句循环,i从1开始每次加1,加到x0为止。
if (RangeX(i)>=1)
Wx=Wx+1; %如果第i列的像素点有黑色,Wx参数加1。
end %结束条件语句
end %结束for循环语句
Amp=24/Hy; % 将文字图像归一化到24像素点的高度。
I=imresize(I,Amp); %matlab自带缩放功能,Amp表示I缩放到24像素高度时原图像需要缩放的比例。
[y x]=size(I); %重新读取缩放后图像的大小
%I=bwmorph(~I,'skel',Inf);
%I=~I;
tic %启动定时器,开始计时
%====== 基本结构 =======% 详见电子参考书215页
% 第一类:竖(V);左斜(L);右斜(R);突变(P)
% 第二类:左半圆弧(C);右半圆弧(Q)
% 的三类:结构待定(T);
%=====================================%左端轮廓检测
Left=zeros(1,y); %创建一个1行y列的0矩阵
for j=1:y %从第一行检测到y行
i=1; %从第j行第1列(最左边)开始检
while ((i<=x)&&(I(j,i)==1))
=i+1; %当第j行i列为白点时,不是我们要检测的边界黑点,继续检测j行的i+1列
end
if (i<=x)
Left(j)=i; %如果在j行检测到了黑点,则将此点所在列的坐标i存入Left(j),表示此行的%最左边黑色像素点的横坐标
end %结束条件语句
end %结束for语句
for j=1:y-1
LeftD(j)=Left(j+1)-Left(j); %依次求取各行与相邻行的横坐标变化度,用来区分边界是左斜、右斜、竖直、
%圆弧,即微分(详见电子书216页)
end
%========== 结构特征提取 =============% 去掉急剧变化的两端
j=1; %从第1行开始检测
while ((Left(j)<1)&&(j<y)) %Left(j)<1即表示第j行没有黑色像素
j=j+1; %如果j行没有黑色像素,则继续扫描第j+1行
end
Y1=j; %将最底下的边界行数存入Y1。
j=y; %从最下端一行检测
while ((Left(j)<1)&&(j>1))
j=j-1; %当最下端一行没有黑色像素时检测上一行
end
Y2=j-1; %最后去掉最下端
%============== 右边 ==================%右端轮廓检测
Right=zeros(1,y); %创建一个1行y列的0矩阵
for j=1:y %从第一行检测到y行
i=x; %从第j行第x列(最右边)开始检测
while ((i>=1)&&(I(j,i)==1))
i=i-1; %当第j行i列为白点时,不是我们要检测的边界黑点,继续检测j行的i-1列
endif (i>=1) Right(j)=i; %如果在j行检测到了黑点,则将此点所在列的坐标i存入Right(j),表示此行的
%最右边黑色像素点的横坐
end %结束条件语句
end %结束for语
for j=1:y-
RightD(j)=Right(j+1)-Right(j); %依次求取各行与相邻行的横坐标变化度,用来区分边界是左斜、%右斜、竖直、圆弧
end
%=====================================% 顶端轮廓检测Top=zeros(1,x); %创建一个1行x列的0矩阵for i=1:x %从第1列检测到x列 j=1; %从第i列第j行(最上边)开始检测(纵坐标向下)
while ((j<=y)&&(I(j,i)==1))
%最上边黑色像素点的纵坐标
end
endfor i=1:x-1
TopD(i)=Top(i+1)-Top(i); %依次求取各列与相邻列的纵坐标变化度,用来区分边界是左斜、
%右斜、竖直、圆弧
end
%==============================% 去掉急剧变化的两端
i=1; %从第1列开始检测
while ((Top(i)<1)&&(i<x)) %Top(i)<1即表示第i列没有黑色像素
i=i+1; %如果i列没有黑色像素,则继续扫描第i+1列
end
X1=i; %将左边的边界列数存入X1
i=x; %从最右端一列检测
while ((Top(i)<1)&&(i>1))
i=i-1; %当最右端一列没有黑色像素时检测下一列
end
X2=i-1; %最后去掉最右端一列,取i-1列的列数存入X2
%===================================% 底部轮廓检测
Bottom=zeros(1,x); %创建一个1行x列的0矩阵
for i=1:x %从第1列检测到x列
j=y; %从第i列第j行(最下边)开始检测(纵坐标向下)
while ((j>=1)&&(I(j,i)==1)) %当第i列j行为白点时,不是我们要检测的边界黑点,继续检测i列的j-1行
j=j-1;
end
f (j>=1)
Bottom(i)=j; %如果在i列检测到了黑点,则将此点所在的纵坐标j存入Bottom(i),表示此行的
%最下边黑色像素点的纵坐标
end
end
for i=1:x-1
BottomD(i)=Bottom(i+1)-Bottom(i); %依次求取各列与相邻列的纵坐标变化度,用来区分边界是左斜、
%右斜、竖直、圆弧
end
%========== 数字 1 的宽度特征 =========%
Width=zeros(1,y); %新建一个1行y列的矩阵
for j=1:y %从第1行依次循环到第y行
Width(j)=Right(j)-Left(j); %用第j行的最右边横坐标减去本行的最左边横坐标,即得到第j行黑点所占的宽度
end
W=max(Width); %求向量Width()中最大的一个,即求字符所占最大宽度值,存入W
%=========以下这个求笔划的主要用于识别0和8
Po=0; % 用于检测笔划
Ne=0; % 用于检测笔划
NS=0; %笔划数
for i=X1+4:X2-4 %统计笔划时忽略字符图像的两边各4个像素,为了排除因字体不规范引起的干扰
%从第X1+4列开始,到X2-4列结束
for j=1:y-1 %从第i行的j=1行开始,扫描到y-1行结束
if ((I(j+1,i)-I(j,i))>0) % 由黑到白。即第i列的j+1行为白点,第j行为黑点
Po=Po+1; %当扫描到像素的黑白变化,即发现了有横向的笔划(出黑线)
if ((Po>=2)&&(j<=fix(0.7*y))) %fix函数为朝0的方向取整。如fix(3.5)=3,fix(-3.5)=3.此步是为了说明
%在图像的中心范围内笔画数不会太多,0最多有2个,8最多有3个
Po=3; %在到达最底边界前保证不超过3个笔划
end
else if ((I(j+1,i)-I(j,i))<0) % 由白到黑
Ne=Ne+1; %当扫描到像素的黑白变化,即发现了有横向的笔划(进入黑线)
if ((Ne>=2)&&(j<=fix(0.7*y)))
Ne=3; 同上
end
end
end
end
NS=[NS max(Po,Ne)]; %求出此列中P0和Pe最大数作为最大笔划数,同时更新NS
Po=0;
Ne=0; %为下次循环做准备
end
Comp=max(NS); %求出每列循环后得到的笔划最大数,用于判断0和8%========== 轮廓结构特征提取 ==========%
if (min(W,Wx)>10) %因为如果宽度过小了就可以直接判断是1了,10为设定的阈值。
StrokeT=StrDetect01(TopD,X1,X2,3,6); % 顶部基本结构检测 %调用子函数,判断顶部结构 StrokeL=StrDetect01(LeftD,Y1,Y2,3,5); % 左边基本结构检测 %调用子函数,判断左边结构
StrokeR=StrDetect01(RightD,Y1,Y2,3,5); % 右边基本结构检测 %调用子函数,判断右边结构
StrokeB=StrDetect01(BottomD,X1,X2,3,6); % 底部基本结构检测 %调用子函数,判断底部结构
%========== 识别 ==========%
Digit=Recognition(StrokeT,StrokeL,StrokeR,StrokeB,Comp) %输入由上步得到的结构参数得到识别结果
else
Digit='1' %如果字体宽度太窄,就只能是1了
end
t=toc %toc为停止计时器时间,并记录到t
%======= 显示 ======%
px=(1:x);
py=(1:y); %用于保存行数和列数
figure(1); %figure用于创建一个新窗口
imshow(I);
figure(2);
subplot(2,2,1); %subplot(m,n,p)打开一个有m行n列图像位置的窗口,并将焦点显示在第p个位置
plot(Left);grid %grid用于创建figure中网格线删掉则不显示网格线,plot用于描绘Left的坐标曲线
title('左轮廓'); %用于显示窗口的标题
subplot(2,2,2);
plot(Top);grid
title('上轮廓');
subplot(2,2,3);
plot(Right);grid
title('右轮廓');
subplot(2,2,4);
plot(Width);grid
title('宽度');
看完了以上matlab编程代写平台对于matlab主程序命令代码的详细解析后,各位留学生们还不赶紧保存在来,以后在看不懂matlab主程序代码的时候可以参考比较,这样我们就能够迅速的弄明白每一段代码以及变量所表达的含义,各位想要了解matlab的留学生们,可以先尝试学着去启动和熟悉matlab的基本操作。
51due教育引领海外留学的风向标,打造最好的留学教育品牌,我们为自己的品牌代言,不负留学生的期待。提供matlab代写的服务,包括留学生作业代写、统计作业代写、essay代写、assignment代写服务。
更多关于写作技巧的内容,点开主页栏目 即可快速获取,有论文代写需求,咨询24小时客服QQ:800020041,为您详细解答。-xz
