计算机中图像颜色处理技术毕业论文

  • 格式:doc
  • 大小:265.50 KB
  • 文档页数:38

计算机中图像颜色处理技术毕业论文第一章引言1.1课题来源及意义本课题来源于科研需求。

本课题主要研究的是针对打印或扫描中出现的图像进行背景去噪、灰度化、二值化等处理,得到较为干净的字符图像块。

本课题主要对图像进行背景去噪、灰度化、二值化等处理,得到较为干净的字符图像块。

随着科学技术的不断发展,计算机的更新速度不断提高,人们的思想文化素质的提高,对图像的要求也越来越高。

因此把原始图像与计算机结合起来,从而创作出许多更加完美的图像,满足人们的需求。

计算机图像处理,是指利用计算机对图像进行一系列加工,以便获得人们所需要的效果。

图像是人类获取和交换信息的主要来源,人类感知外界信息,80%以上是通过视觉得到的。

因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。

图像处理或图像分析方法的应用越来越广泛。

1.2答题卡简介当今社会,为能够多方面评价个人能力,出现了名目繁多的考试,答题卡已不再陌生。

答题卡一般由基本信息栏、导引道和很多信息位构成。

基本信息栏一般用于填写填涂这卡片的使用者的基本信息,一般考试中包括考生的和考号。

导引道用于阅读机确认答题卡的方向和位置。

而占据绝大部分位置的信息位则是供使用者填涂其所选择的选项。

答题后,答题卡上的信息通过光标阅读机识别并储存在计算机中。

答题卡相比于传统纸答,有如下优点:1、普通纸答题卡。

印刷方便,长期使用节省成本。

2、答题卡查询方便、影像化保存答题卡。

对判卷结果有疑问,输入学号或学生可直接在电脑中查到这答题卡和判卷细节。

3、错误处理高效方便。

对于学号填涂错误、学号重复、主观题漏登分等错误情况处理方便,无需查找原始试卷,直接在电脑上调阅影像。

4、统计与分析方便。

除基本统计参数外,提供排名、分数分布、试题合理性分析、多科成绩汇总与综合等功能。

5、判卷速度快。

每小时3600试卷(标准32K答题卡)。

6、升级空间。

与网络技术结合,通过后续升级,可实现网络判卷功能。

因此,答题卡技术是一项方便快捷的考试方式。

1.3国外发展现状研究表明,计算机中图像颜色处理技术是根据RGB三原色理论对色彩信息量化,再利用像素的点运算扫描整幅图像进行一一处理。

位图图像一般分为单色图像、灰度图像和彩色图像。

单色图像只有黑色和白色两种颜色,整个图像由单纯的黑色点和白色点组成。

彩色图像的像素点是由R (红色)、G (绿色)、B (兰色) 三元色混合而成的,不同含量的R、G、B 组成不同的颜色,每一个记录单个像素的位数据单元可表示任意一种颜色。

因此,要实现图像的灰度化处理,就是在0-255里划分一定的阈值,把图像分为黑、灰、白。

为实现对图像的二值化处理,基于最大方差比的图像二值化算法能够准确而快速地对图像进行二值化,特别是当对象物和背景的灰度值的差具有一定大小的时候,效果更明显(柴本成, 2005);增强大津法和边缘检测阈值法确定的阈值对图像进行二值化处理,不仅可有效地解决图像灰度随地物特征变化的图像处理问题,同时对于同一信号源的图像也有相当理想的处理效果,该方法可进一步应用于图像分割等(吴冰,秦志远, 2001);文本图像的二值化方法可分为全局阈值方法和局部阈值方法,该方法自适应选取局部二值化时的窗口宽度,能有效消除一般二值化方法容易产生的断笔和伪影现象,同时吸收全局二值化方法的优点,保持较快的运算速度(庄军,弼,程刚,2005);基于动态二值化的数学形态学边缘检测算法首先利用动态二值化方法确定将灰度图像转化为二值图像的阈值, 然后利用数学形态学的腐蚀和去空洞相结合的方法去除二值化图像的噪声, 最后用细化方法检测单像素图像边缘(汪毅,郭显久,2008)。

对图像去噪处理,国外都提出了各自的见解。

