图像灰度转变程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*******************
实践教学
*******************
兰州理工大学
运算机与通信学院
2012年秋季学期
运算机图象处置综合训练
题目:图像灰度转变程序设计
专业班级:
姓名:
学号:
指导教师:成绩:
目录
摘要 (1)
一、前言 (3)
二、算法分析与描述 (4)
对比度扩展 (4)
灰级窗处置 (5)
直方图均衡 (6)
三、详细设计进程 (7)
层次图 (7)
对比度线性展宽详细设计 (7)
灰级窗详细设计 (8)
直方图均衡化处置详细设计 (9)
四、调试进程中出现的问题及相应解决办法 (10)
五、程序运行截图及其说明 (11)
(12)
六、简单操作手册 (14)
(15)
设计总结 (17)
参考资料 (18)
致谢 (19)
附录 (20)
摘要
运算机图像处置与分析是集光学、数学、运算机科学、电子学、信息论、控制论、物理学、心理学和生理学等学科的一门综合性边缘科学。

随着运算机科学的迅猛进展,和与近代进展的新理论如小波分析、马尔柯夫随机场、分形学、数学形态学、人工智能和人工神经网络等的结合,运算机图像处置与分析最近几年来取得了长足的进展,呈现出壮大的生命力。

已在科学研究、工农业生产、军事技术、医疗卫生、教育等许多领域等到普遍的应用,产生了庞大的经济和社会效益,对推动社会进展,改善人们生活水平都起到了重要的作用。

本程序设计主要实现对对比度线性展宽、灰级窗处置和直方图均衡化的处置,从而达到咱们所需的要求,进而将其应用到特殊领域。

在图像处置中主要用VC++编写图像处置程序,并挪用C++图像处置的部份内部函数进行处置。

关键词:数字图像处置;对比度线性展宽;灰度窗处置;直方图均衡化
一、前言
图像处置(image processing),用运算机对图像进行分析,以达到所需结果的技术。

又称影像处置。

大体内容图像处置一般指数字图像处置。

数字图像是指用数字摄像机、扫描仪等设备通过采样和数字化取得的一个大的二维数组,该数组的元素称为像素,其值为一整数,称为灰度值。

图像处置技术的主要内容包括图像紧缩,增强和恢复,匹配、描述和识别3个部份。

常见的处置有图像数字化、图像编码、图像增强、图像恢复、图像分割和图像分析等。

图像处置一般指数字图像处置。

灰度变换主要针对独立的像素点进行处置,通过改变原始图像数据所占有的灰度范围而使图像在视觉上取得改观,没有利用像素点之间的彼此关系。

因此,灰度变换处置方式也叫点运算。

点运算是一种既简单又重要的技术,一幅输入图像通过点运算后将产生一幅新的输出图像,由输入像素点的灰度值决定相应的输入像素点的灰度值。

二、算法分析与描述
对比度扩展
对比度:通俗地讲,就是亮暗的对比程度。

设有一幅图,由于成象光阴照不足,使得整幅图偏暗,(灰度范围从0到63);或成象光阴照过强,使得整幅图偏亮,(灰度范围从200到255),咱们称这些情形为低对比度,即灰度都挤在一路,没有拉开。

灰度扩展的意度的目的,图2-1说明对比度扩展的原理思就是把你所感兴趣的灰度范围拉开,使得该范围内的像素,亮的越亮,暗的越暗,从而达到了增强对比度的目的。

咱们能够用图2-1来讲明对比度扩展的原理。

图2-1 对比度扩展的原理
图中的横坐标gold表示原图的灰度值,纵坐标gnew表示gold通过对比度扩展后取得了新的灰度值。

a,b,c为三段直线的斜率,因为是对比度扩展,所
以斜率b>1。

g
1old 和g
2old
表示原图中要进行对比度扩展的范围,g
1new
和g
2new
表示
对应的新值。

用公式表示为
显然要取得对比度扩展后的灰度,咱们需要明白a,b,c,g 1old ,g 2old 五个参数。

