370 likes | 488 Views
图像数字化与显示. 陈荣钦 chen_rongqin@163.com. 图像数字化与显示. 本节内容: 图像输入输出设备 人类视觉系统 图像数字化 常见图像格式 BMP 图像的读取和显示. 图像输入输出设备. 图像输出. 图像输入. 重要参数:分辨率 输入设备: 扫描仪 摄像机 数码相机 输出设备: 显示器 打印机 绘图仪. 图像输入输出设备. 人类视觉系统. 我们拥有最好的视觉模型,理解人眼中图像的形成过程可以帮助我们处理数字图像。我们来快速的了解一下人类视觉系统。. 人眼的结构.
E N D
图像数字化与显示 陈荣钦 chen_rongqin@163.com
图像数字化与显示 • 本节内容: • 图像输入输出设备 • 人类视觉系统 • 图像数字化 • 常见图像格式 • BMP图像的读取和显示
图像输入输出设备 图像输出 图像输入 • 重要参数:分辨率 • 输入设备: • 扫描仪 • 摄像机 • 数码相机 • 输出设备: • 显示器 • 打印机 • 绘图仪
人类视觉系统 • 我们拥有最好的视觉模型,理解人眼中图像的形成过程可以帮助我们处理数字图像。我们来快速的了解一下人类视觉系统。
人眼的结构 • 镜头将光线聚焦,并将物体成像到视网膜上,视网膜上有许多光感应器叫做圆锥细胞(6~7百万)和杆细胞(75~150百万),圆锥细胞集中在中央凹周围并对颜色很敏感,而杆细胞比较分散,对低照度比较敏感。
盲点试验 • 在纸上绘制类似于如下的图像(点和十字之间的距离为5~10厘米) • 然后闭上右眼,用你的左眼盯着“十字”,将图像放置在你前方约16~35厘米远,并慢慢的靠近你,你会发现“点”会消失(注视“十字”)。
人眼的成像 • 人眼中的肌肉可以用来改变镜头的形状,并允许我们对远近不同的物体进行聚焦。 • 而聚焦到视网膜上图像会刺激杆细胞和圆锥细胞,最终将信号发送到大脑。
物理图像 白光 被吸收的颜色 绿光 • 我们所感知到的颜色是由光的特性被物体反射而决定的,比如,白光照在绿色物体上,大部分被吸收,而只有绿光被物体反射 • 一般地,图像是由光照作用于场景并被部分的吸收,同时被场景中的物体反射形成的
图像的数学描述 • 一幅图像可以被看成是空间各个座标点上强度的集合。它的最普遍的数学表达式为: • I=f(x,y,z,,t) ,其中,x、y、z是空间坐标, 是波长, t是时间,I是图像点的光强度。 • 对静态图像,t为常数。 • 对单色图像,为常数。 • 对平面图像, z为常数。 • 例如,对于静态平面单色图像,其数学表达式可以简化为:I=f(x,y)
图像数字化 数字图像 物理图像 • 物理图像(模拟图像)是不能直接用数字计算机来处理的。首先必须将各类图像(如照片,图形,X光照片等)转化为数字图像。 • 图像数字化即将图像转化为数字图像,就是把图像分割成称为像素的小区域,每个图像的亮度或灰度值用一个整数来表示。
图像数字化 col f (row, col) row • 最终,数字图像由M行N列的像素(每个像素存储一个值)组成的。像素值通常为灰度级别(黑白图0~1,灰度图一般0~255 )。 • 我们需要确定水平和垂直方向上的像素个数N 和M,并给出每个点处的值f(row,col)
图像数字化 j i • 数字化后的图像可以用矩阵表示
图像数字化 j i • 可以采用C/C++语言中的二维数组表示 unsigned char A[256,256]; int i, j, N=256; for (j=1,j<N,j++) { for (i=1,i<N,i++){对A(i,j)进行处理、运算;} }
图像数字化 • 当从现实世界的物体采集图像(即图像数字化)时,会涉及到以下几个相关问题: • 图像感知和表示 • 采样和量化 • 分辨率
图像感知 • 输入的能量进入传感材料,传感材料对这种能量产生响应并产生电压。 • 捕获一张图片需要一系列的传感器。 • 数字传感器只可以用来测量有限的样点(一个离散的能量级集合) 图片传感器 一行图片传感器 图片传感器矩阵
图像采样 xy平面 采样行 (a,b) • 图像是一种二维信号,需要变为一维信号后采样 • 先沿垂直方向,按一定间隔从上往下顺序地沿水平方向直线扫描的方式,取出各水平行上浓淡(灰度)值的一维扫描线。 • 再对该一维扫描线信号按一定间隔采样得到离散信号 • 对于运动图像(即时间域的连续图像),先在时间轴上采样,再按静止图像处理 采样列
图像量化 f • 经过采样,模拟图像已在时间、空间上离散化为像素。但所得的像素值(即浓淡值或灰度值)仍是连续量。把取样后所得的这些连续量表示的像素值离散化为整数值的过程叫量化
图像量化 • 比如:连续浓淡(灰度)值用Z来表示,则对于满足Z(i)<Z<Z(i+1)的Z值都量化为整数值 Z(i), Z(i)称为像素的灰度值。Z与Z(i)的差称为量化误差 • 数字图像仅仅是真实场景的一个近似 量化 采样
图像量化 • 一般的灰度图,其灰度值被量化为0~255之间的整数,代表了相应的浓淡程度 • 一幅数字化后的图像其总数据量是:每行像素数(N)×每列像素数(M)×像素值占用位数(Bits) • 信息量大,以一张512×512个像素的灰度图像为例,以25帧/秒的速度播放1小时,总数据量22500M,约22G,而彩色图像需要其3倍以上 • 这样大的数据量必须进行压缩,视频压缩一直研究和开发的热点,而其中包括了图像层面的压缩
图像采样与图像质量 133x90 265x180 66x45 33x22 • 图像的采样影响图像的质量
图像量化与图像质量 16灰度级 256灰度级 4灰度级 8灰度级 • 图像的量化影响图像的质量
空间分辨率 • 空间分辨率是由取样过程决定的。 • 简单地,空间分辨率是指图像的最小可辨别细节。 • 视觉专家经常在像素级进行讨论 • 图形设计师讨论点每英寸(dots per inch,DPI) 1亿6千万像素
空间分辨率(续…) 512 * 512 1024 * 1024 256 * 256 128 * 128 64 * 64 32 * 32
亮度级分辨率 比特数 亮度级别数 举例 1 2 0, 1 2 4 00, 01, 10, 11 4 16 0000, 0101, 1111 8 256 00110011, 01010101 16 65,536 1010101010101010 • 亮度级分辨率是指表示图像时所用到的亮度级别。 • 亮度级别越多,最终的图像细节越分明。 • 亮度级分辨率通常由存储每个亮度级别时用到的比特数来给定。
亮度级分辨率(续…) 32 灰度级 64 灰度级 256 灰度级 128 灰度级 16 灰度级 8 灰度级 4 灰度级 2 灰度级
分辨率:需要多大? • 分辨率中一个经常出现的问题是到底需要多大才足够? • 往往依赖于什么样的图像,以及图像的用处 • 关键问题: • 从美学上看,图像是否美观? • 你能看到图像中你想要看到的细节吗?
分辨率:需要多大?(续…) • 右边的图片如果用来看一下汽车有几量分辨率已经足够,而如果要读取牌照就不行了。
常见的图像格式 • 常见的图像格式有: • BMP图像:Windows下,由Microsoft和IBM公司创建 • PCX图像: Zsoft公司的PaintBrush绘图软件中使用 • TIFF图像:图像质量好,可移植性高,但存储量大 • GIF图像:不能超过256色,但存储量小 • JPEG图像:高质量,高压缩,ISO标准 • 这些图像中经常用到一个叫做调色板(或者称为颜色查找表)的概念
颜色查找表 • 以一幅256×256像素的16色图像(彩色图)为例: • 原始的存储方法需要192K字节 • 采用调色板 • 给出一张颜色表存储16种颜色,而图像中存储颜色索引,通过索引从颜色表中查找真实的颜色。 • 举个例子,如果表的第0行为255,0,0(红色),那么当某个象素为红色时,只需要标明0即可 • 重新计算图像的存储量(图像数据+颜色表数据)约为:(256×256×4/8+3×16)/1024(共16个不同索引值需要4种状态),约32K • 调色板不适合真彩色图(224种颜色),因为存储量反而增加,你能算算看吗?
BMP文件格式 • 由四部分组成: • BMP文件头BITMAPFILEHEADER • BMP信息头BITMAPINFOHEADER • 调色板Palette • 实际的位图数据ImageData • 在编写程序进行BMP文件读取时,我们需要将文件中的数据一一读取,并填充上述结构
文件头BITMAPFILEHEADER • 它是一个结构体,首先需要判断是否为BMP类型才能进行后续的读取 typedef struct tagBITMAPFILEHEADER { WORD bfType; //BMP文件类型标志,值为 //0X4D42,即19978 DWORD bfSize; //整个位图文件大小 WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; //到实际的位图数据的偏移字节数 } BITMAPFILEHEADER;
信息头BITMAPINFOHEADER • 它包含了图像的宽度和高度、图像的颜色位数、图象实际用到的颜色数等重要信息,对于后续的数据读取有很大的影响 • 结构中的数据具体代表什么意义,请参考书籍《数字图像编程入门——做一个自己的Photoshop》,其电子版可以从教学网下载,同时提供了源代码 • 同时我们感谢清华大学计算机系提供ViewDib程序以及源代码,系统采用MFC类库以及面向对象构建,其中的CDib类封装了Load函数用于加载BMP和DIB文件
调色板Palette • 对于需要调色板的图像,要想正确地显示,必须根据BMP文件,产生逻辑调色板 • 为逻辑调色板LOGPALETTE分配空间 • 从BMP文件中读取颜色数、RGB值进行填充 • 最后创建并产生一个逻辑调色板 • 上述步骤的代码请参考《数字图像编程入门》 • ViewDib中的BuildPalette成员函数完成了这个步骤,不过系统函数CreateDIBPalette才是真正完成调色板创建的功臣
实际的位图数据ImageData • 位图数据最后被读取并产生真正的图像 • 通过CreateDIBitmap产生Windows设备无关的位图 • 如果需要调色板,那么需要先装入调色板,再给函数CreateDIBitmap传递调色板参数 • 最终的图像句柄为:HBITMAP,代表一个图像 • 接下来就是要将图像显示出来 • 在发生绘图消息(WM_PAINT)处进行绘制 • 要将调色板和位图调入内存上下文 • 通过BitBlt函数将位图从内存拷贝到屏幕 • OK,完成图像的显示
小结 • 我们已经了解了: • 图像输入输出设备 • 人类视觉系统 • 图像数字化 • 常见图像格式 • BMP图像的读取和显示 • 下节课我们学习图像变换…