庄红林,施国兴等的图像修补算法首先将待修补图像分解为轮廓结构图像和纹理细节图像,再对轮廓结构图像的空缺进行轮廓结构修补,最后将修补后的轮廓结构图像及纹理合成后的纹理细节图像进行合成,得到需要的修补图像(庄红林,施国兴,2008);卢颖在《基于小波变换的数字图像处理》中提出小波变换是空间(时间)和频率的局部变化,能有效地从信号中提取信息,解决了傅里叶变换不能解决的许多问题,是一种有效地变换编码工具(卢颖,2009);Jean-Luc Starck, Emmanuel J. Can dès, 和 David L. Donoho认为图像处理其基本的思想都是——把减少图像的模糊点进行到底,模糊点可以局部地处理掉,就像高斯滤波或各向异性过滤、通过可变的微积分、或者在围波段,如韦纳滤波(Jean-Luc Starck, Emmanuel J. Candès, and David L. Donoho,2002)。

1.4本文的主要工作目标本课题的目的是设计一个图像预处理系统。

其功能包括对图像进行灰度化,二值化,去噪。

基本功能对图像进行图像进行背景去噪、灰度化、二值化等处理,得到较为干净的字符图像块。

采用技术对图像二值化处理,将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。

所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。

如果某特定物体在部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。

如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。

动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。

对图像灰度化处理,根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。

对图像的去噪处理,将采用均值变化方法。

均值滤波也称为线性滤波,其采用的主要方法为领域平均法。

线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度个g (x,y),即个g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在的像素总个数。

第二章设计与实现2.1模块综述自主答题卡系统是根据用户的需求定制并生成答题卡,并对答题后的答题卡进行自动阅卷及成绩管理的一个系统,具有功能多样、界面友好、自动化强的特点。

图像预处理模块是对扫描仪扫描输入的答题卡图像进行处理。

针对打印或扫描中出现的图像倾斜进行倾斜校正;对答题卡图像进行灰度化;对彩色或灰度图像进行二值化和去噪图像预处理模块应包含的容有:图像输入、灰度化、二值化、去噪。

2.2图像灰度化2.2.1图像的灰度化处理的基本原理将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。

彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化围。

而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。

灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。

图像的灰度化处理可用两种方法来实现。

第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。

第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。