由于有新图的灰度级别也是
255
那个约束,所以知足
ag 1old +b(g old -g 1old )+c(255-g 2old )=255那个方程。

如此,咱们只需给出四个参数,而另一个能够代入方程求得。

咱们假设a=c ,如此,咱们只要给出b ,g 1old 和g 2old ,就可以够求出
a=(255-b(g 2old -g 1old ))/(255-(g 2old
-g 1old ))
要注意的是,给出的三个参数必需满:(1) b*(g 2old -g 1old )<=255;(2) (g 2old -g 1old )<=255。

灰级窗处置
灰级窗也称为灰度窗口,灰级窗能够看做是对比度扩展的一个特例,它是将某一区间的灰度级和其它部份(背景)分开,只显示指定灰度级范围内的信息。

灰级窗的原理如图2-2所示
不难看出,只要令比度扩展中的α=γ=0就实现了灰级窗。

咱们只要给出范围的两个端点,斜率β就可以够用方程β(b-a)=255求出,灰级窗的原理和对比度扩展的原理类似。

直方图均衡
直方图均衡化处置的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全数灰度范围内的均匀散布。

是对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减。

从而达到清楚图像的目的。

直方图均衡化(光滑化)是一种最常常利用的直方图修正,它是把给定图像的直方图散布改造成均匀直方图散布。

直方图均衡化致使图像的对比度增加。

由信息学的理论来解释,具有最大熵(信息量)的图像为均衡化图像。

直观地讲,直方图均衡化一方面要求尽可能扩展灰度的散布域;另一方面更重要的是尽力使每一个灰度级上的频度尽可能一致。

频度趋于一致的图像令人感觉色调沉稳、安宁,意味着图像质量“好”。

