图像灰度修正算法实现及应用.docx
- 文档编号:23085840
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:27
- 大小:720.02KB
图像灰度修正算法实现及应用.docx
《图像灰度修正算法实现及应用.docx》由会员分享,可在线阅读,更多相关《图像灰度修正算法实现及应用.docx(27页珍藏版)》请在冰豆网上搜索。
图像灰度修正算法实现及应用
目录
一、课程设计目的…………………..………………….…………3
二、课程设计要求………………….………………………….….3
三、课程设计的内容………………..……………………….……3
四、题目分析…………………………………………….………..3
五、总体设计……………….…………………………….……….4
六、具体设计……………………………………………..…….…5
6.1、文件……………….………………………………….……….5
6.1.1、打开………..…………………………………….…………5
6.1.2、保存…………………………..………………….…………5
6.1.3、退出……………………..……………………………….…5
6.2、编辑…………………………..…………………………………5
6.2.1、灰度………………………..………………….……………5
6.2.2、亮度………………………..………………….……………6
6.2.3、截图…………………………..……………….……………7
6.2.4、缩放…………………………..…………….………………7
6.3、旋转…………………………………..…………………………9
6.3.1、上下翻转…………………….…………….………………9
6.3.2、左右翻转………………….…………….…………………9
6.3.3任意角度翻转…………………………….…………………9
6.4、噪声………………………………..…………..………………10
6.5、滤波……………………………………..………..……………10
6.6、直方图统计……………………………………………………11
6.7、频谱分析………………………………………..…..…………12
6.7.1、频谱图…………………………………………….……12
6.7.2、通过高通滤波器……………………….……………….12
6.7.3、通过低通滤波器………………………………..……….13
6.8、灰度图像处理………………………………………….…….14
6.8.1、二值图像………………………………………………...14
6.8.2、创建索引图像……………………………………….…..14
6.9、颜色模型转换……………………………..…..……………14
6.10、操作界面设计……………………………………..…………15
七、程序调试及结果分析………………….……………………15
八、心得体会…………………………….………………………16
九、参考文献…………………………….………………………17
一十、附录………………………….………………………………18
图像灰度修正算法实现及应用
前言
数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。
MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。
它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。
根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。
MATLAB中集成了功能强大的图像处理工具箱。
由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。
关键词:
MATLAB,数字图像处理
一、设计任务及要求
1.1课程设计目的
综合运用MATLAB工具箱实现图像处理的GUI程序设计。
1.2课程设计要求
1、生成衣服教案且动态范围小的图像;
2、采用直方图均衡法修正灰度范围;
3、比较修正前后图像变化;
4、总结
二、课程设计的内容
2.1学习MATLAB程序设计
利用MATLAB图像处理工具箱,设计和实现自己的图像。
按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。
然后按照自己拟定的功能要求进行程序设计和调试。
以下几点是程序必须实现的功能。
1)图像的读取和保存。
2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。
3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。
4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。
5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。
题目分析
信息化社会中,计算机在各种信息处理中发挥着重要的作用。
我们可以借助计算机,对数字图像进行处理,以达到不同的效果。
根据题目的要求,除了实现要求的功能外,还有很多的功能需要用到。
(1)、将一个RGB图像转换为灰度图像。
(2)、可以对图像做各种变换。
(3)、有时并不需要图像显示其细节部分,只要其轮廓,这时候不要很高的灰度级。
可以把图像转换为二值图像,进行图像腐蚀,或是创建索引图像等。
(5)、为了科学地定量描述和使用颜色,人们提出了各种颜色模型。
2.2总体设计
1、先采集图像后进行编辑
2、直方图修正
3、利用matlab工具观察图像修正
4、安装调试
三、具体设计
3.1文件
3.1.1、打开
为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。
Uigetfile函数的调用格式为[name,path]=yigetfile(…),在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。
如果按下取消按钮或是发生错误,则返回值是0。
根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量handles.img。
3.1.2、保存
同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。
3.1.3、退出
退出比较简单,程序如下所示:
clc;
closeall;
close(gcf);
3.2编辑
3.2.1、灰度
由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:
y=(handles.img(:
:
1));%当然也可以选择(:
:
2)或(:
:
3)
imshow(y);
但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。
另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。
程序为:
y=rgb2gray(handles.img);
imshow(y);
这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。
所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。
完整的程序如下:
ifisrgb(handles.img)
y=rgb2gray(handles.img);
imshow(y);
else
msgbox('这已经是灰度图像','转换失败');
end
如果原图是RGB,执行该操作的结果如下图:
如果原图本身已经是灰度图像了,执行该操作弹出如右图所示的提示对话框
3.2.2、亮度
用imadjust函数,其调用格式如下:
g=imadust(f,[low_inhigh_in],[low_outhigh_out]),gamma)
gamma表示映射性质,默认值是1表示线性映射。
由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给[low_inhigh_in],[low_outhigh_out],gamma这五个参数,如下一组命令建立了如图所示的输入对话框:
prompt={'输入参数1','输入参数2','输入gamma'};
defans={'[00.7]','[01]','1'};
p=inputdlg(prompt,'输入参数',1,defans);
但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。
所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。
由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。
[0handles.beta],[01],handles.gm,这里的变量handles.beta和handles.gm就通过滑动条得到,滑动条设计如下图:
亮度调整的tag名为ld,取值范围0~1,gamma值的tag名为gamma,取值范围为0~5。
获取滑动条参数的程序如下:
handles.beta=get(handles.ld,'value');
handles.gm=get(handles.gamma,'value');
执行该操作,调节滑动条到上图所示位置,结果如下图:
3.2.3、截图
在MATLAB中,用函数imcrop实现对图像的剪切操作。
该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。
Imcrop函数的调用格式如下:
y=imcrop(handles.img);
不管handles.img是三维的还是二维数据,该函数都能进行操作。
下图就是对三维图像的截图:
3.2.4、缩放
在MATLAB中,用函数imresize来实现对图像的放大或缩小。
插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。
该函数的调用格式如下:
B=imresize(A,m,method)
其中:
参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。
B=imresizee(A.m,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小);
下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置:
虽然处理后看不出放大的效果,这是由于坐标轴限制的原因,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。
缩小后的结果如下:
3.3直方图统计
直方图均衡化的基本思想是把原始图像的灰度直方图从比较集中的某个灰度区间变换为在全部灰度范围内均匀分布的形式,这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。
如果用t、s分别表示目标图像和原始图像上的像素点(x,y),均衡化处理函数可表示为t=EH(s),这里函数EH需要满足两个条件:
EH(s)在0[s[L21范围内是一个单值递增函数,这是为了保证原图各灰度级在变换后灰度的排列次序保持不变;
对0[s[L21有0[EH(s)[L21,这是为了保证变换前后图像灰度值的动态范围保持一致性。
可以证明累积分布函数(cumulativedistributio
function,CDF)满足上述两个条件并能将s的分布转换为t的均匀分布。
此时有:
tk=EH(sk)=E(ni/n)=Eps(si)其中0[sk[1;k=0,1,2,,,L21。
上述求和区间为0到k。
根据上式可以由原图像的各像素灰度值直接求
得直方图均衡化后各像素的灰度值。
在实际中还需对tk取整以满足数字图像的要求。
直观地讲,直方图均衡化导致图像的对比度增加。
但值得注意的是,均衡化处理后的图像只能是近似均匀分布。
均衡化图像的动态范围扩大了,但其本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的像素经处理后可能变得相同,形成了一片相同灰度的区域,各区域之间有了明显的边界,从而出现了伪轮廓。
下面用imhist函数对图像数据进行直方图统计,
x=imhist(handles.img(:
:
1));
bar(horz,x);
其中,x矩阵的数据是0~255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,
x1=x(1:
10:
256);
horz=1:
10:
256;
bar(horz,x1);
除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。
直方图显示和均衡后的图像分别如下图所示
3.4灰度图像处理
3.4.1、二值图像
用j=im2bw(x);来对灰度图像到二值图像的转换。
转换结果为:
3.4.2、创建索引图像
用X=grayslice(I,n)函数来实现,转换后得到的图像为:
3.5操作界面设计
为了使整个操作界面更加的美观,对背景颜色和字体颜色进行设置。
四、程序调试及结果分析
在程序设计过程中,碰到很多的问题。
a)一个函数只能对灰度图像处理,不能对RGB图像处理,那么如何才能对RGB图像处理呢?
这主要是对MATLAB函数的不够清楚,用到的很多函数是针对二维数据的,而RGB图像的数据是一个三维矩阵,所以处理要与灰度图像不同,在开始的时候,我认为应该找一个能够应用于三维矩阵的函数,结果却没找到,后来想到可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次。
比如,彩色图像的滤波处理,直方图均衡等。
b)同一个操作对灰度图像可以使用,当用户选择的是彩色图像时,该操作就会出错?
这是由于设计程序时,本身程序是有针对性的,有些程序只能对灰度图像有效,有些对彩色图像有效,但是用户并不清楚这些,所以在设计的过程中就要考虑全面,要分开设计。
在本次课程设计中,我均对每个程序的开始时,用ifisrgb(x)进行判断。
c)本次设计存在一个比较大的问题,就是每次操作都是独立的。
我认为应该是整个程序设计过程中对变量的设置没有做好,应该每次操作后,把处理后的数据保存在一个全局变量,这样还要对处理后的数据进行在处理时,只要把这个全局变量作为原始数据带入就可。
五、心得体会
1、在这次课程设计过程中,感触很深,由于对MATLAB图像处理的函数不熟悉,导致自己走了很多的弯路。
2、通过本次课程设计,使自己对MATLAB设计流程有了比较深刻的体会,同时也了解了一般软件设计的过程。
在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。
3、在实际操作中,可以根据原始图像的特征和用户的不同需要选择不同的灰度修正方法;一种方法修正之后的效果不理想,还可以多种方法结合使用;也许将原始图像作为一个整体处理效果始终不理想,还可以将原始图像分割成若干子图像(模板),然后对每一个模板根据其不同的灰度特征选择不同的修正方法。
总而言之,灰度修正的目的是获得视觉效果更好或更有用的图像,我们称其为图像质量。
然而关于图像质量有其特殊性,它没有通用、固定或公认的标准,全凭观察者的主观判断。
因此图像质量的评价不可能用计算机实现,经过处理之后的目标图像只有交由用户自己作为最终的评判者。
六、附录
functionvarargout=two(varargin)
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@two_OpeningFcn,...
'gui_OutputFcn',@two_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforeerzhiismadevisible.
functiontwo_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
---------------------------------------------------------
%接下来是菜单的程序
---------------------------------------------------------
functionfile_Callback(hObject,eventdata,handles)
--------------------------------------------------------
%文件打开程序
functionopen_Callback(hObject,eventdata,handles)
[name,path]=uigetfile({'*.bmp'},'载入图像');
ifisequal(name,0)|isequal(path,0)
errordlg('没有选中文件','出错');
return;
else
x=imread([path,name]);
axes(handles.axes1);
imshow(x);
handles.img=x;
handles.noise_img=x;
guidata(hObject,handles)
end
---------------------------------------------------
functionsave_Callback(hObject,eventdata,handles)
%文件保存
[filename,pathname]=uiputfile('*.bmp','图片保存为');
ifisequal([filename,pathname],[0,0])
errordlg('没有保存','出错');
return;
else
file=strcat(pathname,filename);
(handles.axes2);
i=getimage(gca);
imwrite(i,file);
end
-----------------------------------------------------
functionexit_Callback(hObject,eventdata,handles)
clc;
closeall;
close(gcf);
---------------------------------------------------------
%编辑菜单的程序
------------------------------------------------------
functionedit_Callback(hObject,eventdata,handles)
-------------------------------------------------
functionhuidu_Callback(hObject,eventdata,handles)
%灰度处理
axes(handles.axes2);
ifisrgb(handles.img)
y=rgb2gray(handles.img);%RGB
imshow(y);
else
msgbox('这已经是灰度图像','转换失败');
end
------------------------------------------------------
functionliangdu_Callback(hObject,eventdata,handles)
%亮度处理
prompt={'输入参数1','输入参数2','输入gamma'};
defans={'[00.7]','[01]','1'};
p=inputdlg(prompt,'输入参数',1,defans);
p1=str2num(p{1});
p2=str2num(p{2});
p3=str2num(p{3});
gamma=p3;
x=(handles.img);
y=imadjust(x,p1,p2,gamma);
axes(handles.axes2);
imshow(y);
------------------------------------------------------
functionjietu_Callback(hObject,eventdata,handles)
%截图
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
y=imcrop(handles.img);
imshow(y);
handles.Timage=y;
------------------------------------------------------
functionfangda_Callback(hObject,eventdata,handles)
----------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 灰度 修正 算法 实现 应用