首页主机MATLABpause(matlab pause)

MATLABpause(matlab pause)

编程之家2024-01-28121次浏览

一、请教matlab处理问题,请问下面每一步的意思,

i=imread('face1.jpg');I=rgb2gray(i);

MATLABpause(matlab pause)

BW=im2bw(I);

figure,imshow(BW)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% minimisation of background portion

[n1 n2]=size(BW);r=floor(n1/10);

c=floor(n2/10);%取最近的较小整数

MATLABpause(matlab pause)

x1=1;x2=r;

s=r*c;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%以下的循环的目的就是将图像的外围归零,做简单处理

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%{

MATLABpause(matlab pause)

for i=1:10%以图像尺寸百分之一的窗口大小滑动

y1=1;y2=c;

for j=1:10

if(y2<=c| y2>=9*c)|(x1==1| x2==r*10)%这一判断条件就是把图像最外围全部归零

loc=find(BW(x1:x2, y1:y2)==0);%find查找矩阵中满足条件的位置,[r,c,v]=find(X),r,c为不为零元素的行列,v为其数值,X也可由逻辑表达式替代

%这里loc应该是BW窗口中的为黑像素的个数,就是后面的o值,在下面的if中做了一个条件判断

[o p]=size(loc);

pr=o*100/s;

if pr<=100

BW(x1:x2, y1:y2)=0;

r1=x1;r2=x2;s1=y1;s2=y2;

pr1=0;

end

imshow(BW);

pause(1);

end

y1=y1+c;

y2=y2+c;

end

x1=x1+r;

x2=x2+r;

end

figure,imshow(BW)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% detection of face object

%}

[L,num]= bwlabel(BW,8);%标记图像中的八连通区域注:这里的num为51,即图中共分为51个区域

BB= regionprops(L,'BoundingBox');%区域特征,boundingbox是指包围每个区域的最小矩形,数目与num相等

%区域特征还包含area,即每个区域的像素数 centroid

%即每个区域的重心

BB1=struct2cell(BB);%此函数是将结构体中各变量的值分别提取出了组成一个元细胞矩阵

BB2=cell2mat(BB1);%将单个的元组矩阵组成一个单一矩阵

[s1 s2]=size(BB2);%因为BB矩阵存储的是矩形的对角坐标,是四位,所以又元组矩阵转变成单一矩阵%就是51*4=204也就是s2的值

mx=0;

for k=3:4:s2-1%每四个数字对应一个矩形,matlab中的数组下标都是从1开始

p=BB2(1,k)*BB2(1,k+1);%

if p>mx&(BB2(1,k)/BB2(1,k+1))<1.8%后面一个条件的含义??%

mx=p;

j=k;

end

end

figure,imshow(I);

hold on;

rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r')

二、matlab gui 循环计算过程实现暂停和继续计算

前段时间的一个问题【matlab gui循环计算过程实现暂停和继续计算】(编号426631696194936852)是题主问的吧?

由于度娘弱智又恶心的过滤机制,后续的交流一直不顺畅(我试图通过评论说明多次被删,也看到多次有评论提醒,但打开却看不到),现把代码上传到这里。

基本做法是,在进行循环之前,加上以下几句:

fig=gcf;figure(fig);

setappdata(fig,'Disu_Pause',0)

set(fig,'WindowButtonDownFcn','setappdata(gcbf,''Disu_Pause'',~getappdata(gcbf,''Disu_Pause''))');

然后,在每个循环体的最里层的最前面,加上

%通过获取自定义的数据Disu_Pause判断是否暂停;关闭窗口则退出

try

whiletrue

if~getappdata(fig,'Disu_Pause')

break

else

pause(0.01)

end

end

catchme

return

end

基本思想:

1、通过自定义窗口的应用数据避免使用全局变量;

2、设置窗口的WindowButtonDownFcn回调函数在点击鼠标时改变应用数据;

3、在每个循环中,如果状态为pause,则利用形式上的死循环进行等待(每次0.01秒,是系统时钟的精度),如果不是状态,则退出等待的循环体;

4、用try-catch结构,在关闭窗口时返回(即退出程序)。

三、Matlab 中while循环语句的用法

while语句用法如下:

格式:

while(条件)

循环体

end

【注】:条件成立时,执行循环体

扩展资料:

Matlab注意事项:

一、安装出错时,可换注册码继续安装,到同一目录;

二、【谨记】安装路径不要有中文名称;

三、成功安装完毕之后,如果遇到matlab启动后,窗口在打开一到两秒后就自动关闭了,可按以下方法试试:【假设你安装的目录为c:\MATLAB\】(不过不建议安装到C盘,那样会影响系统速度!)

1、确认安装好后,在此路径下c:\MATLAB\bin\win32有一个名为 atlas_Athlon.dll的文件;

2、我的电脑上右击点"属性",再在"高级"中点"环境变量",在"系统变量"中点击"新建"输入以下信息:变量名:BLAS_VERSION变量址:

c:\MATLAB\bin\win32\atlas_Athlon.dll

3、这样之后,启动MATLAB,不过又出现一个问题:窗口显示

To get started, select MATLAB Help or Demos from the Help menu. The element type"name" must be terminated by the matching end-tag"</name>".

Could not parse the file:c:\matlab\toolbox\ccslink\ccslink\info.xml

【解决方案】找到c:\matlab\toolbox\ccslink\ccslink\info.xml这个文件,用记事本打开【注意,这是重点,或者写字板】找到有一行这样的<name>Link for Code Composer Studio?/name>,大概是在第七行吧,把这句的/name>改成</name>【加左尖括号】,保存文件,退出,即可。

4、安装MATLAB成功!

无法运行可以考虑使用兼容模式运行,比如windows 2000模式

参考资料来源:百度百科:MATLAB

发包软件(Linux下最强流量发包利器)textbox滚动条(控制TextBox 的滚动条)