基于界面GUI的图像处理软件综合设计.docx
《基于界面GUI的图像处理软件综合设计.docx》由会员分享,可在线阅读,更多相关《基于界面GUI的图像处理软件综合设计.docx(31页珍藏版)》请在冰豆网上搜索。
基于界面GUI的图像处理软件综合设计
摘要
数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的逐步完善,使得数字图像处理技术在各个领域得到了广泛的应用,并显示出广阔的应用前景。
MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台,它为数据分析和数据可视化、算法和应用程序开发提供了核心的数学和高级图形工具。
MATLAB集成了功能强大的工具箱,MATLAB语言的语法特性与C语言极为相似,且更加简单,并且MATLAB语言可移植性好、扩展性强,再加上其中有丰富的图像处理函数,使得它在我们今后的学习和工作有越来越重要的作用。
本报告主要描述了简单的基于界面GUI的图像处理软件综合设计以及嵌入式设计:
基于ICETEK-DM642-P4的嵌入式DSP图像处理算法实现。
这些都比较简单,主要为今后的学习打下基础。
关键字:
MATLAB、界面GUI处理、数字图像处理
摘要-------------------------------------------------2
一、设计目的-------------------------------------------------------------------4
二、设计要求-------------------------------------------------------------------4
三、设计内容-------------------------------------------------------------------4
四、总体设计-------------------------------------------------------------------4
五、具体设计-------------------------------------------------------------------5
图像的读取与包存------------------------------------------------------------5
图像转化为灰度图像----------------------------------------------------------6
图像直方图统计和直方图均衡-------------------------------------------6
加入各种噪声,并通过几种滤波算法实现去噪------------------------------7
边缘检测---------------------------------------------------12
RGB图像处理------------------------------------------------14
图像锐化---------------------------------------------------15
六、结果分析-------------------------------------------------17
设计二、嵌入式设计:
基于ICETEK-DM642-P4的嵌入式DSP图像理
算法实现---------------------------------------------18
一、设计目的------------------------------------------------------------------18
二、设计内容------------------------------------------------------------------18
三、具体设计------------------------------------------------------------------18
熟悉TMS320C6000软件开发过程------------------------------------------------18
了解边缘检测的算法和用途,利用Sobel算子进行边缘检测,实现基于Sobel算子的边缘检测方法-----------------------------------------------------------------------------20
四、实验结果------------------------------------------------------------------22
心得体会---------------------------------------------22
设计一、基于界面GUI的图像处理软件综合设计(基于Matlab)
一、设计目的
综合运用MATLAB工具箱实现图像处理的GUI程序设计。
二、设计要求
1、熟悉掌握MATLAB的程序设计方法。
2、掌握MATLABGUI程序设计。
3、学习和熟悉MATLAB图像处理工具箱。
4、学会运用MATLAB图像处理工具箱对图像分析。
三、设计内容
设计一个软件,实现功能包括图像的读取、存储、显示、图像转换、加噪、去噪、增强、边缘检测、直方图统计等。
四、总体设计
因为我们要学习的是运用MATLAB工具箱设计的方法和步骤,再加上能力有限,所以该软件实现的功能较简单,其菜单如下:
设计完成时菜单界面如下:
五、具体设计
图像的读取与保存
1、打开
设计的时候,通过打开一个对话框来实现,选择uigetfile函数来实现,uigetfile函数显示一个打开文件的对话框,该对话框自动列出当前路径下的目录和文件。
其使用方法如下:
globalim %定义一个全局变量im
[filename,pathname]=uigetfile({'*.*';'*.bmp';'*.tif';'*.png'},'selectpicture'); %选择图片路径
str=[pathnamefilename]; %合成路径+文件名
im=imread(str); %读取图片
axes(handles.axes1); %使用第一个axes
imshow(im); %显示图片
2、保存
同样通过打开一个对话框来实现,选择uiputfile函数来实现
globalBW %定义处理后的图片BW这个全局变量
[filename,pathname,filterindex]=uiputfile({'*.bmp';'*.tif';'*.png'},'savepicture');存储图片路径
iffilterindex==0
return %如果取消操作,返回
else
str=[pathnamefilename]; %合成路径+文件名
axes(handles.axes2); %使用第二个axes
imwrite(BW,str); %写入图片信息,即保存图片
end
3、退出
这就简单了,程序如下:
clc;
closeall;
close(gcf);
图像转化为灰度图像。
由于在matlab中较多的图像处理函数支持对灰度图像进行处理,故对图像进行灰度转化十分必要。
可利用rgb2gray(X)函数对其他图像进行灰度图像的转化。
转化实例如下:
实现程序段如下:
globalT
axes(handles.axes2);
T=getimage;
x=rgb2gray(handles.img);
imshow(x);
handles.img=x;
guidata(hObject,handles);
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
f=imresize(handles.img,p1,'bilinear');
imshow(f);
handles.img=f;
guidata(hObject,handles);
end
图像直方图统计和直方图均衡。
(1)通过histeq(X)函数实现直方图均衡。
因为此函数只能对灰度图像进行直方图均衡。
故应先将彩图转为灰度图像。
在上一步的基础上对第二幅图进行直方图均衡:
直方图均衡实现程序段如下:
%---Executesonbuttonpressinpushbutton7.
functionpushbutton7_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton7(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalT
axes(handles.axes2);
T=getimage;
h=histeq(handles.img);
imshow(h);
handles.img=h;
guidata(hObject,handles);
关键部分:
通过h=histeq(handles.img)进行直方图均衡
(2)直方图统计。
通过利用imhist(X)函数来实现直方图统计。
%---Executesonbuttonpressinpushbutton8.
functionpushbutton8_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton8(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
axes(handles.axes2);
x=imhist(handles.img);%直方图统计
x1=x(1:
10:
256);
horz=1:
10:
256;
bar(horz,x1);
axis([0255015000]);
set(handles.axes2,'xtick',0:
50:
255);
set(handles.axes2,'ytick',0:
2000:
15000);
注意:
横纵坐标的范围应选取适当,否则,统计图表有可能超出范围。
加入各种噪声,并通过几种滤波算法实现去噪。
(1)加入噪声。
通过imnoise(I,type,parameters)来加入各种噪声。
加入椒盐噪声
加入高斯噪声:
加入乘性噪声:
实现程序段如下:
functionuipanel4_SelectionChangeFcn(hObject,eventdata,handles)
%hObjecthandletouipanel4(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalT
str=get(hObject,'string');
axes(handles.axes2);
switchstr
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'};
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)滤除噪声(高斯噪声)。
(因为只能对灰度图滤波,所以应先转换为灰度图)
滤波前
中值滤波后
低通滤波器滤波后
实现程序段如下:
中值滤波:
globalim;
globaly;
y2=double(y)/255;
MEDFILT=medfilt2(y2,[33]);
axes(handles.axes2);
imshow(MEDFILT,[]);
低通滤波:
globalim
globaly
[MN]=size(im);
F=fft2(y);
fftshift(F);
Dcut=100;
D1=250;
foru=1:
M
forv=1:
N
D(u,v)=sqrt(u^2+v^2);
BUTTERH(u,v)=1/(1+(sqrt
(2)-1)*(D(u,v)/Dcut)^2);
end
end
BUTTERG=BUTTERH.*F;
BUTTERfiltered=ifft2(BUTTERG);
axes(handles.axes2);
imshow(BUTTERfiltered,[])
边缘检测
Robert算法检测:
Sobel算法检测:
Prewitt算法检测:
Log算法检测:
Canny算子检测:
实现程序:
Robert算子:
globalim
globalcw
axes(handles.axes2);
cw=edge(im,'robert');
imshow(cw);
Sobel算子:
globalim
globaldw
axes(handles.axes2);
dw=edge(im,'sobel');
imshow(dw);
Prewitt算子:
globalim
globaldw
axes(handles.axes2);
dw=edge(im,'prewitt');
imshow(dw);
Log算子:
globalim
globaldw
axes(handles.axes2);
dw=edge(im,'log');
imshow(dw);
Canny算子:
globalim
globaldw
axes(handles.axes2);
dw=edge(im,'canny');
imshow(dw);
RGB图像处理
转换为索引图:
转换为二值图:
实现程序:
索引图像:
globalim
Y2=rgb2ind(im,128);
axes(handles.axes2);
imshow(Y2);
二值图像:
globalim
wm=im2bw(im,0.4);
axes(handles.axes2);
imshow(wm);
图像锐化
Sobel算子滤波:
拉氏算子滤波:
空域高通滤波:
频域高通滤波:
实现程序:
Sobel算子滤波:
globalim
H=fspecial('sobel');
K=filter2(H,im);
axes(handles.axes2);
imshow(K);
拉氏算子滤波:
globalim
am=double(im);
h=[010,1-41,010];
J=conv2(am,h,'same');
K=am-J;
axes(handles.axes2);
imshow(K);
空域高通滤波:
globalim
j=im2double(im)
h=[-1-1-1,-19-1,-1-1-1];
K=conv2(j,h,'same');
axes(handles.axes2);
imshow(K);
频域高通滤波:
globalim
globaly
[MN]=size(im);
F=fft2(y);
fftshift(F);
Dcut=100;
D1=250;
foru=1:
M
forv=1:
N
D(u,v)=sqrt(u^2+v^2);
BUTTERH(u,v)=1/(1+(sqrt
(2)-1)*(Dcut/D(u,v))^2);
end
end
BUTTERG=BUTTERH.*F;
BUTTERfiltered=ifft2(BUTTERG);
axes(handles.axes2);
imshow(BUTTERfiltered,[])
六、结果分析
软件测试基本成功,课题所要求的功能均能较好实现。
但一些功能只支持灰度图像的处理。
其中值得一提的是在滤波处理中的低通滤波与高通滤波的效果。
由于一般图像中含有较多的低频信息成分高频成分较少,通过低通滤波后,噪声以及高频成分被滤除,图像虽有少量失真,略显模糊,但尚可辨识。
但若是通过高通滤波后,大量的有效低频信息被滤除,图像严重失真,不可辨识。
设计二、嵌入式设计:
基于ICETEK-DM642-P4的嵌入式DSP图像处理算法实现
一、设计目的
掌握CodeComposerStudio2.2的安装和配置,熟悉TMS320C6000软件开发过程,熟悉怎样运用该软件来做相关的实际图像处理。
二、设计内容
①掌握CodeComposerStudio2.2的安装和配置,熟悉TMS320C6000软件开发过程:
创建工程和管理工程、编译和调试、使用观察窗口、了解图形功能(实验书P40-45);②了解边缘检测的算法和用途,利用Sobel算子进行边缘检测,实现基于Sobel算子的边缘检测方法(实验书P106-108);③在②的基础上,修改核心代码,调试实现基于Prewitt算子的边缘检测方法。
三、具体设计
熟悉TMS320C6000软件开发过程
1.实验准备
⑴.连接实验设备,连接220V供电电源连线,请使用有质量保证的220V电源插座。
⑵.打开实验箱上的开关,给实验箱供电。
上电正常时,ICETEK-DM642-P4评估板的
上电指示灯常亮,复位指示灯熄灭。
注意:
如果在ICETEK-DM642-P4评估板上
电后,指示灯的亮灭状态不对,请立即关闭实验箱电源开关,检查设备。
打开液
晶显示屏电源开关,此时液晶显示屏上应显示条状彩条。
如果没有彩条显示,请
按下板上的S3复位按钮,再次观察液晶显示屏是否有彩条输出。
提示:
如果使用自配的图像输入设备和图像输出设备,请务必保证各设备与DM642-P4
评估板的供电电源共地。
如果不共地,过大的电压差,将击穿DM642评估板。
2.设置CodeComposerStudio2.2在硬件仿真(Emulator)方式下运行
请参照第二部分,第二章操作。
3.启动CodeComposerStudio2.2
双击桌面上“CCS2(‘C6000)”,启动CodeComposerStudio2.2;如果无法进入CCS
软件,请参照第二部分,第三章操作,排除问题。
4.创建工程
⑴.创建新的工程文件:
选择菜单“Project”的“New…”项;在“ProjectCreation”对话框中,在“Project”
项输入USECCS;单击“Location”项末尾的浏览按钮,改变目录到
C:
\ICETEK-DM642-P4\Lab501-USECCS,单击“OK”;单击“完成”;这时建立的是一
个空的工程文件;展开主窗口左侧工程管理窗口中“Projects”下新建立的
“USECCS.pjt”,其中各项均为空。
提示:
如果要创建库文件,只需要在建立新工程时,将“Project”中的选项更改为
“Library(.lib)”即可。
⑵.在工程文件中添加程序文件:
选择菜单“Project”的“AddFilestoProject…”项;在“AddFilestoProject”对
话框中选择文件目录为Lab501-USECCS,改变文件类型为“CSourceFiles(*.c;*.ccc)”,
选择显示出来的文件“volum.c”;重复上述各步骤,添加volume.cmd、load.asm和
vectors.asm文件到USECCS工程中(如没有找到相应的文件,请选择改变文件类型来
找);添加C:
\ti\C6000\cgtools\lib\rts6400.lib。
⑶.编译连接工程:
选择菜单“Project”的“RebuildAll”项;注意编译过程中CCS主窗口下部的“Build”
提示窗中显示编译信息,最后将给出错误和警告的统计数。
5.编辑修改工程中的文件
⑴.查看工程文件
展开CCS主窗口左侧工程管理窗中的工程各分支,可以看到“USECCS.pjt”工程
中包含“volume.h”、“rts6400.lib”、“volume.c”和“volume.cmd”等文件,其中“volume.h”
为程序在编译时根据程序中的“include”语句自动加入的。
⑵.查看源文件
双击工程管理窗中的“volume.c”文件,可以查看程序内容。
双击工程管理窗中的“volume.h”文件,打开此文件显示,可以看到其中有主程
序中要用到的一些宏定义如“BUF_SIZE”等。
“volume.cmd”文件定义程序所放置的位置,此例中描述了DM642的存储器资
源,指定了程序和数据在内存中的位置。
⑶.编辑修改源文件
打开“volume.c”,找到“main()”主函数,将语句“input=&inp_buffer[0];”最后
的分号去掉,这样程序中就出现了一个语法错误;重新编译连接工程,可以发现编
译信息窗口出现发现错误的提示,双击红色错误提示,CCS自动转到程序中出错的
地方;将语句修改正确(这里是将语句末尾的分号加上);重新编译;注意,重新编
译时修改的文件被CC系统自动保存。
⑷.修改工程文件的设置
选择“Project”菜单中的“Bui