MATLABpause(matlab pause)
一、请教matlab处理问题,请问下面每一步的意思,
i=imread('face1.jpg');I=rgb2gray(i);
BW=im2bw(I);
figure,imshow(BW)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% minimisation of background portion
[n1 n2]=size(BW);r=floor(n1/10);
c=floor(n2/10);%取最近的较小整数
x1=1;x2=r;
s=r*c;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下的循环的目的就是将图像的外围归零,做简单处理
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%{
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