2 Aug 2010

Matlab随机数生成函数



betarnd 贝塔分布的随机数生成器
binornd 二项分布的随机数生成器
chi2rnd 卡方分布的随机数生成器
exprnd 指数分布的随机数生成器
frnd f分布的随机数生成器
gamrnd 伽玛分布的随机数生成器
geornd 几何分布的随机数生成器
hygernd 超几何分布的随机数生成器
lognrnd 对数正态分布的随机数生成器
nbinrnd 负二项分布的随机数生成器
ncfrnd 非中心f分布的随机数生成器
nctrnd 非中心t分布的随机数生成器
ncx2rnd 非中心卡方分布的随机数生成器
normrnd 正态(高斯)分布的随机数生成器
poissrnd 泊松分布的随机数生成器
raylrnd 瑞利分布的随机数生成器
trnd 学生氏t分布的随机数生成器
unidrnd 离散均匀分布的随机数生成器
unifrnd 连续均匀分布的随机数生成器
weibrnd 威布尔分布的随机数生成器

22 Jun 2010

matlab生成螺旋矩阵

n=5;
a=rand(1,n);
b=a(bsxfun(@(i,j)i+j-1-n*(i+j>n+1),1:n,(1:n)'))

产生一个螺旋型n*n矩阵,如:n=5时:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

30 May 2010

matlab GUI资料

matlab GUI资料












































































































MATLAB GUI应用__MATLAB资料汇总
资料名称 免费下载地址
李显洪《Matlab7.x界面设计与编译技巧》PDF下载 http://www.matlabfan.com/thread-315-1-1.html
图形用户界面(GUI)制作-彩色教程(很多实例) http://www.matlabfan.com/thread-218-1-1.html
GUI演示实例:自制简易计算器 http://www.matlabfan.com/thread-114-1-1.html
MATLAB环境下使用摄像头 http://www.matlabfan.com/thread-899-1-1.html
关于Matlab GUI的课件ppt http://www.matlabfan.com/thread-576-1-1.html
GUI生成exe后,去掉执行程序时出现的dos窗口 http://www.matlabfan.com/thread-503-1-1.html
把Matlab中的GUI生成独立的应用程序(EXE文件) http://www.matlabfan.com/thread-284-1-1.html
在GUI中调用simulink模块,显示并修改参数 http://www.matlabfan.com/thread-1022-1-1.html
matlab gui实例,有很多,解释的也很详细 http://www.matlabfan.com/thread-775-1-2.html
基于Matlab GUI的贪食蛇游戏 http://www.matlabfan.com/thread-552-1-2.html
一个GUI的项目例子,希望对大家有帮助(转载) http://www.matlabfan.com/thread-551-1-2.html
GUI演示实例:主成分分析GUI代码---很经典 http://www.matlabfan.com/thread-113-1-2.html
一个实例搞定MATLAB界面编程 http://www.matlabfan.com/thread-245-1-2.html
Matlab GUI 编程(适用于Matlab的初学者) http://www.matlabfan.com/thread-95-1-2.html
强烈推荐!学习GUI的35个实例! http://www.matlabfan.com/thread-605-1-2.html
MATLAB精通GUI图形界面编程 http://www.matlabfan.com/thread-554-1-2.html
很好的GUI学习开发经验 http://www.matlabfan.com/thread-148-1-2.html
基于Matlab GUI的扫雷游戏 http://www.matlabfan.com/thread-149-1-2.html
GUI中各种控件的特征属性的意义和应用 http://www.matlabfan.com/thread-115-1-2.html
【GUI演示实例】Real-Time Stock Viewer(实时股票浏览器) http://www.matlabfan.com/thread-367-1-2.html
基于MATLAB_GUI的简易计算器源程序 http://www.matlabfan.com/thread-817-1-2.html

29 May 2010

ZT: matlab gui标准控件


三类:用户界面控件、下拉菜单、内容菜单。
1. 用户界面控件包括各种常见控件,如按钮、列表框、编辑框等;
2. 下拉菜单对象主要是各种菜单和子菜单;
3. 内容菜单主要是内容式菜单,如弹出式菜单等。


MATALB的标准图形用户界面
1. 消息对话框
msgbox函数。它不接受用户的任何输入,在用户单击OK按钮后,对话框自动关闭,然后返回程序中继续执行。
>> msgbox('欢迎使用MATLAB') % 建立一个没有标题的消息对话框
>> msgbox('欢迎使用MATLAB','MATALB','warn') %% 建立一个有标题的消息对话框

2. 错误对话框
errordlg函数。 >> errordlg %建立一个默认参数的错误对话框
>> errordlg('这是一个错误对话框','MATLAB error') %建立一个名为MATLAB error的错误对话框

3. 警告对话框
warndlg函数。 >> warndlg %建立一个默认参数的警告对话框
>> errordlg('这是一个警告对话框','MATLAB warning')

4. 帮助对话框
helpdlg函数。
>> helpdlg('你需要帮助吗?','MATLAB Help')

5. 进度条设置对话框
waitbar函数。作用是反映程序运行的完成情况。
h=waitbar(0,'请稍等......')
for i=1:10000
waitbar(i/10000)
end

6.输入对话框
inputdlg函数。
prompt={'输入梯形的上底:','输入梯形的下底','输入梯形的高'};%设置提示字符串
name='Enter trapeaia Data';%设置标题
numlines=1;%指定输入数据的行数
defAns={'20','50','40'};%设定默认值
Resize='on';%设定对话框尺寸可调节
answer=inputdlg(prompt,name,numlines,defAns,'on')%创建输入对话框

7. 列表对话框
listdlg函数。
p=path(path,'C:\MATLAB7 \work');%设置路径,若为当前目录,可以省略这一步
d=dir('C:\MATLAB7\work');%获取指针,若为当前目录,则d=dir
str={d.name};%获取目录内的文件名
[sel,ok]=listdlg('Liststring',str,'PromptString','请选择文件 ','SelectionMode','Multiple')%创建列表对话框。
文件选择成功后,单击“OK‘按钮,系统将选择好的文件序号存入相应向量sel,参数ok的值为1。

8.问题对话框
questdlg函数。提出一个问题,等待用户回答。默认下回答按钮有三个:Yes、No、Cancel。当用户单击任何一个按钮时,系统将该按钮名保存 在一个变量(ButtonName)中。如果用户关闭对话框,则系统将ButtonName置为空。
>> ButtonName=questdlg('你准备好了吗?','MATLAB quest','Yes','No','Cancel','Yes')

9.路径选择对话框
uigedir函数。用于用户查找和选择路径。
>> directoryname=uigetdir('C:\MATLAB7\work','浏览文件件')

10.选择文件对话框
uigetfile函数。用于用户选择所需的文件。
① >> [fn,pn,fi]=uigetfile('*.m','select a M-file')%打开一个选择M文件的对话框,并选择一个文件
② [fn,pn,fi]=uigetfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Pick a file')
%打开一个选择多种文件的对话框,并选择一个文件

11.文件保存对话框
uiputfile函数。用于保存文件。
① >> [fn,pn,fi]=uiputfile('*.m','Save selected a M-file')
② [fn,pn,fi]=uiputfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Save a file')
%建立多种保存文件的对话框,并选择一个文件

12. 页面设置对话框
pagesetupdlg函数。用来设置页面的各种属性、参数。调用格式为:
dlg=pagesetupdlg(fig)
该命令创建一个页面设置对话框,在该对话框用户可以设置页面的各种属性和参数。该命令只支持单一图形窗口的页面设置,参数fig也必须是单一的图形句柄,不可以是图形句柄向量或simulink图。
>> fig=figure;
>> dlg=pagesetupdlg(fig)

13.打印设置对话框
printdlg函数。用户可以对各种打印参数进行设置。
x=[-pi:0.02:pi];
y=cos(x);
fig=figure;
plot(x,y);
printdlg(fig);%打开Windows打印对话框
printdlg('-crossplatform',fig);%打开MATLAB打印对话框

14.颜色设置对话框
uisetcolor函数。用于用户设置图形的前景色或背景色。
① >> c=uisetcolor %建立一个颜色选择对话框
② %建立一个颜色对话框,并设置对话框的初始颜色,然后选择一种颜色用于一个图形对象。
x=[0:0.02:2*pi];
y=sin(x);
h=figure;
plot(x,y);
c=uisetcolor(h,'select color')

15.字体设置对话框
uisetfont函数。用于用户设置或修改文本字体、坐标轴或设置控件对象的显示文本的字体属性。
① >> s=uisetfont % 建立一个默认字体设置对话框,并设置一种字体。
② 对控件中的文本进行设置
T1=uicontrol('style','pushbutton','string',' 确定',...
'position',[200 320 60 20]); %创建一个按钮
T2=uicontrol('style','pushbutton','string','取消',...
'position',[200 220 60 20]); %创建一个按钮
s=uisetfont(T1) %打开字体设置对话框
set(T2,s) %将T1的设置复制到T2

ZT-matlab gui笔记



1、从最简单的开始
编程最基本的目的就是——我执行一个操作,程序做出一个反应。
“一个操作”包括:点击鼠标,拖动滑块,填写数据,选择选项……
“做出一个反应”包括:计算一些东西,然后储存在哪里,或者贴个图出来,或者显示在哪里……
-------------------------------------------------------------------------------------------------------------------
编程的基本思想:

目的->当点击按钮A时, 然后执行任务C,
则->进入按钮A的回调函数callback 里,写下任务C的代码。
-------------------------------------------------------------------------------------------------------------------
a:不知道callback在哪??右键单击按钮,view callbacks->选择callback)别的控件也一样。
a:不同的回调函数啥意思??
callBack
最常用的就是它。如果控件是按钮,那点击按钮时,则按钮下的 Callback就会执行;如果是滑块,则拖动滑块时,滑块名下的callback就会执行;总之,就是对控件默认操作时,matlab后台就会自动调用它名下的的callback。正常用途,全放在callback下就够了。如果其他的,实在是想知道,了解一下也未尝不可。
ButtonDownFcn
就是鼠标在它(代指各种控件)上面点击一下,你放在这个函数名下的代码就会执行。(ps:按钮的callback也是点击,所以会覆盖掉这个 buttondownfcn。)
CreateFcn
顾名思义,在生成这个控件,显示之前,执行你放在这个函数名下的代码;
DeleteFcn
一样。在控件要销毁,但是被毁灭之前执行这个函数名下的代码。貌似“真的要退出吗”这一类就是写在这里。
KeyPressFcn
当前控件获得焦点且有按键按下时执行。(什么是焦点?就是这个控件被鼠标点了(或者是tab轮选到了)。你打开一个记事本,然后再点这个网页,再随 便按几个按键,记事本上有字不?没有对吧。因为它没获得焦点,所以你的按键它不会反应的。只有你最后再点它一下,再按几个按键,结果怎么样?有字了吧?)这里的KeyPressFcn也是一样的道理。
一般在这下面的代码还会判断下按键是什么,然后执行相应的代码。
ResizeFcn,SelectionChangeFcn 不常用。也懒得去看了。附几句,控件都有Resize的属性,好像默认是不可调整,如果要用到这个函数,去把它打开先。
SelectionChangeFcn
是在群按钮 组件中,改变选择时,所执行的函数。
哪些控件支持哪些回调函数?很简单,你在它上面右键就可以看到了,点进去就可以编辑了。
可以在property inspect中在需要的回调函数下设置%automatic 就可以自动添加相应的回调函数框架。

2、常用控件代码框架参考
---------------------------------------------------------------------
Toggle Button 的callback一般写法
toggle button是什么?设计面板上,左边那一栏图标,看到它名字了吧?没看到?File->preference->GUIDE->把那个show names那一栏勾选上。好了,可以看到了吧 。知道是什么了吧?
拖进来,双击它,看到它的属性设置表。上面各种各样的属性,以后有时间慢慢研究。
点下它时,它默认value ='Max'
不点下它时,它value='Min'
--------
代码:

functon togglebutton1_callback(hObject,eventdata,handles)
%这一句,现在不用管。自动加的。
%%%以下是一般代码
button_state = get(hObject,'Value')
%控件甲的callback下面hObject就是控件甲,同理控件乙callback下的hObject......
if button_state==get(hObject,'Max')
%则怎么怎么怎么
else if button_state==get(hObject,'Min')
%则怎么怎么怎么
end
--------
备注:button_state随便取的变量名,存放按钮的选择状态,别以为它是什么喔。
如果你的button甲是放在一个buttonGroup里面,则button甲callback下的代码就要挪到buttonGroup下面去。因为buttonGroup的回调函数会覆盖掉它成员的回调函数。
----------------------------------------
Radio Buttons
------
代码:

右键点选你的Radio按钮,进入编辑callback
function ………………略
if(get(hObject,'Value')==get(hObject,'Max'))
%被选中了,你想怎么样
else
%不被选中,你想怎么样
end
-----------------------------------------
Check Boxes
-------
代码:

if(get(hObject,'Value')==get(hObject,'Max'))
%被选中了,你想怎么样
else
%不被选中,你想怎么样
end
------------------------------------------
Edit Text
-----------
代码:

function edit1_Callback(hObject,eventdata,handles)
user_string = get(hObject,'String'); %就得到了所输入的字符
%因为matlab是把所有的输入当作字符来看待,如果你是期望的到输入的数据的话,则:
user_entry= str2double(get(hObject,'String')); 这里进行一个数据类型转换。看函数名就知道了。
if isnan(user_entry) %nan就是not a number的简写。知道这个函数意思了吧?
errodlg('You must entry a number value','Bad Input','modal') %跳出一个对话框。
end
%正确得到了数值,以下输入你的其他代码
----------
附: 'Bad Input'是指窗口样式,就像我们在操作系统下,经常会跳出一个黄色感叹号的对话框,或者一个红叉的对话框;
modal是指窗口类型,就像一些程序跳出警告对话框,我们什么也不能做了,只能把那个对话框选择一个是或者不是,才能继续做其他事情。这种对话框就是modal类型。而通常的比如浏览器的界面,我们打开后,可以不管,然后打开别的对话框,这种就是非模态对话框。
默认在点击你的界面菜单栏或者界面上的其他组件后,这个edit text的callback都回被执行一遍,所以在你点确定按钮的时候,edit callback下读到的数据会更新的了,不用担心!
---------------------------------------------------
Sliders
---------
代码:

function slider1_callback(hObject,eventdata,handles)
slide_value=get(hObject,'Value');%获取滑块当前值
%别的代码
----------
附: 它的Max Min 属性设置了滑竿的最大最小范围值。
---------------------------------------------------
List Boxes
-----------
代码:

function ........
index = get(handles.listbox1,'Value'); %listbox1是你自己的那个控件的tag名字
file_list =get(handles.listbox1,'String'); %得到了你的listBoxes的列表
file_name = file_list{index};
%得到了所选择的项目名,一下写自己的代码
-------------------
附:
此 callback在鼠标在这个控件上松开或者特定的键盘按键松开(看你怎么设置它的别的属性的了)时候执行。
默认键盘上 下 键可以改变它的值同时执行一次callback。而enter和space不改变它的值,只是执行 callback
Max-Min 差值是0的话,表示只可以单选;1的话,表示可以多选。这个可以在他的属性栏里设置
----------------------------------------------------------
Pop_up Menus
--------------
代码:

function .......
val=get(hObject,'Value')
Switch val
case 1
%
case 2
%
defualt
......
end
----------------------------------------------------
Button Groups
------------------
代码:

function .......
switch get(hObject,'Tag');
%注意这里的hObject和别的不同,并不是指这个BUtton Group,而是指在组里面,被选中的那个控件
case 'radio button1' %按钮1的tag
%。。。。。
case '按钮2的tag'
%。。。。。
。。。
end
----------
附:所以在这里,如果要拿到button groups本身的话,就用handles.它的tag名 中间一个点。
--------------------------------------------------
Axes
-------------
它是用来画图的, 可以说是一块画布。它并不算是严格意义上的控件,但可以让用户在它的区域上点击或者移动鼠标时(看你是放在什么callback下了)执行一定的代码。那就要加它自己的callback函数了。
下面用来一般功能,所以不用自己的callback,代码都是写在别的控件回调函数下。

代码:

axes(handles.youraxesname);% 选择你的一个axes,自然,用它的tag来选中它
plot(x,y); %这时,所画的图就到它上面了
set(handles.youraxesname,'XMimrFrick','on'); %顺便设置一下它的属性
grid on; %加上网格
--------------------------------------------------
Active控件
------------
还没时间去研究。这个是最好用的,因为可以借用别人的现成的东西,毕竟自己不是程序员,没有必要编写太多的代码。一些通用的比如文件存取对话框,视频放映之类的。
可惜,我还没时间去看。呵呵。
------------------------------------------------------------------------------------------------------------------

3、怎么获得和设置控件的属性
------------
通俗的说,就是我怎么获取 编辑框里的字符,滑块现在的位置,pop up里被选中的选项,如何控制 static text显示我要求的信息
控件的属性当然远不止我刚刚说的。
在你需要的地方插入以下代码:
设置:
set(handles.你控件的tag,'要设置的属性名','要设置的属性值')
获取:
get(handles.你控件的tag,'要获取的属性名')

比如:set(handles.edit1,'string','hello world');
help里可以看到所有可能有用的属性
MATLAB->Creating Graphical User Interfaces->Laying Out GUIs and Setting Properties->What Properties Do I Need to Set?


4. 数据怎么在不同的控件之间传递
知道了GUI的数据管理规则,这个就很简单了。
-------------------
先看在一个GUI界面内部的传递的数据
每一个控件的回调函数头:
function myc_Callback(hObject, eventdata, handles)

第一个参数是hObject,是跟这个callback所关联的控件的 handles,在它自己的callback下,可以用代号-> hObject 来调用它。。不用管那么麻烦的概念,只用知道,控件自己的回调函数调用自己的属性,只用hObject. 属性名 就可以了(中间一点)。
第二个参数是MATLAB的保留参数
第三个handles,是这个GUI界面的代号。可以通过它获取这个界面的所有信息。所以在控件A自己的回调函数中,要获取或者设置别的控件的属性,就用 handles.别的控件Tag.属性
------------------------------
handles hObject 都是结构体。正常的编程概念。

handles格式是一个存放数据的缸。控件的handles是小缸,它的名字叫做hObject;GUI界面的handle是一个大缸,并且这个缸名字 也叫做handles;大缸里存放了所有的小缸和所有用户数据,你只需 handles.控件A的tag 就可以存取控件A的信息。

那我怎么把自己计算出或者别的什么数据放到这个缸里呢?
^_^ 在任何地方
handles.自己的变量名 = 某些值 (其实也就是给结构体添加成员变量)
这样你就定义了自己的变量。
在任何地方
b=handles.自己的变量名 (结构名加点号来引用成员变量)
就可以得到这个变量值,同样也可以修改它。
别忘了使用
guidata(hObject, handles);(不用改,直接黏贴) 在函数末尾来保存你对handles和hObject的操作。(不然你自定义的变量就没了)

5、在不同GUI之间传递数据
--------------
*************这部分是以前写的我发现我的理解有些问题---所以我现在传递数据用的application data的方法,没用这个。可能还没理解透output的函数作用***************
传入
那就来看打开一个GUI界面时,传给他的参数有哪些。

function mygui_OpeningFcn(hObject, eventdata, handles, varargin)
所有的启动参数都是通过varargin传到它的OpeningFcn里面的。那启动参数可以是哪些呢?

1、figure,也就是窗口参数。
比如说position之类
例如:打开这个GUI时,使用这个命令 mygui('Position',[434 234 234 34])则表示打开窗口在这个位置;还有哪些可控属性可以查help。
2、自定义参数 。
如果传入的参数不是figure的属性(matlab查找不到你输入的属性名),则你输入的参数作为一个向量存放在varargin里面。
比如mygui('路人甲','80‘),那varargin{1}存放了'路人甲',varargin{2}=’80‘
那mygui中对这读取两个数据进行反应,就达到了传入参数的目的。

传出
那怎么把数据传出来呢?
将你要输出的数据存在 handles.output里面
在GUI任意地方
handles.output=数据1;
handles.secend_output=数据2;
然后在GUI的outputFcn里面加上
varaginout{1}=handles.output;
varaginout{2}=handles.secend_output;
这样就把数据传出来了。

看每一个GUI的最外层的那句
function varargout = mygui(varargin) 看输入输出,就是这样了。把GUI本身就是一个函数,
b=mygui(一些传入的参数) 就执行GUI并返回结果
则b就得到了传出来的结果。

来自http://blog.163.com/cjt_0125@yeah/blog/static/916829092009101771445748/

28 May 2010

matlab tips - 清除直线之外的点



原图


处理后



close all;

a = imread('test.jpg'); % 读取图像
a = im2bw(a); % 二值化
figure,imshow(a);

line1 = [13,168;358,55]; % 两条直线,坐标格式[row1,col1;row2,col2]
line2 = [15,280;364,437];

k1 = (line1(1,1)-line1(2,1))/(line1(1,2)-line1(2,2)); % 直线斜率1
k2 = (line2(1,1)-line2(2,1))/(line2(1,2)-line2(2,2));

[m,n] = size(a); % 尺寸

for i=1:m
    for j=1:n
        if i-line1(2,1)<k1*(j-line1(2,2)) % 清除直线1左边
            a(i,j) = 0;
        end
        if i-line2(2,1)<k2*(j-line2(2,2)) % 清除直线2右边
            a(i,j) = 0;
        end
    end
end

figure,imshow(a);