《图像灰度变化程序设计图像处理综合训练.doc》由会员分享,可在线阅读,更多相关《图像灰度变化程序设计图像处理综合训练.doc(28页珍藏版)》请在三一办公上搜索。
1、*实践教学*兰州理工大学计算机与通信学院计算机图象处理综合训练题 目: 图像灰度变化程序设计 目 录摘 要1一、前言3二、算法分析与描述4三、详细设计过程7四、调试过程中出现的问题及相应解决办法9五、程序运行截图及其说明10六、简单操作手册11设计总结12参考资料13致谢14附录15摘 要计算机图像处理与分析是集光学、数学、计算机科学、电子学、信息论、控制论、物理学、心理学和生理学等学科的一门综合性边缘科学。随着计算机科学的迅猛发展,以及与近代发展的新理论如小波分析、马尔柯夫随机场、分形学、数学形态学、人工智能和人工神经网络等的结合,计算机图像处理与分析近年来获得了长足的进展,呈现出强大的生命
2、力。已在科学研究、工农业生产、军事技术、医疗卫生、教育等许多领域等到广泛的应用,产生了巨大的经济和社会效益,对推动社会发展,改善人们生活水平都起到了重要的作用。本程序设计主要实现对对比度线性展宽、灰级窗处理和直方图均衡化的处理,从而达到我们所需的要求,进而将其应用到特殊领域。在图像处理中主要用VC+编写图像处理程序,并调用C+图像处理的部分内部函数进行处理。关键词:数字图像处理;对比度线性展宽;灰度窗处理;直方图均衡化一、 前言图像处理(image processing),用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。基本内容 图像处理一般指数字图像处理。数字图像是指用数字摄像机
3、、扫描仪等设备经过采样和数字化得到的一个大的二维数组,该数组的元素称为像素,其值为一整数,称为灰度值。图像处理技术的主要内容包括图像压缩,增强和复原,匹配、描述和识别3个部分。 常见的处理有图像数字化、图像编码、图像增强、图像复原、图像分割和图像分析等。图像处理一般指数字图像处理。 灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占有的灰度范围而使图像在视觉上得到改观,没有利用像素点之间的相互关系。因此,灰度变换处理方法也叫点运算。点运算是一种既简单又重要的技术,一幅输入图像经过点运算后将产生一幅新的输出图像,由输入像素点的灰度值决定相应的输入像素点的灰度值。二、算法分析与描述2.
4、1 对比度扩展对比度:通俗地讲,就是亮暗的对比程度。设有一幅图,由于成象时光照不足,使得整幅图偏暗,(灰度范围从0到63);或者成象时光照过强,使得整幅图偏亮,(灰度范围从200到255),我们称这些情况为低对比度,即灰度都挤在一起,没有拉开。灰度扩展的意度的目的,图2-1说明对比度扩展的原理思就是把你所感兴趣的灰度范围拉开,使得该范围内的像素,亮的越亮,暗的越暗,从而达到了增强对比度的目的。我们可以用图2-1来说明对比度扩展的原理。图2-1对比度扩展的原理图2.1中的横坐标gold表示原图的灰度值,纵坐标gnew表示gold经过对比度扩展后得到了新的灰度值。a,b,c为三段直线的斜率,因为是
5、对比度扩展,所以斜率b1。g1old和g2old表示原图中要进行对比度扩展的范围,g1new和g2new表示对应的新值。用公式表示为 显然要得到对比度扩展后的灰度,我们需要知道a,b,c,g1old,g2old五个参数。由于有新图的灰度级别也是255这个约束,所以满足ag1old+b(gold-g1old)+c(255-g2old)=255这个方程。这样,我们只需给出四个参数,而另一个可以代入方程求得。我们假设a=c,这样,我们只要给出b,g1old和g2old,就可以求出a=(255-b(g2old-g1old)/(255-(g2old-g1old)要注意的是,给出的三个参数必须满:(1)
6、b*(g2old-g1old)=255;(2) (g2old-g1old) 1) I = rgb2gray(I); %如果是灰度图就不用先变换 end I = double(I) / 255; I1 = uint8(255 * I * 0.5 + 0.5);imshow(I1);imwrite(I,test.jpg) %显示展宽后的图片3.3灰级窗详细设计clear all; close all;fa=45;fb=160;I=imread(123.bmp);imshow(I);I=rgb2gray(I);figure;imshow(I);m,n=size(I);J=double(I);k2=2
7、55/(fb-fa);for i=1:m for j=1:n if I(i,j) fa J(i,j)=0; elseif I(i,j) fb J(i,j)=k2*(I(i,j)-fa); else J(i,j)=0; end endend figure; imshow(J); 3.4直方图均衡化处理详细设计img=imread(123.bmp); p=rgb2gray(img); h=imhist(p); h1=h(1:2:256); h2=1:2:256; stem(h2,h1,r-); figure,imhist(p);四、 调试过程中出现的问题及相应解决办法1.本软件大多数功能实现是针对
8、二值图像,如果输入图像为RGB图像如:腐蚀,膨胀将无法处理显示,请先进行RGB图像转二值图像操作后再进行其他处理, 图像在进行二值转换时要注意阙值的大小,以便使得图片的效果最佳。2.其次是图片的路径问题,首先得找到图片所在的位置,否则会显示错误。3.调试过程中要注意Tag的属性设置和String的属性,正确赋值,防止错误运。五、程序运行截图及其说明1.打开文件 图5.12.打开图片后如图5.2 图5.23.点击图像处理下的对比度扩展 图5.34. 点击图像处理下的灰级窗处理 图5.45. 点击图像处理下的直方均衡化 图5.56.点击文件目录下的保存进行保存 图5.6 六、简单操作手册如果装有m
9、atlab软件直接双击导入相应函数之后,点击“回车”键程序,实现相应的功能。运行程序出现界面:图6.1开始界面点击文件,再点击打开,选择原图:点击图像处理,选择灰级窗/对比度线性展宽/直方均衡化 图6.3 图6.4 图6.5点击文件,选择保存,保存图像 图6.7设计总结通过本次课程设计,使我对计算机图像处理这门课程有了更深入的理解。计算机图像处理是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。一个人的力量是有限的,要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。程序的编写需要有耐心,有些事
10、情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。再总体解决大的问题。这样做起来不仅有条理也使问题得到了轻松的解决。在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。虽然这只是一次的极简单的课程制作,可是平心而论,也耗费了我不少的心血,这就让我不得不佩服开发技术的前辈,才意识到老一辈对我们社会的付出,为了人们的生活更美好,他们为我们社会所付出多少心血啊!对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不
11、能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆!通过这次的课程设计我对于专业课的学习有了更加深刻的认识,以为现在学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!参考资料1张力,VisualC+高级编程,人民邮电出版社,20022何斌,马天予,王运坚,红莲等编著,VisualC+数字图像处理,人民邮电出版社,20023白乔,左飞,把脉VisualC+,电子工业出版社,20094章毓晋.图像处理和
12、分析基础M.北京:高等教育出版社.2002.5钟志光,鲁君,刘伟荣.VC+.NET数字图像处理实例与解析M.清华大学出版社,2003.6汪翔袁辉,Visual C+实践与提高,中国铁道出版社,2001致谢首先感谢我的指导老师徐志刚老师,她在我的综合训练过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的计算机图像处理老师徐志刚老师和在以往的基础课学习中为我打下良好的基础,这是我这次综合训练能够顺利完成的前提。还有我的同学,在设计过程与完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。附录function v
13、arargout = untitled(varargin)% UNTITLED M-file for untitled.fig% UNTITLED, by itself, creates a new UNTITLED or raises the existing% singleton*.% H = UNTITLED returns the handle to a new UNTITLED or the handle to% the existing singleton*.% UNTITLED(CALLBACK,hObject,eventData,handles,.) calls the loc
14、al% function named CALLBACK in UNTITLED.M with the given input arguments.% UNTITLED(Property,Value,.) creates a new UNTITLED or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before untitled_OpeningFunction gets called. An% unrecognized property
15、 name or invalid value makes property application% stop. All inputs are passed to untitled_OpeningFcn via varargin.% *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to he
16、lp untitled% Last Modified by GUIDE v2.5 09-Jan-2013 11:18:34% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, untitled_OpeningFcn, . gui_OutputFcn, untitled_OutputFcn, . gui_LayoutFcn, , . gui_Callbac
17、k, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before untitled is made visible.function untitled_Op
18、eningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to untitled (see
19、VARARGIN)% Choose default command line output for untitledhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes untitled wait for user response (see UIRESUME)% uiwait(handles.figure_pj);% - Outputs from this function are returned to the command line.function var
20、argout = untitled_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line
21、 output from handles structurevarargout1 = handles.output;% -function m_file_open_Callback(hObject, eventdata, handles)% hObject handle to m_file_open (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)filename, pat
22、hname = uigetfile( . *.bmp;*.jpg;*.png;*.jpeg, Image Files (*.bmp, *.jpg, *.png, *.jpeg); . *.*, All Files (*.*), . Pick an image); if isequal(filename,0) | isequal(pathname,0), return; end axes(handles.axes_src); fpath=pathname filename; img_src=imread(fpath); imshow(img_src); setappdata(handles.fi
23、gure_pj,img_src,img_src); % -function m_file_save_Callback(hObject, eventdata, handles)% hObject handle to m_file_save (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)filename, pathname = uiputfile(*.bmp,BMP file
24、s;*.jpg;,JPG files, Pick an Image); if isequal(filename,0) | isequal(pathname,0) return;%如果点了“取消” else fpath=fullfile(pathname, filename);%获得全路径的另一种方法 end img_src=getappdata(handles.figure_pj,img_src);%取得打开图片的数据imwrite(img_src,fpath);%保存图片 % -function m_file_exit_Callback(hObject, eventdata, handles
25、)% hObject handle to m_file_exit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)close(handles.figure_pj); % -function m_file_Callback(hObject, eventdata, handles)% hObject handle to m_file (see GCBO)% eventdata
26、reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% -function m_image_Callback(hObject, eventdata, handles)% hObject handle to m_image (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with
27、handles and user data (see GUIDATA)% -function m_image_hj_Callback(hObject, eventdata, handles)% hObject handle to m_image_hj (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)img_src=getappdata(handles.figure_pj,i
28、mg_src); fa=45;fb=160;img_src=rgb2gray(img_src);m,n=size(img_src);J=double(img_src);k2=255/(fb-fa);for i=1:m for j=1:n if img_src(i,j) fa J(i,j)=0; elseif img_src(i,j) fb J(i,j)=k2*(img_src(i,j)-fa); else J(i,j)=0; end endendaxes(handles.axes_dst);imshow(J); % -function m_image_zk_Callback(hObject,
29、eventdata, handles)% hObject handle to m_image_zk (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)img_src=getappdata(handles.figure_pj,img_src); fa=50;fb=155;ga=154;gb=155;img_src=rgb2gray(img_src);m,n=size(img_s
30、rc);J=double(img_src);k1=ga/fa;k2=(gb-ga)/(fb-fa);k3=(255-gb)/(255-fb);for i=1:m for j=1:n if img_src(i,j) fa J(i,j)=k1*img_src(i,j); elseif img_src(i,j) fb J(i,j)=k2*(img_src(i,j)-fa); else J(i,j)=k3*(img_src(i,j)-fb)+gb; end endendaxes(handles.axes_dst);imshow(J);% -function m_image_jh_Callback(hO
31、bject, eventdata, handles)% hObject handle to m_image_jh (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)img_src=getappdata(handles.figure_pj,img_src); img_src=rgb2gray(img_src);g=histeq(img_src,255);axes(handles.axes_dst);imshow(g);