第一篇:MATLAB中GUI在图像处理应用中的设计(包括各种算法)
用MATLAB 进行图像处理算法的界面设计 /
目录
1.设计目的„„„„„„„„„„„„„„„„„„„3 2.题目分析„„„„„„„„„„„„„„„„„„„3 3.总体设计„„„„„„„„„„„„„„„„„„„3 4.具体设计„„„„„„„„„„„„„„„„„„„5 5.结果分析„„„„„„„„„„„„„„„„„„„34 6.心得体会„„„„„„„„„„„„„„„„„„„34 7.附录代码„„„„„„„„„„„„„„„„„„„36
/ 52
1、设计目的:综合运用MATLAB工具箱实现图像处理的GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop。
2、题目分析
利用matlab的GUI程序设计一个简单实用的图像处理程序。该程序应具备图像处理的常用功能,以满足用户的使用。现设计程序有以下基本功能: 1)图像的读取和保存。
2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。
4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。
5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。
6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。7)额外功能。
3、总体设计
/ 52 图一
软件的总体设计界面布局如上图所示,主要分为2个部分:显示区域与操作区域。显示区域:显示载入原图,以及通过处理后的图像。操作区域:通过功能键实现对图像的各种处理。
在截图中可见,左部为一系列功能按键如“还原”、“撤销”、“截图”等等 ;界面正中部分为图片显示部分,界面中下方为系列功能切换选择组。设计完成后运行的软件界面如下:
图二
与图一先比,运行后的界面更为简洁。利用“编辑”菜单可调出相应的功能键。例如:
/ 52
4、具体设计
现介绍各个功能模块的功能与实现。4.1菜单栏的设计。通过Menu Editor
创建如下菜单,通过以下菜单来控制显示或隐藏功能按键
以“编辑”菜单中“图像变形”中的“图像翻转”为例说明实现用户界面功能键“图像翻转”的显示与隐藏。实现该功能的程序段如下:
function tuxiangfanzhuan_Callback(hObject, eventdata, handles)% hObject handle to tuxiangfanzhuan(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');if isequal(filename,0)|isequal(pathname,0)errordlg('没有选中文件','出错');return;else
file=[pathname,filename];global S %设置一个全局变量S,保存初始图像路径,以便之后的还原操作 S=file;x=imread(file);set(handles.axes1,'HandleVisibility','ON');axes(handles.axes1);imshow(x);set(handles.axes1,'HandleVisibility','OFF');axes(handles.axes2);imshow(x);handles.img=x;guidata(hObject,handles);end
程序关键部分:
通过[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像')选择相应路径打开的图像;通过file=[pathname,filename];x=imread(file);读取选中的图像;最后,通过imshow(x)在显示区域上显示图像。
/ 52
(2)图像保存。
利用“uiputfile”、“imwrite”函数实现图像文件的保存。
function save_Callback(hObject, eventdata, handles)% hObject handle to save(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)clc;close all;close(gcf);clear;
4.3对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。
运行程序后,通过“编辑”菜单中的“常用处理”选中“亮度调节”
在显示出相应的功能键后,通过载入读取图像,比并进行处理,效果如下: 亮度处理前:
/ 52
亮度处理后:
实现程序段如下:
%---Executes on button press in radiobutton12.function radiobutton12_Callback(hObject, eventdata, handles)% hObject handle to radiobutton12(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T str=get(hObject,'string');axes(handles.axes2);
switch str case'增强' T=getimage;prompt={'输入参数:'};defans={'1'};p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});f=immultiply(handles.img,p1);imshow(f);handles.img=f;guidata(hObject,handles);case'减弱' T=getimage;prompt={'输入参数:'};defans={'1'};12 / 52 p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});f=imdivide(handles.img,p1);imshow(f);handles.img=f;guidata(hObject,handles);end
该程序段主要通过 f=immultiply(handles.img,p1);p=inputdlg(prompt,'input',1,defans);分别实现图像对比度的增强与减弱。
4.4 用鼠标选取图像感兴趣区域,显示和保存该选择区域。
通过imcrop(x)函数来实现对图片某一区域的截取,截取的图片在右框中显示。结合“保存为„”,可把截图处理后的图片保存在指定路径。
实现程序段如下:
%---Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
% Hint: get(hObject,'Value')returns toggle state of radiobutton16
global T axes(handles.axes2);14 / 52 T=getimage;x=rgb2gray(handles.img);%RGBͼÏñת»»Îª»Ò¶ÈͼÏñ imshow(x);handles.img=x;guidata(hObject,handles);
4.6对图像进行放大和缩小整数倍的操作。
通过imresize(X,n,mode)函数对图像X进行放大或者缩小。N放大缩小倍数,mode为采用的方式。
通过处理后可发现保存的图片的比原图放大了(缩小了)。实现的程序段如下:
function uipanel9_SelectionChangeFcn(hObject, eventdata, handles)% hObject handle to uipanel9(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T axes(handles.axes2);T=getimage;h=histeq(handles.img);imshow(h);handles.img=h;guidata(hObject,handles);关键部分:通过 h=histeq(handles.img)进行直方图均衡(2)直方图统计。通过利用imhist(X)函数来实现直方图统计。
/ 52
%---Executes on button press in pushbutton8.function pushbutton8_Callback(hObject, eventdata, handles)% hObject handle to pushbutton8(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T str=get(hObject,'string');axes(handles.axes2);switch str case '椒盐噪声' T=getimage;prompt={'数日椒盐噪声参数1:'};defans={'0.02'};p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});f=imnoise(handles.img,'salt & pepper',p1);imshow(f);handles.img=f;guidata(hObject,handles);case '¸高斯噪声' T=getimage;prompt={'输入高斯噪声1:','输入高斯噪声2'};defans={'0','0.02'};21 / 52 p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});p2=str2num(p{2});f=imnoise(handles.img,'gaussian',p1,p2);imshow(f);handles.img=f;guidata(hObject,handles);case '乘性噪声' T=getimage;prompt={'输入乘性噪声1:'};defans={'0.02'};p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});f=imnoise(handles.img,'speckle',p1);imshow(f);handles.img=f;guidata(hObject,handles);end
(2)滤除噪声(椒盐噪声)。滤波前
中值滤波后
/ 52
线性滤波后
自适应滤波后
实现程序段如下:
function uipanel5_SelectionChangeFcn(hObject, eventdata, handles)%图像滤波
% hObject handle to uipanel5(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
axes(handles.axes2);y1=handles.img;f=double(y1);% 数据类型转换,matlab不支持图像的无符号整型的计算 g=fft2(f);% 傅里叶变换 g=fftshift(g);% 转换数据矩阵 [M,N]=size(g);nn=2;%二阶巴特沃斯低通滤波器 d0=50;%截止频率50 m=fix(M/2);n=fix(N/2);for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn));% 计算低通滤波器传递函数 result(i,j)=h*g(i,j);end
/ 52 end
result=ifftshift(result);y2=ifft2(result);y3=uint8(real(y2));imshow(y3);% 显示处理后的图像
%---Executes on button press in pushbutton15.function pushbutton15_Callback(hObject, eventdata, handles)% hObject handle to pushbutton15(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
global S %还原 axes(handles.axes2);y=imread(S);f=imshow(y);handles.img=y;guidata(hObject,handles);4.10 撤销。
撤销上一步的操作。通过另设一个全局变量T保存是上一次操作后的图像。
/ 52 实现程序段如下:
---Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject handle to pushbutton11(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)str=get(hObject,'string');axes(handles.axes2);global T switch str case '左右翻转' T=handles.img;f=fliplr(handles.img);imshow(f);handles.img=f;guidata(hObject,handles);case '上下翻转' T=handles.img;f=flipud(handles.img);imshow(f);handles.img=f;guidata(hObject,handles);29 / 52 end
程序关键部分:通过f=fliplr(handles.img);f=flipud(handles.img);分别实现左右镜像翻转与上下镜像翻转。
(2)图像旋转。
实现图像的逆时针旋转任意角度。
实现程序段如下:
function pushbutton3_Callback(hObject, eventdata, handles)%图像爱那个旋转
% hObject handle to pushbutton3(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T axes(handles.axes2);T=getimage;f=imcomplement(handles.img);%图像取反´
/ 52 imshow(f);handles.img=f;guidata(hObject,handles);
程序段关键部分:通过f=imcomplement(handles.img);实现图像取反,形成底片效果。
(2)边缘信息。采取图像的边缘信息。
实现程序段如下:
%---Executes on button press in pushbutton16.function pushbutton16_Callback(hObject, eventdata, handles)% hObject handle to pushbutton16(see GCBO)
% eventdata reservedDO NOT EDIT gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @tuxiangchuli_OpeningFcn,...'gui_OutputFcn', @tuxiangchuli_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback', []);if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else
gui_mainfcn(gui_State, varargin{:});end
% End initialization codeto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)% varargin command line arguments to tuxiangchuli(see VARARGIN)
% Choose default command line output for tuxiangchuli handles.output = hObject;
% Update handles structure guidata(hObject, handles);
% UIWAIT makes tuxiangchuli wait for user response(see UIRESUME)% uiwait(handles.figure1);
%---Outputs from this function are returned to the command line.function varargout = tuxiangchuli_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args(see VARARGOUT);% hObject handle to figure
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
%------function exit_Callback(hObject, eventdata, handles)% hObject handle to exit(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'ÔØÈëͼÏñ');if isequal(filename,0)|isequal(pathname,0)errordlg('ûÓÐÑ¡ÖÐÎļþ','³ö´í');
return;else
file=[pathname,filename];
global S %ÉèÖÃÒ»¸öÈ«¾ÖªäÁ¿S£¬ª£´æ³õʼͼÏñ«¾¶£¬ÒÔªãÖ®ºóµÄ»¹Ô-²Ù¬ô S=file;
x=imread(file);
set(handles.axes1,'HandleVisibility','ON');axes(handles.axes1);imshow(x);
set(handles.axes1,'HandleVisibility','OFF');axes(handles.axes2);imshow(x);handles.img=x;
guidata(hObject,handles);end
%------function about_Callback(hObject, eventdata, handles)% hObject handle to about(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
%------function save_Callback(hObject, eventdata, handles)% hObject handle to save(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
% Hint: get(hObject,'Value')returns toggle state of radiobutton12 global T
axes(handles.axes2);T=getimage;prompt={'µôÕûª¶Êý'};defans={'1'};
p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});
y=imadjust(handles.img,[ ], [ ],p1);%ÔöÁÁͼÏñ imshow(y);handles.img=y;
guidata(hObject,handles);
%------function uipanel4_SelectionChangeFcn(hObject, eventdata, handles)% hObject handle to uipanel4(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
% Hint: get(hObject,'Value')returns toggle state of radiobutton16
global T
axes(handles.axes2);T=getimage;
x=rgb2gray(handles.img);%RGBͼÏñ¬ª»»Îª»Ò¶ÈͼÏñ imshow(x);handles.img=x;
guidata(hObject,handles);
/ 52 %---Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T
axes(handles.axes2);T=getimage;prompt={'Ðý¬ª½Ç¶È:'};defans={'0'};
p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});
f=imrotate(handles.img,p1,'bilinear','crop');imshow(f);handles.img=f;
guidata(hObject,handles);
% Hint: popupmenu controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end
/ 52
%------function uipanel5_SelectionChangeFcn(hObject, eventdata, handles)%ͼÏñÂ˲¨ % hObject handle to uipanel5(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)str=get(hObject,'string');
/ 52 axes(handles.axes2);global T switch str
case '¬óÓÒ«-¬ª'
T=handles.img;
f=fliplr(handles.img);imshow(f);handles.img=f;
guidata(hObject,handles);
case 'ÉÏÏ«-¬ª' T=handles.img;
f=flipud(handles.img);imshow(f);handles.img=f;
guidata(hObject,handles);end
%---Executes on button press in pushbutton7.function pushbutton7_Callback(hObject, eventdata, handles)% hObject handle to pushbutton7(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)axes(handles.axes2);
x=imhist(handles.img);%Öª«½Í¼Í³¼Æ x1=x(1:10:256);horz=1:10:256;bar(horz,x1);
axis([0 255 0 15000]);
set(handles.axes2,'xtick',0:50:255);set(handles.axes2,'ytick',0:2000:15000);
/ 52
%------function uipanel9_SelectionChangeFcn(hObject, eventdata, handles)% hObject handle to uipanel9(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
global S %»¹Ô-¹¦ÄÜ axes(handles.axes2);y=imread(S);f=imshow(y);handles.img=y;
guidata(hObject,handles);
/ 52
%---Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject handle to pushbutton11(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T
str=get(hObject,'string');axes(handles.axes2);
switch str
case'ÔöÇ¿'
T=getimage;prompt={'ÊäÈë²ÎÊý:'};defans={'1'};
p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});
f=immultiply(handles.img,p1);imshow(f);handles.img=f;
guidata(hObject,handles);
case'¼õÈõ' T=getimage;prompt={'ÊäÈë²ÎÊý:'};defans={'1'};
p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});
f=imdivide(handles.img,p1);imshow(f);handles.img=f;
guidata(hObject,handles);end
/ 52 %---Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)% hObject handle to pushbutton12(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
axes(handles.axes2);y1=handles.img;
f=double(y1);% Êý¾ÝÀÐͬª»»£¬MATLAB²»Ö§³ÖͼÏñµÄÎÞ«ûºÅÕûÐ͵ļÆËã g=fft2(f);% ¸µÁ¢Ò¶ªä»» g=fftshift(g);% ¬ª»»Êý¾Ý¾ØÕó [M,N]=size(g);
nn=2;% ¶þ½¬©ÍÌØÎÖ˹(Butterworth)µÍͨÂ˲¨Æô d0=50;%½ØֹƵÂÊΪ50 m=fix(M/2);n=fix(N/2);for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));% ¼ÆËãµÍͨÂ˲¨Æô´«µÝº¯Êý result(i,j)=h*g(i,j);
end end
result=ifftshift(result);y2=ifft2(result);y3=uint8(real(y2));
imshow(y3);% ÏÔʾÂ˲¨´¦ÀíºóµÄͼÏñ
/ 52 %---Executes on button press in pushbutton15.function pushbutton15_Callback(hObject, eventdata, handles)% hObject handle to pushbutton15(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)global T
axes(handles.axes2);T=getimage;
f=edge(handles.img,'canny');imshow(f);handles.img=f;
guidata(hObject,handles);
/ 52
%------function edit_Callback(hObject, eventdata, handles)% hObject handle to edit(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
%------function tianjiazaosheng_Callback(hObject, eventdata, handles)% hObject handle to tianjiazaosheng(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
%------function changyongchuli_Callback(hObject, eventdata, handles)% hObject handle to changyongchuli(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)
%------function tuxiangfanzhuan_Callback(hObject, eventdata, handles)% hObject handle to tuxiangfanzhuan(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)set(handles.pushbutton3,'Visible','on');if strcmp(get(gcbo, 'Checked'),'on')
set(handles.pushbutton3,'Visible','on');set(gcbo, 'Checked', 'off');
set(handles.pushbutton3,'Visible','off');else
set(gcbo, 'Checked', 'on');end
%------function ditonglvbochuli_Callback(hObject, eventdata, handles)% hObject handle to ditonglvbochuli(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)set(handles.pushbutton15,'Visible','on');if strcmp(get(gcbo, 'Checked'),'on')
set(handles.pushbutton15,'Visible','on');set(gcbo, 'Checked', 'off');
set(handles.pushbutton15,'Visible','off');else
set(gcbo, 'Checked', 'on');end
%------function tuxianglvbo_Callback(hObject, eventdata, handles)% hObject handle to tuxianglvbo(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)set(handles.radiobutton12,'Visible','on');if strcmp(get(gcbo, 'Checked'),'on')
set(handles.radiobutton12,'Visible','on');set(gcbo, 'Checked', 'off');
set(handles.radiobutton12,'Visible','off');else
set(gcbo, 'Checked', 'on');end
/ 52
%------function huidutxiang_Callback(hObject, eventdata, handles)% hObject handle to huidutxiang(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)set(handles.uipanel10,'Visible','on');if strcmp(get(gcbo, 'Checked'),'on')
set(handles.uipanel10,'Visible','on');set(gcbo, 'Checked', 'off');
set(handles.uipanel10,'Visible','off');else
set(gcbo, 'Checked', 'on');end
%------function zhifangtujunheng_Callback(hObject, eventdata, handles)% hObject handle to zhifangtujunheng(see GCBO)
% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)set(handles.pushbutton8,'Visible','on');
/ 52
第二篇:Matlab在控制工程中的应用
Matlab在控制工程中的应用
摘要:
简要介绍MATLAB软件及其控制系统工具箱的功能,并通过具体实例说明MATLAB软件在《机械控制工程基础》课程教学中的优越性,从多方面探讨在教学过程中,如何更好地利用MATLAB软件.主要从系统的时间响应及频率特性、稳定性分析和系统校正的设计、线性离散系统的分析及系统模型的估计等方面使MATLAB得图形化和交换功能充分的体现了出来,使抽象复杂的理论变得生动形象、加深了对某些概念的理解、激发了我们的学习兴趣。最后总结了关于怎样学好MATLAB的心得体会。
1.MATLAB简介
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。到目前为止,已经经发展成为优秀的适合多学科的功能强大的科技应用软件之一,在30多个面向不同领域而扩展的工具箱的支持下,MATLAB在许多领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。
MATLAB的发展经历了以下几个重要的发展时期:
1)20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve?Moler教授为学生开发了矩阵特征值求解及线性方程求解的FORTRAN程序库及接口程序,取名为MATLAB,并开始流传。
2)1983年春,Cleve?Moler博士与John?Little等人用c语言开发了MATLAB的第二代专业版,具有数值计算及数据图形化功能。3)1984年,Cleve?Moler与John?Little成立了MathWorks公司,正式把MATLAB推向市场。4)1993年~1995年,MathWorks公司推出了MATLAB?4.0版,充分支持Microsoft?Win—dows下的界面编程,1995年推出4.2C版。
5)1997年,MathWorks公司推出了MATLAB?5.0版,支持更多的数据结构,无论界面还是功能都较4.x版有长足进展。1999年推出了5.3版,进一步改善了MATLAB的功能。
6)2000年10月,MathWorks公司推出了MATLAB?6.0版,该版的推出是MATLAB软件的一次飞跃,它的可视化界面焕然一新,风格更加平易近人,而且还添加了对JAVA的支持,函数库也进一步进行了扩充,运算速度更快、性能更好。2001年6月,MathWorks公司推出了MATLAB?6.1版。2002年8月,MathWorks公司推出了MATLAB?6.5版。
2.MATLAB与控制工程及实例说明
Nyquist图和Bode图是系统频率特性的两种重要的图形表示形式,也是对系统进行频率特性分析的重要方法。无论是Nyquist图还是Bode图,都非常适于用计算机进行绘制,Matlab提供了绘制系统频率特性极坐标图的nyquist函数和绘制对数坐标图的bode函数。
24(0.25s+0.5)例如:传递函数为G(s)=的系统的Nyquist图及Bode图的求取。
(5s+2)(0.05s+2)1)Matlab文本及Nquist图形如下:
k=24,nunG1=k*[0.25,0.5];denG1=conv([5 2],[0.05 2]);[re,im]=nyquist(nunG1,denG1);plot(re,im);grid k=24,nunG1=k*[0.25,0.5];denG1=conv([5 2],[0.05 2]);[re,im]=nyquist(nunG1,denG1);plot(re,im);grid
0-0.2-0.4-0.6-0.8-1-1.2-1.400.511.522.53
2)Matlab文本及Bode图如下:
k=24;numG1=k*[0.25 0.5];denG1=conv([5 2],[0.05 2]);w=logspace(-2,3,100);bode(numG1,denG1,w);
Bode Diagram100Magnitude(dB)Phase(deg)-10-20-30-400-45-9010-210-1100101102103Frequency(rad/sec)
在MATLAB中,可以用impulse函数、step函数和lsim函数对线性连续系统的时间响应进行仿真计算。其中impulse函数用于生成单位脉冲响应;step函数用于生成单位阶跃响应;lsim函数用于生成对任意输入的时间响应。
例如:已知某高阶系统的传递函数为
2S220S50G(S)6 S15S584S4223S3309S2240S100
求该系统的单位脉冲响应、单位阶跃响应和单位速度响应和单位加速度响应。
获得单位脉冲响应程序语句及图形: >> num=[2 20 50];>> den=[1 15 84 223 309 240 100];>> impulse(num,den)
获得单位阶跃响应程序语句及图形: >> num=[2 20 50];>> den=[1 15 84 223 309 240 100];>> step(num,den)
获得单位速度响应程序语句及图形: >> num=[2 20 50];>> den=[1 15 84 223 309 240 100];>> t=[0:0.01:1];>> u=(t);>> lsim(num,den,u,t)
获得单位加速度响应程序语句及图形: > num=[2 20 50];>> den=[1 15 84 223 309 240 100];>> t=[0:0.01:1];>> u=(0.5*t.*t);>> lsim(num,den,u,t)
3,总结: MATLAB其实很简单,只有自己亲自思考,多动手,不怕失败,我们才能好真正的掌握这门技术.其实我们学习Matlab的时候不要试着掌握它的每一个功能,熟悉和你专业最相关的部分就可以了.另外我感觉在MATLAB很好玩,从刚开始的什么都不懂到最后自己写程序并且到处相应的结果,真的是一件很开始的事情.所以说这次学到了很多有用的东西.
第三篇:PHOTOSHOP图像处理在刑事物证中的应用
摘 要:随着科技的不断进步,数字技术得到广泛的发展和应用,现实生活中的很多信息都可以以数字形式的数据进行处理和储存,数字图像就是这种以数字形式进行储存和处理的图像。
关键词:物证检验;应用
随着科技的不断进步,数字技术得到广泛的发展和应用,现实生活中的很多信息都可以以数字形式的数据进行处理和储存,数字图像就是这种以数字形式进行储存和处理的图像。利用photoshop 等图像处理软件可以对数码案件照片进行后期的编排和处理,轻松地将数码痕迹图像处理为所需用比例物证检验照片;将数码照相技术与指纹自动识别系统相连接,可使数码指纹照片直接进入指纹自动识别系统中进行校验比对,迅速锁定作案嫌疑人。大大减轻了刑事技术人员的工作量和工作时间,为侦查破案争取了宝贵的时间。
数字图像在近几年发展以及在公安工作中的应用
数字图像是在刑事物证中是一种视听资料,在1997年的刑事诉讼法修改后,视听资料被列为一种独立的证据使用。在下文中所指的数字图像是指借助现代化精密仪器(如数字相机、数字摄像机、计算机)所提供的信息资料,它与视听资料中的录像资料相比较,其表现形式只是单幅图像和多幅连续图像之别,两者只是表现形式不同,其本质是一样的。作为现在化公安工作的发展,数字图像在公安的基层办公中越来越多地被应用。其优点在于对用数码相机拍摄犯罪现场照片,在拍摄时可以边拍摄边察看,不满意的照片可以当场删除进行修改。还方便与保存、记录以及日后的分析案情等等。在物证中,而使用数码技术可随时察看影像质量,根据需要改变拍照条件并及时做出调整,大大缩短了照片的制作周期,使痕迹物证得到及时地检验和鉴定。利用数字技术还可以为痕迹物证照相设定拍照比例,在计算机上测定痕迹物证的大小、深浅以及特征点之间的方位、距离,把得到的数据与样本进行比较,做出科学的鉴定结论。并且能对照片质量进行优化,模糊的经过处理可提高清晰度,反差小的经过影调调整可提高反差,有彩色背景的痕迹可以改变背景的颜色使痕迹清晰可见,达到分色照相的目的。对于刑事物证中由于客观的因素,导致的物证、人犯、痕迹的模糊变形,造成图像不容易辨认、认定时,还可以利用数字技术进行修改阻碍辨认的像素,是照片带到相应的要求。说到数字技术,现在应用较为广泛的就是photoshop软件了。
photoshop软件在刑事物证中的应用实例
photoshop软件是abode公司开发的图像处理软件,在我们日常的图像处理中应用非常的广泛,其对图像的处理功能非常的强大,可以处理各种图像问题。适应于公安刑事技术工作图像的各个方面。本文所用到的photoshop版本photoshop cs3。
在日常文检工作中,对痕迹特征、文件材料的检验,一般是借助尺子、放大镜或者一些专业的辅助工具进行检验对比,这些工具无疑给我们的检验工作带来了很多的不方便,并且也存在许多不足之处:1)传统的用眼观察、手工测量不够精确;2)用放大镜、显微镜观察时,眼睛容易疲劳且只能观察到很小的局部;3)检验时所观察到的情况固定困难(照相);4)传统检验方法比较单一。运用photoshop借助电脑和扫描仪检验印刷品和印文既操作方便、准确、直观,又便于对放大、处理过的材料打印固定,而且对检材不会造成丝毫磨损、破坏。在应用了photoshop软件后,我们可以对痕迹特征、文件材料的检材进行局部的放大、将其中某一颜色图案分离出来、进行重叠比对检验、增加图文同底色(背景的)反差来提高所检部位的清晰度、精确测量检材的搭配比例特征。(文中所有的图片格式为.psd 注:psd 文件为photoshop 的缺省文件格式,它可以将所编辑图像的所有有关图层、通道等信息记录下来。)
选择“图像”,“模式”,再选中“cmyk 颜色”,然后点击“通道”,鼠标右击“洋红”通道,选择“删除通道”,接着鼠标右击“黄色”通道,选择“删除通道”命令,便可以达到去朱存墨的效果了。(如图1 所示)选择“图像”,“模式”,再选中“lab 颜色”,然后点击“通道”,鼠标右击“明度”通道,选择“删除通道”命令,接着鼠标右击“b”通道,选择“删除通道”命令,便可以达到去墨存朱的效果了。(如图2 所示)
我们在检验指纹特征、文件材料中有时某个部位(局部)因为拍摄或者其他的客观原因造成图文不够清晰时,我们可以在软件中执行“图像/ 调整、曲线”命令,打开“曲线”对话框,根据文件的模式,选择“通道”类型,通过调整曲线使图像中某个部位反差增大,使整个图文更加清晰。这种功能是一些专业比对仪所无法达到的。我们还可以通过调整色彩的平衡,使所选颜色的图案更加突出。操作时,执行“图像\\调整\\色彩平衡”命令,在“色彩平衡”对话框中,选择“暗调”、“中间调”或“高光”中的一个着重进行色调范围的更改,通过调整标注红、绿、蓝的颜色条上的三角形滑块的位置调整色彩平衡,从而达到增强某一(几)种颜色,减少“颜色轮”中相对应的几
(一)种颜色,使图文同底色反差加大,使某种颜色的图文更加清晰可见。如在检验时出现印文同文字交叉情况,我们可用此方法隐去印文或文字,使文字或印文更清晰。
我们在痕迹检验中,有时候会对检材与样本是否同一进行利用重影也对接技术进行比对。进行比对时,大都需要用一些专用的痕迹比对仪器,这些仪器不是每一个公安部门所能拥有的,但是,利用了photoshop技术,可以处理一些简单数字图像。下面我那痕迹检验中的文件检验来举例:
重影比对。打开样本的图像后,选中“图层”调板,鼠标右键单击“背景”图层,选择“复制图层”命令,将新图层命名为“样本一”图层,保存文件,建立重影比对工作文件。打开检材文件,选择“选择(菜单)”、“全选(选项)”、将样本印文图像全部选中。选择“移动工具”,将样本印文选区拖至样本图像窗口,成为图层1,关闭检材文件窗口(释放内存)。将图层1 重命名为“检材”图层,并将“模式选项”设为“正片叠底(模式)”。选择“编辑、菜单”、“变换(选项)”、选中“旋转(子选项)”。即可拖动并旋转检材印文与样本印文进行重影比对检验了(如图4 所示)。比对完后别忘了保存文件。
第四篇:MATLAB在电磁场教学中的应用
MATLAB在电磁场课程中的应用
摘要:电磁场课程理论性强,概念抽象,需要较强的多维空间想象能力和逻辑思维能力,不能直观的进行观察和研究,难以很好地掌握。文中简要介绍了MATLAB语言的基本计算功能和画图功能,并对电磁场课程中的具体实例进行了理论计算及可视化仿真,这样不仅提高了计算速度,而且也进一步加深了对电磁场空间物理现象的理解。关键词:电磁场;MATLAB;可视化 1 引言
电磁场理论是分析各种电磁现象的基本规律、应用原理与应用方法的技术基础课,是培养合格的电气信息类专业本科生所应具备的知识结构的重要组成部分。公共基础课(数学、物理等)侧重于抽象问题的分析与计算,而专业课又侧重于工程实际中的应用,电磁场则起到了承前启后的作用,使学生们初步认识各种电磁现象及电磁过程的物理本质。掌握运用多种数学工具解决电磁问题的方法和技巧,为学生顺利进入专业课的学习打下坚实的基础[1]。
电磁场涉及内容较广,概念抽象,是空间与时间综合性最强的课程之一。应用的很多内容在数学的教学中往往不是重点内容,可在电磁场的教学中,这些内容又是分析电磁现象的重要数学工具。可见,对数学基础薄弱的学生来说,“教”与“学”都感到非常困难。针对这种情况传统的教学模式已经逐渐不能适应时代的发展的要求,因此在教学中积极采用现代化设备,通过高科技手段使学生能够直接获取知识,成为自身学习及各个高校教学的热点。而MATLAB具有强大的计算及绘图能力,在电磁场教学中应用非常广泛。2 MATLAB特点及应用
MATLAB是由美国MathWorks公司推出的一款优秀的程序仿真开发软件。经过多年的逐步发展与不断完善,已经成为国际公认的最优科学计算与数学应用软件之一。其内容涉及矩阵代数、微积分、应用数学、计算机图形学、物理等很多方面。集计算、绘图及声音处理于一体,主要特点如下[2,3]:
(1)计算功能强大。能够实现数值与符号计算、计算结果与编程可视化、数字与文字的统一处理、离线与在线计算等,针对不同领域提供了丰富的工具箱,用户还可以根据自己的需要任意扩充函数工具库。
(2)强大的绘图功能。能够实现二维、三维图形的绘制,可以从图形直观的衡量程序的效果。
(3)界面友好。效率高,编程简洁,MATLAB以矩阵为基本单元的可视化程序设计语言,指令表达和标准教材的数学表达式相近。
(4)简单易学,特别适用于初学者,用户可以在短时间内掌握。
正是由于MATLAB强大的功能和广泛的适用性,才得到了用户的普遍认可,在自动控制、神经网络、信号处理等诸多方面,都有广泛的应用。3 应用MATLAB实现电磁场计算
电磁场涉及数学知识很多,如:积分变换、矢量分析、场论等,也涉及到泛函分析、变分法、微分几何、积分方程等方面的基础知识,在函数分析中变量是三维空间,甚至是在四维空间中讨论电磁场的变化,变化量既有标量又有矢量。这是电磁场课程不容易掌握的一个主要原因。而MATLAB几乎可以解决科学计算的任何问题。
应用举例一: 设单芯电缆有两层绝缘体,分界面亦是同轴圆柱面,电缆上电荷体密度=0.6c/cm,内层绝缘体介电常数为2,外层绝缘体介电常数为3.8,内导体绝缘体半径为1cm,内层绝缘半径为3cm,外层绝缘体半径为7cm,求内导体与外壳导体之间的电压U为多少?
解:在绝缘体中取任意点P,设P至O点的距离为p。过P点作同轴圆柱面,高为l,该面再加上下两底面作为“高斯面S”。由于对称,显然D在上下底面上没有法相分量,在同轴圆柱面上D是均匀的且沿半径向外取向。应用高斯定律得:
DdS(2l)Dl(1)
S3于是各层绝缘体中电场强度分别为
E1D1和E2D2(2)
222121而电压为U2E1d3E2d(3)12程序如下:
m1=2;m2=3.8;t=0.6;p1=1;p2=3;p3=7;% m为介电常数,t为线密度,p为半径 E1=@(p)t./(2*pi*m1*p);%求内层绝缘体场强 E2=@(p)t./(2*pi*m2*p);%求外层绝缘体场强 U3=quad(E1,p1,p2);%求内层绝缘体电压 U4=quad(E2,p2,p3);%求内层绝缘体电压 U=U3+U4;%求内外导体之间电压 程序运行结果:
U = 0.0737 4 应用MATLAB实现电磁场可视化
在电磁场场量分析中抽象思维程度很高,电磁场不同于一般物质的五态,没有固定形态、没有静止质量、没有颜色,甚至没有明确的大小边界,很不容易直接感知,这也是电磁场课程不容易掌握的另一个主要原因。但如果采用 MATLAB 计算并绘图,将电力线、等位线等用二维或三维图形清晰展现出来,学生的理解会更加直观[4]。应用举例二:
平行双线传输线可看做两根单位带电量分别是+和-的无限长细圆柱或直线,试画出其电位分布。
解:已知线密度为均匀分布的无限长线电荷周围的电场为E
20由于线电荷无限长,零参考电位点不能取在无穷远点,一般可任意指定某一位置0为零参考点,因此,单根线电荷的电位场为:
0dln0
2020平行双线的电位场是两根单线的场的叠加:
ln0ln0ln2 2012022012 以上求解过程往往容易理解,但是由唯一性定理,若要使两平行线电荷在两圆柱导体外部空间引起的电场与两圆柱导体之间原来的电场完全相同,则要找到两个与两圆柱导体表面圆周相重合的圆周来,换句话来说,圆柱导体表面是等位面,若电轴产生的电位使原来圆柱导体所在位置表面电位相同即可。这一层次学生往往难以理解,现在通过MATLAB编程画出平行双线的等位线图,就可以清楚地看到等位面所在的位置。程序如下:
%平行双线的等位线图如图1所示 [x,y]=meshgrid(-3:.01:3,-3:.01:3);f=log(sqrt((x+1).^2+y.^2+eps))-log(sqrt((x-1).^2+y.^2+eps));v=[-17,-1.5,-1,-.5,-.2,0,.2,.5,1,1.5,17];[C,h]=contour(x,y,f,v,'m');clabel(C)xlabel('x')ylabel('y')
图1平行双线的等位线图
%平行双线的电位和归一化电场分布如图2所示 [x,y]=meshgrid(-3:.25:3,-3:.25:3);f=log(sqrt((x+1).^2+y.^2+eps))-log(sqrt((x-1).^2+y.^2+eps));v=[-17,-1.5,-1,-.5,-.2,0,.2,.5,1,1.5,17];[C,h]=contour(x,y,f,v,'b');hold on [dx,dy]=gradient(-f,.25,.25);D=sqrt(dx.^2+dy.^2);dx=dx./D;dy=dy./D;quiver(x,y,dx,dy,.7);xlabel('x')ylabel('y')
图2平行双线的电位和归一化电场分布 %平行双线的电位三维立体图如图3所示 syms x y V=log(sqrt((x+1).^2+y.^2))-log(sqrt((x-1).^2+y.^2));xMax=8;NGrid=40;xPlot=linspace(-xMax,xMax,NGrid);[x,y]=meshgrid(xPlot);VPlot=eval(V);[ExPlot,EyPlot]=gradient(-VPlot);clf;subplot(1,2,1),meshc(VPlot);xlabel('x');ylabel('y');zlabel('电位');
图3平行双线的电位三维立体图
通过引入MATLAB强大的绘图功能,可以将数据以多种图形形式表现出来,实现了电磁场可视化,使电磁场中的概念更加直观、清晰,易于接受,使学生能够进一步深入分析、理解电磁场的各种性能。4 结语
在电磁场课程教学的过程中,利用MATLAB软件进行技算、模拟、实现结果的可视化,大大提高了学生的解题速度,有效地提高了学生学习的兴趣,使学生能够进一步理解电磁场的空间物理现象,同时也丰富了教师教学的方法和手段,为电磁场理论的可视化提供了一个新的平台。参考文献
[1] 冯慈璋,马西奎.工程电磁场导论.高等教育出版社.2000
[2] 周立鹏等.MATLAB在电磁场教学中的应用[Z].科技信息, 2009, 35:516-517 [3] 刘美丽.MATLAB语言及应用.国防工业出版社.2012 [4] 杰荣,蔡新华,胡惟文.基于MATLAB的空间电磁场分布可视化研究.中国科技论文统计源期刊.2005
The Application of MATLAB in Electromagnetic Field
SHI Lei, HAO Jing(Northeast Dianli University, Jilin Jilin 132012)Abstract: Electromagnetic Field theory is hard and the concepts are nonrepresentational, requiring us to have strong imaginary abilities of multidimensional space and logical thinking abilities as well.In this paper the basic calculation and painting functions of MATLAB language are introduced, and particular examples of the Electromagnetic Field are calculated and visualization processed,thus not only the calculation speed can be improved, but also further understanding of the spatial physical phenomena of Electromagnetic Field is made.Keywords:Electromagnetic Field;MATLAB;Visualization
第五篇:深度学习方法在图像处理中的应用与研究(总结)
深度学习方法在图像处理中的应用与研究
1.概述和背景........................................................................................................1 2.人脑视觉机理......................................................................................................3 3.深度学习的基本思想..........................................................................................6 4.深度学习的常用方法..........................................................................................7 5.总结与展望.......................................................................................................9
深度学习方法在图像处理中的应用与研究
1.概述和背景
Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生“自我”的意识。是的,在人类和大量现成数据的帮助下,电脑可以表现的十分强大,但是离开了这两者,它甚至都不能分辨一个喵星人和一个汪星人。
图灵(图灵,大家都知道吧。计算机和人工智能的鼻祖,分别对应于其著名的“图灵机”和“图灵测试”)在 1950 年的论文里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑。这无疑给计算机,尤其是人工智能,预设了一个很高的期望值。但是半个世纪过去了,人工智能的进展,远远没有达到图灵试验的标准。这不仅让多年翘首以待的人们,心灰意冷,认为人工智能是忽悠,相关领域是“伪科学”。
但是自 2006 年以来,机器学习领域,取得了突破性的进展。图灵试验,至少不是那么可望而不可及了。至于技术手段,不仅仅依赖于云计算对大数据的并行处理能力,而且依赖于算法。这个算法就是,Deep Learning。借助于 Deep Learning 算法,人类终于找到了如何处理“抽象概念”这个亘古难题的方法。
在实际应用中,例如对象分类问题如对象的分类(对象可是文档、图像、音频等),我们不得不面对的一个是问题是如何用数据来表示这个对象,当然这里的数据并非初始的像素或者文字,也就是这些数据是比初始数据具有更为高层的含义,这里的数据往往指的就是对象的特征。例如人们常常将文档、网页等数据用词的集合来表示,根据文档的词集合表示到一个词组短语的向量空间(vector space model, VSM模型)中,然后才能根抓不同的学习方法设计出适用的分类器来对目标对象进行分类;又如在图像处理中,像素强度的集合的表示方法可以最初浅的表示一幅图像,这也是我们视觉意义上的图像,一可是由于各种原因人们提出了更高层的语义的特征,如SIFT为经典的几何特征、以LBP为经典的纹理特征、以特征脸为经典的统计特征等,像SIFT,特征在很多图像处理的应用中突显出其优越性,因此特征选取得好坏对于实际应用的影响是很深刻的。因此,选取什么特征或者用什么特征来表示某一对象对于解决一个实际问题非常的重要。然而,人为地选取特征的时间代价是非常昂贵,另外劳动成本也高,而所谓的启发式的算法得到的结果往往不稳定,结果好坏经常是依靠经验和运气。既然如此,人们自然考虑到自动学习来完成特征抽取这一任务。Deep Learning的产生就是缘于此任务,它又被称为无监督的特征学习(Unsupervised Feature Learning),一显然从这个名称就可以知道这是一个没有人为参与的特征选取方法。
深度学习(Deep Learning)的概念是2006年左右由 Geoffrey Hinton等人在《science》上发表的一篇文章((Reducing the dimensionality of data with neural networks》》提出来的,主要通过神经网络(Neural Network NN)来模拟人的大脑 的学习过程,希望借鉴人脑的多层抽象机制来实现对现实对象或数抓(图像、语音及文木等)的抽象表达,整合特征抽取和分类器到一个学习框架下,特征的抽取过程中应该尽量少地减少人为的干预。
深度学习是通过大量的简单神经元组成,每层的神经元接收更低层的神经元的输入,通过输入与输出之间的非线性关系,将低层特征组合成更高层的抽象表示,并发现观测数据的分布式特征。通过自下而上的学习形成多层的抽象表示,并多层次的特征学习是大连理卜大学硕十学位论文一个自动地无人工干预的过程。根据学习到的网络结构,系统将输入的样本数据映射到各种层次的特征,并利用分类器或者匹配算法对顶层的输出单元进行分类识别等。
2.人脑视觉机理
研究表明,哺乳动物的大脑皮层,处理输入信息时是采用了一种分层机制,信息从感知器官输入后,经过多层的神经元,在经过每一层神经元时,神经元会将能够体现对象本质的特征抽取出来,然后将这些特征继续传递到下一层神经元上,同样地,后继的各层神经元都是以类似的方式处理和传递信息,最后传至大脑。深层的人工神经网络的诞生很大程度上受这一发现的启示,即构建一种包含多层结点,并且使得信息、得以逐层处理抽象的神经网络。
换言之,哺乳动物的大脑是以深度方式组织的,这一类深层的结构组织里的每一层会对于输入进行不同层次的信息处理或者抽象表示,因此,实际生活中,层次化的方法经常被用于表示一些抽象的语义概念。与哺乳动物一样,人类的大脑处理信矛息时也是采用逐层传输和表达的方式,人脑的初级视觉系统,首先利用某些神经元探测物体边界、元形状,然后又利用其他的神经元组织,逐步向上处理形成更复杂的视觉形状。人脑识别物体的原理是:外部世界中的物体先在视网膜上进行投影,然后大脑的视皮层对于聚集在视网膜上的投影进行分解处理,最后利用这些分解处理后的信息进行物体识别。因此视皮层的功能不是仅限于简单的重现视网膜图像,而是提取和计算感知信号。
视觉系统的输入数据量在人类感知系统的层次结构进行了维数减约,并剔除了与物体个性无关的信息;例如对于处理潜在结构是复杂的丰富数据(如图像、视频、主意等),深度学习应该与人类视觉系统一样可以精准地获取对象的本质特征。深度学习的构想是借鉴大脑的分层组织方式,通过由下向上、由简单到高级的逐层抽象的特征学习,研究者们期望深度网络结构能通过模拟大脑来解决复杂的模式识别难题。因此,深层的人工神经网络是一种人工定义用于模拟人脑组织形式的多层神经网络。
从文本来说,一个doc表示什么意思?我们描述一件事情,用什么来表示比较合适?用一个一个字嘛,我看不是,字就是像素级别了,起码应该是term,换句话说每个doc都由term构成,但这样表示概念的能力就够了嘛,可能也不够,需要再上一步,达到topic级,有了topic,再到doc就合理。但每个层次的数量差距很大,比如doc表示的概念->topic(千-万量级)->term(10万量级)->word(百万量级)。
一个人在看一个doc的时候,眼睛看到的是word,由这些word在大脑里自动切词形成term,在按照概念组织的方式,先验的学习,得到topic,然后再进行高层次的learning。
那我们需要有多少个特征呢?我们知道需要层次的特征构建,由浅入深,但每一层该有多少个特征呢?
任何一种方法,特征越多,给出的参考信息就越多,准确性会得到提升。但特征多意味着计算复杂,探索的空间大,可以用来训练的数据在每个特征上就会稀疏,都会带来各种问题,并不一定特征越多越好。
一些浅层的算法(指仅含一个隐层的神经网络、核回归、支撑向量机等),当
给定有限数量的样本和计算单元时,浅层结构难以有效地表示复杂函数,并且对于复杂分类问题表现性能及泛化能力针均有明显的不足,尤其当目标对象具有丰富的含义。深度学习通过大量的简单神经元组成的网络,利用输入与输出之间的非线性关系,对复杂函数进行近似,对观测样本进行拟合,并在学习输入样本本质特征的抽取上体现了强大的能力。有文献中就列举出一系列无法使用浅层网络表示的函数,这些研究成果揭示了浅层网络的局限性,从而也激发了人们探寻深度网络在一些复杂函数表示和复杂分类的应用前景。指出深度学习结构在对于复杂函数的表示问题上具有非常高的效率及效果,而一个不适用的结构模型否(如浅层网络)对数据建模时可能需要数目非常大的计算单元。
3.深度学习的基本思想
假设一个系统S,它是一个n层(S1,„,Sn)的结构,I是系统的输入,O是系统输出,形象地表示为:I =>S1=>S2=>...=>Sn=>O,如果输出O等于输入I,物理意义也就是表明在经过系统变化之后,输入I的信息量没有任何损失,和原始的输入保持了不变,这表明了输入I经过每一层S;均没有丢失任何信息,,即在任何一层S;,它都是输入I也就是原始信息的另外一种表示。简单说,深度学习的精髓也就是,在一个n层的神经网络中,任何一层的输入I和输出O是“相等.’的。学习过程中,我们希望它是不需要人为干预的,它能够自动地学习对象的特征。在给定一组原始的输入I(可以理解为是一堆图像或者文本、一段语音之类),经过一个包含n层的系统S时,我们通过调整系统中参数,使得输出与输出相等,即输出O仍然是输入I,这样,我们就获取了输入I(原始数据)的一系列的层次特征,记为S,...Sn。
另外,前面是假设输出严格地等于输入,即这个地方“相等”有两个含义在里面:第一个是说O和I不是在绝对形式上的相等,而是在抽象意义上的相等;另外一点指的是限制的约束的程度,比如说是不会造成歧义的完全“相等”还是有适当宽松条件的“相等”。而绝对意义上的“相等”这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会形成另外一类不同的深度学习的方法。举个不太恰当的例子,比如说对“交通工具”这个概念上,I是“可以驾驶的四个轮子”,O是“车”,这样虽然对两者的描述不一致,但是我们都一可以理解为“交通工具”了。上述就是深度学习的基本思想,而上述中的两个思想也对应了深度学习中的两个经典的方法AutoEncoder和Sparse Coding,还有一个很常用的方法就是受限玻尔兹曼机(Restrict Boltzmann Machine,RBM)。
4.深度学习的常用方法
4.1AutoEncoder自动编码器
最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重,自然地,我们就得到了输入I的儿种不同表示(每一层是输入的一种表示),这些表示就是特征,在研究中可以发现,如果在原有的特征中加入这些自动学习得到的特t正可以大大提高精确度,甚至在分类问题中比}」前址好的分类算法效果还要好,这种方法称为自动编码(AutoEncoder)。
4.2、Sparse Coding稀疏编码
如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O=Wx B, +砚x B, +...+W,x B, , B是基,W;是系数,我们可以得到这样一个优化问题:Min 11一Olo 通过求解这个最优化式子,我们可以求得系数W和基B;,这些系数和基础就是输入的另外一种近似表达,因此,它们可以被当成特征来表达输入I,这个过程也是自动学习得到的。如果我们在上述式子上加上L1的Regularity限制,得到:
Min}I一O}+u*(IW卜}砚I+„+}W,})。(2.1)种方法被称为Sparse Coding,它是一种对对象的简洁表征的方法,这种方法可以自动地学习到隐藏在对象数据潜在的基函数。
4.3、Restricted Boltzmann Machine(RBM)限制波尔兹曼机
假设有一个二部图,每一个相同层的节点之间没有链接,一层是可视层,即输入数据层(v),一层是隐层(h),如果假设所有的节点都是二值变量节点(只能取0或者1值),同时假设联合概率分布p(v, h)满足Boltzmann分布,我们称这个模型是受限玻尔兹曼机(RBM)。下面我们来看看为什么它是Deep Learning方法。首先,这个模型因为是二部图,所以在己知v的情况下,所有的隐藏节点之间是条件独立的,即p(hIv卜p(h, I 1,)...p(h-I v)。同理,在己知隐藏层h的情况下,所有的可视节点都是条件独立的,同时又由于所有的v和h满足Boltzmann分布,因此,当输入v的时候,通过p(hlv)可以得到隐藏层h,而得到隐藏层h之后,通过p(vlh)又能重构可视层,通过调整参数,我们就是要使得从隐藏层得到的可视层VI与原来的可视层v如果一样,那么得到的隐藏层就是可视层的另外一种表达,因此隐藏层可以作为可视层输入数据的特征,所以它就是一种Dcep Learning方法。文献X32]从理论一上证明,当隐层节点足够多时,深度网络就可以表示任意离散分布;文献[33]指出受限玻尔兹曼机中的隐层节点与可视节点可以为任意的指数族单元(即给定隐单元(可见单元),可见单元(隐单元)的分布的
形式一可以为任意的指数族分布),如高斯单元、softmax单元、泊松单元等等。
4.4、Deep BeliefNetworks深信度网络
DBNs是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。对于在深度神经网络应用传统的BP算法的时候,DBNs遇到了以下问题:
(1)需要为训练提供一个有标签的样本集;(2)学习过程较慢;
(3)不适当的参数选择会导致学习收敛于局部最优解。
目前,和DBNs有关的研究包括堆叠自动编码器,它是通过用堆叠自动编码器来替换传统DBNs里面的RBMs。这就使得可以通过同样的规则来训练产生深度多层神经网络架构,但它缺少层的参数化的严格要求。与DBNs不同,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。但是,降噪自动编码器却能很好的避免这个问题,并且比传统的DBNs更优。它通过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和RBMs训练生成模型的过程一样。
4.5 Networks卷积神经网络
卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。
CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。
CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。
5.总结与展望
1)Deep learning总结
深度学习是关于自动学习要建模的数据的潜在(隐含)分布的多层(复杂)表达的算法。换句话来说,深度学习算法自动的提取分类需要的低层次或者高层次特征。高层次特征,一是指该特征可以分级(层次)地依赖其他特征,例如:对于机器视觉,深度学习算法从原始图像去学习得到它的一个低层次表达,例如边缘检测器,小波滤波器等,然后在这些低层次表达的基础上再建立表达,例如这些低层次表达的线性或者非线性组合,然后重复这个过程,最后得到一个高层次的表达。
Deep learning能够得到更好地表示数据的feature,同时由于模型的层次、参数很多,capacity足够,因此,模型有能力表示大规模数据,所以对于图像、语音这种特征不明显(需要手工设计且很多没有直观物理含义)的问题,能够在大规模训练数据上取得更好的效果。此外,从模式识别特征和分类器的角度,deep learning框架将feature和分类器结合到一个框架中,用数据去学习feature,在使用中减少了手工设计feature的巨大工作量(这是目前工业界工程师付出努力最多的方面),因此,不仅仅效果可以更好,而且,使用起来也有很多方便之处,因此,是十分值得关注的一套框架,每个做ML的人都应该关注了解一下。
当然,deep learning本身也不是完美的,也不是解决世间任何ML问题的利器,不应该被放大到一个无所不能的程度。2)Deep learning未来
深度学习目前仍有大量工作需要研究。目前的关注点还是从机器学习的领域借鉴一些可以在深度学习使用的方法,特别是降维领域。例如:目前一个工作就是稀疏编码,通过压缩感知理论对高维数据进行降维,使得非常少的元素的向量就可以精确的代表原来的高维信号。另一个例子就是半监督流行学习,通过测量训练样本的相似性,将高维数据的这种相似性投影到低维空间。另外一个比较鼓舞人心的方向就是evolutionary programming approaches(遗传编程方法),它可以通过最小化工程能量去进行概念性自适应学习和改变核心架构。
Deep learning还有很多核心的问题需要解决:
(1)对于一个特定的框架,对于多少维的输入它可以表现得较优(如果是图像,可能是上百万维)?
(2)对捕捉短时或者长时间的时间依赖,哪种架构才是有效的?(3)如何对于一个给定的深度学习架构,融合多种感知的信息?
(4)有什么正确的机理可以去增强一个给定的深度学习架构,以改进其鲁棒性和对扭曲和数据丢失的不变性?
(5)模型方面是否有其他更为有效且有理论依据的深度模型学习算法?
探索新的特征提取模型是值得深入研究的内容。此外有效的可并行训练算法也是值得研究的一个方向。当前基于最小批处理的随机梯度优化算法很难在多计算机中进行并行训练。通常办法是利用图形处理单元加速学习过程。然而单个机器GPU对大规模数据识别或相似任务数据集并不适用。在深度学习应用拓展方面,如何合理充分利用深度学习在增强传统学习算法的性能仍是目前各领域的研究重点。