三、详细设计进程
层次图
图3-1 层次图
对比度线性展宽详细设计
具体实现形式为:g(x,y)=(d-c)/(b-a)[f(x,y)-a]+c
作用:使曝光不充分图像中黑的更黑,白得更白,从而提高图像对比度
I = imread(''); %读入图片
[d1,d2,d3] = size(I);
if(d3 > 1)
I = rgb2gray(I); %若是是灰度图就不用先变换
end
I = double(I) / 255;
I1 = uint8(255 * I * + ;
imshow(I1);
imwrite(I,'') %显示展宽后的图片
灰级窗详细设计
clear all;
close all;
fa=45;
fb=160;
I=imread('');
imshow(I);
I=rgb2gray(I);
figure;imshow(I);
[m,n]=size(I);
J=double(I);
k2=255/(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
end
end
figure;
imshow(J);
直方图均衡化处置详细设计
img=imread('');
p=rgb2gray(img);
h=imhist(p);
h1=h(1:2:256);
h2=1:2:256;
stem(h2,h1,'r--');
figure,imhist(p);
四、调试进程中出现的问题及相应解决办法
1.本软件大多数功能实现是针对二值图像,若是输入图像为RGB图像如:侵蚀,膨胀将无法处置显示,请先进行RGB图像转二值图像操作后再进行其他处置,图像在进行二值转换时要注意阙值的大小,以便使得图片的效果最佳。

2.第二是图片的路径问题,第一得找到图片所在的位置,不然会显示错误。

3.调试进程中要注意Tag的属性设置和String的属性,正确赋值,避免错误运。

五、程序运行截图及其说明
1.打开文件

2.打开图片后如图

3.点击图像处置下的对比度扩展

4. 点击图像处置下的灰级窗处置

5. 点击图像处置下的直方均衡化
图6.点击文件目录下的保留进行保留

六、简单操作手册
若是装有matlab软件直接双击导入相应函数以后,点击“回车”键程序,实现相应的功能。

运行程序出现界面:
图开始界面
点击文件,再点击打开,选择原图:
点击图像处置,选择灰级窗/对比度线性展宽/直方均衡化


图点击文件,选择保留,保留图像

设计总结
通过本次课程设计,使我对《运算机图像处置》这门课程有了更深切的理解。

《运算机图像处置》是一门实践性较强的课程,为了学好这门课程,必需在掌握理论知识的同时,增强上机实践。

一个人的力量是有限的,要想把课程设计做的更好,就要学会参考必然的资料,吸取他人的经验,让自己和他人的思想有机的结合起来,得出属于你自己的灵感。

程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。

再总体解决大的问题。

这样做起来不仅有条理也使问题得到了轻松的解决。

在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。

生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

虽然这只是一次的极简单的课程制作,可是平心而论,也耗费了我不少的心血,这就让我不得不佩服开发技术的前辈,才意识到老一辈对我们社会的付出,为了人们的生活更美好,他们为我们社会所付出多少心血啊!
对我而言,知识上的收获重要,精神上的丰收更加可喜。

让我知道了学无止境的道理。

我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。

挫折是一份财富,经历是一份拥有。

这次课程设计必将成为我人生旅途上一个非常美好的回忆!
通过这次的课程设计我对于专业课的学习有了更加深刻的认识,以为现在学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。

以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!
参考资料
[1]张力,VisualC++高级编程,人民邮电出版社,2002
[2]何斌,马天予,王运坚,红莲等编著,VisualC++数字图像处置,人民邮电
出版社,2002
[3]白乔,左飞,把脉VisualC++,电子工业出版社,2009
[4]章毓晋.图像处置和分析基础[M].北京:高等教育出版社.2002.
[5]钟志光,鲁君,刘伟荣.VC++.NET数字图像处置实例与解析[M].清华大学出版社,2003.
[6]汪翔袁辉,Visual C++实践与提高,中国铁道出版社,2001
第一感激我的指导老师徐志刚老师,她在我的综合训练进程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。

感激我的运算机图像处置老师徐志刚老师和在以往的基础课学习中为我打下良好的基础,这是我这次综合训练能够顺利完成的前提。

还有我的同窗,在设计进程与完成后对程序的测试,没有他们,或许就难以发觉一些潜在的错误,在此一并表示感激。

function varargout = untitled(varargin)
% UNTITLED M-file for
% 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 local % function named CALLBACK in 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 name or invalid value makes property application % stop. All inputs are passed to untitled_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's 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 help untitled
% Last Modified by GUIDE 09-Jan-2013 11:18:34
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled_OpeningFcn, ...
'gui_OutputFcn', @untitled_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
= str2func(varargin{1});
end
if nargout
[varargout{1: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_OpeningFcn(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 V ARARGIN)
% Choose default command line output for untitled
= hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait;
% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see V ARARGOUT);
% 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 output from handles structure
varargout{1} = ;
% --------------------------------------------------------------------
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, pathname] = 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;
fpath=[pathname filename];
img_src=imread(fpath);
imshow(img_src);
setappdata,'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 files';'*.jpg;','JPG files'}, 'Pick an Image');
if isequal(filename,0) || isequal(pathname,0)
return;%若是点了“取消”
else
fpath=fullfile(pathname, filename);%取得全路径的另一种方式
end
img_src=getappdata,'img_src');%取得打开图片的数据
imwrite(img_src,fpath);%保留图片
% --------------------------------------------------------------------
function m_file_exit_Callback(hObject, eventdata, handles)
% 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;
% --------------------------------------------------------------------
function m_file_Callback(hObject, eventdata, handles)
% hObject handle to m_file (see GCBO)
% eventdata 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 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,'img_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
end
end
axes;
imshow(J);
% --------------------------------------------------------------------
function m_image_zk_Callback(hObject, 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,'img_src');
fa=50;fb=155;
ga=154;gb=155;
img_src=rgb2gray(img_src);
[m,n]=size(img_src);
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
end
end
axes;
imshow(J);
% --------------------------------------------------------------------
function m_image_jh_Callback(hObject, 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,'img_src');
img_src=rgb2gray(img_src);
g=histeq(img_src,255);
axes;
imshow(g);
26。

相关文档
最新文档