




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安阳师范学院本科学生毕业设计报告基于VC+的可视化图像处理系统报告作者 系(院) 专业 年级 学号 指导教师 日期 学生诚信承诺书本人郑重承诺:所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得安阳师范学院或其他教育机构的学位或证书所使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。签名:日期:论文使用授权说明本人完全了解安阳师范学院有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文。签名:导师签名:日期:基于VC+的可视化图像处理系统设计张小琪(安阳师范学院 物理与电气工程学院, 河南 安阳 455002)摘 要:信息技术的蓬勃发展,尤其是计算机处理数据能力的不断增强,为数字图像技术的飞速发展提供了广阔的空间,因此开发一个好的图像处理软件至关重要。本文以VC+为开发环境,以BMP为操作对象,设计了一套可视化图像处理系统。该系统实现了图像处理领域的大部分常用算法,且系统界面友好,使用起来非常方便。关键词:VC+;BMP ;图像处理1 引言1.1 图像处理的重要性本系统的图像处理就是利用一系列的操作来改变图像的像素,以达到一定的目标。在图像处理系统的图像处理、图像分析、图像理解三个阶段中图像处理最为基本,而也尤为重要,因为这个阶段的工作关系到后面其他的操作。在计算机水平大大提高的基础上,图像处理在实际应用中也得到的很大的发展和利用,本系统是建立在图像处理之上,在实际中的应用得到更好的开发,也让图像分析,图像理解阶段得到更好的处理条件,从而让图像处理在实际中得到更多更广的利用。 我国科学计算可视化技术的研究开始于90年代初。由于数据可视化所处理的数据量十分庞大,生成图像的算法又比较复杂,过去常常需要使用巨型计算机和高档图形工作站等。因此,数据可视化开始都在国家级研究中心、高水平的大学、大公司的研究开发中心进行研究和应用。近年来,随着PC功能的提高、各种图形显卡以及可视化软件的发展, 可视化技术已扩展到科学研究、工程、军事、医学、经济等各个领域。随着计算机的兴起,信息可视化技术方兴未艾。我国在80年代就开始进行科学计算可视化技术的研究和应用。至今,我国不论在算法方面,还是在油气勘探、气象、计算力学、医学等领域的应用方面,都已取得了一大批可喜的成果。但从总体上来说,与国外先进水平还有相当的差距,特别是在商业软件方面,还是空白。因此,组织力量开发可视化商业软件,并通过市场竞争,促使其逐步成熟,已成为当务之急。系统设计采用了C+这门目前非常成熟的基于面向对象的计算机程序设计语言,开发工具选用Visual C+6.0。操作系统选用Windows XP等。所阐述的可视化图像处理系统演示程序的主要功能是对BMP图像的处理,主要有图像的基本操作.2 设计内容2.1 读取BMP图片BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点-占用磁盘空间过大。所以,目前BMP在单机上比较流行典型的BMP图像文件由四部分组成 :表1 BMP图像文件结构文件部分属 性说 明BITMAPFILEHEADER(位图文件头)bfType文件类型,必须是0x424D,即字符串 “BM”bfSize指定文件大小,包括这14个字节bfReservered1保留字,不用考虑bfReservered2保留字,不用考虑bfOffBits从文件头到实际位图数据的偏移字节数BITMAPINFOHEADER(位图信息头)biSize该结构长度,为40biWidth图像的宽度,单位是像素biHeight图像的高度,单位是像素biplanes位平面数,必须是1,不用考虑biBitCount指定颜色位数,1为二值,4为16色,8为256色,16,24、32为真彩色biCompression指定是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDSbiSizeImage实际的位图数据占用的字节数biXPelsPerMeter目标设备水平分辨率,单位是每米的像素数biYPelsPerMeter目标设备垂直分辨率,单位是每米的像素数biClrUsed实际使用的颜色数,若该值为0,则使用颜色数为2的biBitCount次方种biClrImportant图像中重要的颜色数,若该值为0,则所有的颜色都是重要的Palette(调色板)rgbBlue该颜色的蓝色分量rgbGreen该颜色的绿色分量rgbRed该颜色的红色分量rgbReserved保留字ImageData(位图数据)按像素按行优先顺序排序,每一行的字节数必须是4的整倍数第一部分为位图文件头BITMAPFILEHEADER,它是个结构体,其定义如下:typedef struct tagBITMAPFILEHEADER WORD bfType;DWORD bfSize;WORD bfReserved1;WORD bfReserved2;DWORD bfOffBits; BITMAPFILEHEADER;这个结构的长度是固定的,为14个字节(WORD为无符号16位二进制整数,DWORD为无符号32位二进制整数)。第二部分为位图信息头BITMAPINFOHEADER,也是一个结构,其定义如下: typedef struct tagBITMAPINFOHEADER DWORD biSize; LONG biWidth;LONG biHeight; WORDbiPlanes;WORD biBitCount; DWORD biCompression; DWORDbiSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant; BITMAPINFOHEADER;这个结构的长度是固定的,为40个字节(LONG为32位二进制整数)。其中,biCompression的有效值为BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS,这都是一些Windows定义好的常量。由于RLE4和RLE8的压缩格式用的不多,一般仅讨论biCompression的有效值为BI_RGB,即不压缩的情况。第三部分为调色板(Palette),当然,这里是对那些需要调色板的位图文件而言的。真彩色图像是不需要调色板的,BITMAPINFOHEADER后直接是位图数据。调色板实际上是一个数组,共有biClrUsed个元素(如果该值为零,则有2的biBitCount次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节,其定义如下:typedef struct tagRGBQUAD BYTE rgbBlue;BYTE rgbGreen;BYTE rgbRed;BYTE rgbReserved; RGBQUAD;第四部分就是实际的图像数据。对于用到调色板的位图,图像数据就是该像素颜色在调色板中的索引值,对于真彩色图像,图像数据就是实际的R、G、B值。下面就2色、16色、256色和真彩色位图分别介绍。对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑色,1表示白色),所以一个字节可以表示8个像素。对于16色位图,用4位就可以表示一个像素的颜色,所以一个字节可以表示2个像素。对于256色位图,一个字节刚好可以表示1个像素。下面有两点值得注意:(1) 每一行的字节数必须是4的整倍数,如果不是,则需要补齐。(2) BMP文件的数据存放是从下到上,从左到右的,也就是说,从文件中最先读到的是图像最下面的一行的左边的第一个像素,然后是左边的第二个像素,接下来是倒数第二行左边第一个像素,左边第二个像素。依次类推,最后得到的是最上面的最右边的一个像素。DIB(Device Independent Bitmap)图像格式是设备无关位图文件,描述图像能力基本与BMP相同,并且能够运行多种硬件平台,只是文件格式较大。2.1.1 加载文件加载文件的目的是要得到图片属性,以及RGB数据,然后可以将其绘制在DC上(GDI),或是生成纹理对象(3D:OpenGL/Direct3D)。这两种用途在数据处理上有点区别,我们主要按前一种用法讲,在和3D有不同的地方,我们再提出来。(1) 加载文件头/Load the file header BITMAPFILEHEADER header; memset(&header, 0, sizeof(header); inf.read(char*)&header, sizeof(header); if(header.bfType != 0x4D42) return false; (2) 加载位图信息头/Load the image information header BITMAPINFOHEADER infoheader; memset(&infoheader, 0, sizeof(infoheader); inf.read(char*)&infoheader, sizeof(infoheader); m_iImageWidth = infoheader.biWidth; m_iImageHeight = infoheader.biHeight; m_iBitsPerPixel = infoheader.biBitCount; 这里我们得到了3各重要的图形属性:宽,高,以及每个像素颜色所占用的位数。(3) 加载图片数据(4) 绘制2.1.2 像素与RGB “像素”(Pixel) 是由 Picture(图像) 和 Element(元素)这两个单词的字母所组成的,是用来计算数码影像的一种单位,如同摄影的相片一样,数码影像也具有连续性的浓淡阶调,我们若把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”。这种最小的图形的单元能在屏幕上显示通常是单个的染色点。越高位的像素,其拥有的色板也就越丰富,越能表达颜色的真实感。都由红、绿、蓝(R,G,B)组合而成。有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如浅红。针对含有红色成分的多少,可以分成0到255共256个等级,0级表示不含红色成分;255级表示含有100%的红色成分。同样,绿色和蓝色也被分成256级。这种分级概念称为量化。这样,根据红、绿、蓝各种不同的组合我们就能表示出256256256,约1600万种颜色。这么多颜色对于我们人眼来说已经足够丰富了。表2常见颜色的RGB组合值颜色RGB红25500蓝02550绿00255黄2552550紫 2550255青0255255白255255255黑000中间等级灰度127127127这张R、G、B的表,就是我们常说的调色板(Palette),另一种叫法是颜色查找表LUT(Look Up Table),似乎更确切一些。Windows位图中便用到了调色板技术。其实不光是Windows位图,许多图象文件格式如pcx、tif、gif等都用到了。所以很好地掌握调色板的概念是十分有用的。RGB颜色阵列对于24位的RGB位图像素数据格式是:蓝色B值绿色G值红色R值图1对于32位的RGB位图像素数据格式是:蓝色B值红色R值绿色G值图22.2 灰度变换 原因:由于图像处理的操作对象是灰度图像,所以必须把彩色RGB转换为Gray。一幅彩色图像的象素矩阵中每个象素由RGB 3种颜色按一定的比例混合形成一种颜色来表示,比如黑色使RGB(0,0,0) ,纯红色是RGB(0,1,0).。在处理相片时,有时可能因为环境光源太暗,使RGB色的值偏小,就会使图形太暗看不清,如果环境光源太光,又使图像泛白,通过灰度变换,就可以使RGB值调和到合适的程度,使相片变得漂亮。2.2.1 常用的颜色空间有YUV、CMY、HSLCMY:CMY是青(Cyan)、洋红或品红(Magenta)和黄(Yellow)三种颜色的简写,是相减混色模式,用这种方法产生的颜色之所以称为相减色,黑色(black ink),这种模型称为CMYK模型,广泛应用于印刷术。每种颜色分量的取值范围为0100;CMY常用于纸张彩色打印方面。 HSL色彩模式是工业界的一种颜色标准,是通过对色调(H)、饱和度(S)、亮度(L)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,HSL即是代表色调,饱和度,亮度三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。HSL色彩模式使用HSL模型为图像中每一个像素的HSL分量分配一个0255范围内的强度值。HSL图像只使用三种通道,就可以使它们按照不同的比例混合,在屏幕上重现16777216种颜色。YUV: 颜色空间的 Y 分量决定了颜色的明亮度(也有说是光亮度或者明度),U 分量和 V 分量决定了颜色本身(色度)。Y 分量的取值范围是 0 到 1(或者数字值 0 到 255),U 分量和 V 分量的取值范围是 -0.5 到 0.5(或者有符号数字值 -128 到 127,无符号数字值 0 到 255)。YUV 颜色空间的一个很巧妙的地方就是,你可以完全丢弃 U 分量和 V 分量的数据从而得到一幅灰度级别的图像。考虑到人眼对明亮度的敏感程度大大高于对颜色的感知程度这一生理特点,许多有损图像压缩格式都丢弃了半数甚至更多采样像素点的色度频道数据来达到减少需要处理的数据量的目的,而又不至于严重的破坏或者降低图像的质量。2.2.2 程序编写思路首先申请内存m_lGray,把BMP图的高度、宽度值存入该内存,以后编写其他程序可以直接调用这个内存。m_lRgbSize是定义的全局变量,存放真实值。彩色RGB转化为Gray值像素m_lRgbSizeGraym_lGray 图3从m_lRgbSize取出像素,通过求出每个像素RGB的灰度值,把灰度值存放到m_lGray。RGB由三个字节组成,每个字节占8位,通过灰度变换公式:Gray = int (0.11*R+0.59*G+0.3*B);分别求出R、G、B三个基色的Gray值RGB Gray Gray Gray图4显示窗口需要在申请一个填充函数Pbuffer,把Gray值填充到R、G、B分量中,从而实现彩色RGB转换成灰度图像。2.2.3 灰度变换效果图像 图5原图 图6灰度转换图2.2.4 程序代码 void CReadbmpView:OnGray()Invalidate();m_lGray = new unsigned charm_nHeight * m_nWidth;Rgb2Gray(m_lRgbSize, m_lGray, m_nWidth, m_nHeight);void CReadbmpView:Rgb2Gray(unsigned char *src, unsigned char*dst, int nWidth, int nHeight)unsigned char *pData = src;unsigned char *pTmp = dst;int i,j;for(i=0; inHeight;i+)for(j=0;jnWidth;j+)int B = *pData;pData+;int G = *pData;pData+;int R = *pData;pData+;int Gray = int (0.11*R+0.59*G+0.3*B);*pTmp = Gray;*pTmp+;2. 二值化 关于二值化的几个概念 位深度,也称作像素深度或深度。用来度量在图像中有多少颜色信息来显示或打印像素,通常用Bit来表示。较大的位深度意昧着数字图像中有更多、更精确的颜色来表示图像。位深度为1表示图像所包含的颜色信息只可能有2 种,即黑和白两种颜色。位深度为8则有2 (256)种颜色,通常位深度在16位以上时,称为真彩色。二值位图模式,简单说,就是只用两种颜色值(即黑色和白色)来表示图像中的每一个像素的图像格式。其位深度为1,要求的磁盘空间最少。由于只有两种颜色的信息,故不能用来表示色彩丰富、层次鲜明的图像。灰度模式,一种位深度为4或8的位图模式。灰度模式类似于我们日常见到的“黑白照片”,灰度图像的每个像素有一个0(黑色)255(白色)之间的亮度值(称为灰度值),该模式最多使用256级灰度,可以表现出丰富的色调。同其它模式的图像比较而言,灰度图的图像文件通常要小于相同尺寸的真彩色位图,表现能力又优于黑白两色的图像。2.3.1 简单阈值简单阈值是指用灰度变换来研究灰度图像的一种常用方法,即设定某一阈值将灰度图像的像素分成大于阈值的像素群和小于阈值的像素群两部分。例如输人灰度图像函数为,输出二值图像函数为,则 (1)阈值(threshold )是把目标和背景区分开的标尺,选取适当的阈值就是既要尽可能保存图像信息,又要尽可能减少背景和噪声的干扰,这是选择阈值的原则。我们设阈值Threshold=127.首先,众所周知,以原始形态存在的纸质文献大多数都:是黑白二色的(插图除外),二值化的过程可以比较真实地模拟文献的原始形态,保留文献的原汁原昧。其次,从存储技术的角度来看,二值化过程使图像中的重复信息增多,从而有效地提高了图像的可压缩比率,大大缩小了文献的存储空间,起到了给图像“减肥”的效果。第三,当读者阅读数字化文献时,要涉及到诸如OCR 识别(3)等问题,现在的许多OCR 识别系统都要求所识别的图像必须为黑白两色图像,因此为了提高识别率,必须要对扫描的图像进行二值化。2.3.1.1 程序编写思路在此方案中可以直接调用m_lGray函数。真实值放在m_lGray中,并申请调用内存m_lBinary,并在新创建的binary函数中设定*src源代码指针,*dst存放内存m_lBinary的内容。图像阈值化这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但是遗憾的是,如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果,甚至也没有一个理论指导我们选择特定方法处理特定图像。所有这些阈值化方法,根据使用的是图像的局部信息还是整体信息,可以分为上下文无关(non-contextual)方法和上下文相关(contextual)方法;根据对全图使用统一阈值还是对不同区域使用不同阈值。 2.3.1.2 简单阈值效果图像 图 7原图 图 8 灰度转换图通过这两幅的比较,可见简单阈值的缺点是会丢失部分信息。2.3.1.3程序代码如下 void CReadbmpView:OnSimthreshold() Invalidate();m_lBinary = new unsigned charm_nHeight * m_nWidth;binary(m_lGray,m_lBinary,m_nWidth,m_nHeight);void CReadbmpView:binary(unsigned char *src,unsigned char*dst,int nWidth,int nHeight)unsigned char*pData = src;unsigned char*pDst = dst;int i,j;for(i=0; inHeight;i+)for(j=0;j=127)*pDst = 255;else*pDst = 0;pData+;pDst+;2.3.2 迭代二值化2.3.2.1 迭代二值化原理迭代法是另外一种全局二值化方法,它要求图像分割阈值的算法是基于逼近的思想,首先选择一个近似阈值作为估计值的初始值,然后进行分割,产生子图像,并根据子图像的特性来选取新的阈值,再利用新的阈值分割图像,经过几次循环,使错误分割的图像像素点降到最少。这样做的效果好于用初始阈值直接分割图像的效果。具体算法步骤如下所述:(1) 求出图像中的最小灰度值和最大灰度值,分别记为Zmin和Zmax,则阈值初值T0为: (2) (2)(2)根据阈值TK将图像分割成目标和背景两部分,求出两部分的平均灰度值Z0和ZG: (3) (4)式中z(i,j)为图像上(i,j)点的灰度值;N(i,j)为(i,j)点的权重系数,一般N(i,j)为z(i,j)的个数。(3) 利用下式求出新阈值: (5)(4)如果TK=TK+1,则结束,否则K=K+1,转向(2)。经实验测试发现,对于直方图双峰明显、谷底较深的图像,迭代法可以较快地获得满意结果;但是对于直方图双峰不明显或图像目标和背景比例差异悬殊,迭代法所选取的阈值不如OTSU法。2.3.2.2 程序代码如下void CReadbmpView:OnThresholdib() Invalidate();m_lyellow = new unsigned charm_nHeight * m_nWidth;yellow(m_lGray,m_lyellow,m_nWidth,m_nHeight);void CReadbmpView:yellow(unsigned char *src, unsigned char*dst, int nWidth, int nHeight) unsigned char *pData = src;unsigned char *pDst = dst; int i,j;unsigned char pixel;long lHistogram256;/阈值,最大灰度值与最小灰度值,两个区域的平均灰度值UnsignedchariThreshold,iNewThreshold,iMaxGrayValue,iMinGrayValue,iMean1GrayValue,iMean2GrayValue; /用于计算区域灰度平均值的中间变量 long lP1,lP2,lS1,lS2; /迭代次数 int iIterationTimes; for (i = 0; i 256;i+) lHistogrami=0; /获得直方图iMaxGrayValue = 0;iMinGrayValue = 255;for (i = 0;i nWidth ;i+) for(j = 0;j pixel)iMinGrayValue = pixel;if(iMaxGrayValue pixel)iMaxGrayValue = pixel;pData+;2.3.2.3效果图像如下 图9原图 图 10 灰度转换图3 两种方案的比较图像阈值化这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但是遗憾的是,如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果,甚至也没有一个理论指导我们选择特定方法处理特定图像。所有这些阈值化方法,根据使用的是图像的局部信息还是整体信息,可以分为上下文无关(non-contextual)方法和上下文相关(contextual)方法;根据对全图使用统一阈值还是对不同区域使用不同阈值,可以分为全局阈值方法(global thresholding)和局部阈值方法(local thresholding,也叫做自适应阈值方法adaptive thresholding);另外,还可以分为双阈值方法(bilever thresholding)和多阈值方法(multithresholding).由于时间问题,只详细研究了这两种方案,在这里其他方案不再讨论。参考文献1 阮秋琦.数字图像处理学M.北京:电子工业出版社,20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工厂合作合同范本
- 古建材料合同范本
- 2025年地区经销商授权合同书
- 2025婚庆服务合同陷阱揭秘
- 车辆过户尾款合同范本
- 房屋出售经纪合同范本
- 和模特签约合同范本
- 旅游订金合同范本
- 企业车辆抵押合同范本
- 建材家居定制合同范本
- GB/T 45607-2025船舶与海上技术船舶系泊和拖带设备系泊导缆孔底座
- 外墙高空蜘蛛人作业施工方案
- 新常态下的中国消费-麦肯锡
- 酒店楼层分租协议书
- 血液肿瘤科知识培训课件
- 网络安全产品代理销售合同
- 广播工程系统施工方案
- 新能源汽车概论 课件 5.1新能源汽车高压安全与防护
- 带状疱疹护理查房
- 2025福建德化闽投抽水蓄能有限公司招聘15人笔试参考题库附带答案详解
- VR体验馆商业计划书
评论
0/150
提交评论