2.2.2用Delphi进行图像灰度化的实现:procedure TForm1.BitBtn1Click(Sender: TObject);varp:PByteArray;//PByteArray的定义格式//PByteArray = ^TByteArray;//TByteArray = array[0..32767] of Byte;ChangedBmp : Tbitmap;gray,x,y:integer;TestBMP : Tbitmap; // 处理过程中位图BeginTestBMP:=Tbitmap.Create;ChangedBmp:=Tbitmap.Create;TestBMP.Assign(image1.Picture);for y := 0 to TestBMP.Height - 1 dobegin//获取每一行象素信息p := TestBMP.scanline[y];for x := 0 to TestBMP.Width - 1 dobegin//这里采用YUV与RGB颜色空间变换的方法,即 Y=0.3R+0.59G+0.11B Gray := Round(p[3 * x + 2] * 0.3 + p[3 * x + 1] * 0.59 + p[3 * x] * 0.11);//由于是24位真彩色,故一个像素点为三个字节p[3 * x + 2] := byte(Gray);p[3 * x + 1] := byte(Gray);p[3 * x] := byte(Gray);//Gray的值必须在0~255之间end;ChangedBmp.Assign(TestBMP);PaintBox1.Canvas.CopyMode:=srccopy;PaintBox1.Canvas.Draw(0,0,ChangedBmp);//用PaintBox控件重新绘制图像;end;2.2.3实现灰度化代码bool Convert256toGray(LPSTR lpDIB,LPSTR lpDIBBits,long lWidth,long lHeight){BYTE * lpSrc; // 指向DIB象素的指针LONG lLineBytes; // 图像每行的字节数LPBITMAPINFO lpbmi; // 指向BITMAPINFO结构的指针(Win3.0 )LPBITMAPCOREINFO lpbmc; // 指向BITMAPCOREINFO结构的指针lpbmi = (LPBITMAPINFO)lpDIB; // 获取指向BITMAPINFO结构的指针(Win3.0)lpbmc = (LPBITMAPCOREINFO)lpDIB; // 获取指向BITMAPCOREINFO结构的指针BYTE bMap[256]; // 灰度映射表// 计算灰度映射表(保存各个颜色的灰度值),并更新DIB调色板int i,j;for (i = 0; i < 256; i ++){// 计算该颜色对应的灰度值/*bMap[i] = (BYTE)(0.299 * lpbmi->bmiColors[i].rgbRed + 0.587 * lpbmi->bmiColors[i].rgbGreen +0.114 * lpbmi->bmiColors[i].rgbBlue +0.5); */ bMap[i] = (BYTE)((306 * lpbmi->bmiColors[i].rgbRed + 601 * lpbmi->bmiColors[i].rgbGreen + 117 * lpbmi->bmiColors[i].rgbBlue + 512) >> 10 ); //修改后的优化算法// 更新DIB调色板红色分量lpbmi->bmiColors[i].rgbRed = i;// 更新DIB调色板绿色分量lpbmi->bmiColors[i].rgbGreen = i;// 更新DIB调色板蓝色分量lpbmi->bmiColors[i].rgbBlue = i;// 更新DIB调色板保留位lpbmi->bmiColors[i].rgbReserved = 0;}// 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);// 更换每个象素的颜色索引(即按照灰度映射表换成灰度值)//逐行扫描for(i = 0; i < lHeight; i++){//逐列扫描for(j = 0; j < lWidth; j++){// 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits+ lLineBytes * (lHeight - 1 - i) + j;// 变换*lpSrc = bMap[*lpSrc];}}return true;}/******************************************************* ******************* 函数名称:Gray24Bits(LPSTR lpDIB)* 函数类型:HGLOBAL* 参数: LPSTR lpDIB 指向dib的指针* 函数功能:灰度化24位真彩图像*************************************************************************/HGLOBAL Gray24Bits(LPSTR lpDIB){LPBITMAPINFOHEADER lpDIBHdr; // 指向BITMAPINFOHEADER的指针lpDIBHdr = (LPBITMAPINFOHEADER)lpDIB;LPSTR lpGray;// 计算位图图的信息头、调色板和图形数据的大小, 并给灰度图分配存int dwInfo = lpDIBHdr->biSize;int dwData = lpDIBHdr->biSizeImage;int dwGrayData = dwData/3;int dwGrayPal = 256 * sizeof(RGBQUAD);dwData=(lpDIBHdr->biHeight) * (lpDIBHdr->biWidth);int sizeTotal=dwInfo+dwGrayPal+dwData; //灰度图,颜色表长度为255HGLOBAL hGray=(HGLOBAL)::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, sizeTotal);if (hGray==0){return false; //存分配失败则返回false}lpGray = (LPSTR) ::GlobalLock(hGray);// 创建灰度图的颜色表计算每个像素点的灰度值,即求平均即可RGBQUAD* lpGrayRgbQuag=(RGBQUAD*)(lpGray+lpDIBHdr->biSize);char * lpBits = lpDIB + lpDIBHdr->biSize ;int rowLenSr=WIDTHBYTES(24*lpDIBHdr->biWidth);int rowLenDes=WIDTHBYTES(8*lpDIBHdr->biWidth);BYTE * lpGrayBits = (BYTE*)(lpGrayRgbQuag)+dwGrayPal;int aver=0;int i,j,k;if(24==lpDIBHdr->biBitCount){for(i=0;i<256;i++){lpGrayRgbQuag->rgbBlue=i;lpGrayRgbQuag->rgbGreen=i;lpGrayRgbQuag->rgbRed=i;lpGrayRgbQuag->rgbReserved=0;lpGrayRgbQuag++;}for (i=0;i<lpDIBHdr->biHeight;i++){for (j=0; j<lpDIBHdr->biWidth; j++){k=i*rowLenSr+3*j;/*lpGrayBits[i*rowLenDes+j]=(BYTE)(0.114*lpBits[k]+0.587*lpBits[k+1]+0.299*lpBits[k+2] + 0.5);*/lpGrayBits[i*rowLenDes+j]=(BYTE) (( 117 * lpBits[k] + 601* lpBits[k+1]+ 306* lpBits[k+2] + 512 ) >> 10 ); //修改后的优化算法}//修正需要补零的像素行for (j=lpDIBHdr->biWidth;j<rowLenDes;j++){lpGrayBits[i*rowLenDes+j]=0;}}}// 创建灰度图的信息头LPBITMAPINFOHEADER lpGrayHdr=(LPBITMAPINFOHEADER)lpGray;memcpy(lpGrayHdr, lpDIBHdr, dwInfo);lpGrayHdr->biSizeImage=sizeTotal;lpGrayHdr->biBitCount=8;lpGrayHdr->biClrUsed=256;::GlobalUnlock( hGray );return (HGLOBAL) hGray;}2.2.4注意事项:程序申请了TestBMP、WillbeChangedBmp,所以在程序初始化的时候,要注意创建:TestBMP:=Tbitmap.Create;ChangedBmp:=Tbitmap.Create;程序结束后注意要把TestBMP.Destory和ChangedBmp.Destory;2.2.5程序效果图原图灰度化后图2.3图像二值化2.3.1二值化的基本原理和意义灰度图像是指只含亮度信息,不含色彩信息的图像。