数据图像处实验报告.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据图像处实验报告

实验一 将真彩色图象转化为灰度图象并进行变换 一、实验目的: 了解图像处理基本方法、理解图像颜色空间基本操作及相互变换方法; 了解并掌握Matlab图像处理算法实现的基本过程; 掌握彩色图像处理和变换基本方法(Matlab/VC++实现); 熟悉并理解灰度图像的基本操作和变换。 二、实验原理: 彩色图像转换为灰度图像原理及灰度窗口变换原理 彩色图像转换为灰度图像基本原理 彩色图像有不同的颜色空间,根据不同的颜色空间转换公式对图像进行转换,选择最具代表性的分量信息,对图像进行处理和特征提取,是图像处理的关键步骤:颜色空间转换公式如(YIQ-RGB): RGB图像转换为灰度图像是保留图像亮度信息而去掉图像色彩饱和度等信息,得到图像的灰度图像如图1所示,图像灰度变换及灰度数据: 图1:图像灰度变换及灰度数据 图像的灰度拉伸是图像的基本变换,在原始图像信息的基础上对图像进行点运算变换和调整其基本变换公式为: 图2:灰度变换曲线 熟悉VC编程环境,在课程所给实验代码基础上进行图像灰度变换调整和实验示例曲线如图2 三、实验内容和过程 将实验图像进行不同颜色空间转换(在Matlab下实现),观察图像特征及理解图像转换基本关系式和不同分量特征; 代码如下; I=imread(123.jpg); gray=rgb2gray(I); hsv=RGB2HSV(I); ntsc=RGB2NTSC(I); ycbcr=RGB2YCBCR(I); subplot(2,2,1); imshow(I);title(原图); subplot(2,2,2);imshow(gray);title(灰度图像); subplot(2,2,3);imshow(hsv);title(HSV空间图像); subplot(2,2,4);imshow(ycbcr);title(YCBCR空间图像); 运行结果如右: 分析:原图为RGB颜色空间的图像,RGB是依据人眼识别的颜色定义出的空间,可表示大部分颜色。是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重颜色。在 RGB 模式下,每种 RGB 成分都可使用从 0(黑色)到 255(白色)的值用不同的灰度色阶来表示“ 红,绿,蓝”在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。 用于显示的灰度图像通常用每个采样像素位的非线性尺度来保存,这样可以有级灰度模型颜色的参数分别是:色调(H),饱和度(S),亮度(V)。H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。V表示色彩的明亮程度,范围从0到1。中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。主要的子采样格式有 YCbCr 4:2:0、YCbCr 4:2:2 和 YCbCr 4:4: 图表 2原图 图表 3灰度变换后的图 分析:变换后的图像颜色层次更加分明。从上图的灰度变换曲线调整窗口可知,灰度值在0-50和200-255范围内对比度降低,其余部分对比度提高。而该图像灰度值大部分集中在50-200范围内,这样整个图像的对比度就增强了。 b)在VC6.0环境下找到图像灰度变换函数代码,分析代码实现过程与方法,在实验结束后,画出灰度变换函数代码的实现流程图,理解灰度变换在在VC6.0环境下实现的基本方法; 代码: BOOL WINAPI GrayStretch(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bX1, BYTE bY1, BYTE bX2, BYTE bY2) { unsigned char* lpSrc; LONG i; LONG j; BYTE bMap[256]; LONG lLineBytes; lLineBytes = WIDTHBYTES(lWidth * 8); for (i = 0; i = bX1; i++) { if (bX1 0) bMap[i] = (BYTE) bY1 * i / bX1;

文档评论(0)

liwenhua11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档