《Visual C++数字图像模式识别技术详解(第2版)》一1.1 数字图像处理概述

简介: 本节书摘来自华章出版社《Visual C++数字图像模式识别技术详解(第2版)》一 书中的第1章,第1.1节,作者:冯伟兴 贺波 王臣业,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.1 数字图像处理概述

数字图像处理也称为计算机图像处理,是指将图像信号转换成数字格式并利用计算机对其进行处理的过程。数字图像处理起始于20世纪50年代,并于20世纪60年代初期形成一门独立学科。目前,数字图像处理技术作为自动化、信息化的一个重要手段广泛应用于各行各业许多环节中,为提高工作效率和工作精度做出了不可忽视的贡献。正因为如此,图像处理理论和技术受到了各界越来越广泛的重视。

1.1.1 数字图像获取

图像是指自然景物存储在各种介质上的视觉信息。这类原始图像也称为模拟图像。计算机无法直接处理模拟图像,而需要将其转换成数字图像并采集到计算机中再进行处理。这一过程称为数字图像获取。
数字图像获取一般包括图像摄取、转换及数字化等几个步骤。该部分主要由硬件实现。例如,扫描仪可以将印有文字的书页转换为数字图像并采集到计算机中。其核心元件包括光学成像部件和光电转换部件。光学成像部件由灯管、反光镜、镜头,以及电荷耦合器件组成。扫描仪工作时,灯管发出强光照射书页;镜头在反光镜辅助下对书页图像的反光进行聚焦,并由电荷耦合器件进行光采集,生成关于书页的图像。这种图像还需由光电转换部件将其转换成计算机可以读懂的二进制数字格式,即生成最终的数字图像。最后,扫描仪通过通信接口将数字图像传送至计算机中,完成整个书页图像的获取过程。

1.1.2 图像显示与存储

图像采集到计算机中,是以图像文件的形式存储的。在需要时,由应用程序对这些文件进行读取及信息处理。
1.图像显示
图像在计算机屏幕上的显示,实际上是从存有图像数据的图像文件中取出数据,再按计算机显示电路的要求送到显示存储器和调色板中的过程。其中,显示存储器中的数据是关于在计算机屏幕不同位置上显示的颜色值,而颜色的定义则由调色板控制。同时,从图像文件头中可取得图像的各种参数,这些参数用于控制图像的显示。如果文件中数据的存储形式与显示模式不一致,则还须进行类型转换。
2.图像存储
显示在屏幕上的图像,其调色板寄存器和显示存储器中的数据可用专门编制的程序读出。图像参数可以在显示过程中得到。屏幕图像的存储过程则按显示过程的相反方向进行。

1.1.3 数字图像文件

为了对数字图像文件进行正常存取,这里介绍数字图像文件的文件结构。尽管图像文件种类繁多,但其结构却相似。
1.图像基本类型
为了更清楚地解释数字图像文件结构,先简单介绍一下数字图像按颜色分类的基本类型。
(1)二值图像
一幅二值图像的像素值仅由0、1两个值构成,“0”代表黑色,“1”代表白色。由于每一像素取值仅有0、l两种可能,所以计算机中二值图像像素的数据类型通常为1个二进制位。
(2)16色图像
一幅16色图像像素值的取值范围为[0, 15],由4个二进制位表示。实际上,这0到15并不代表具体颜色,而是调色板中16种颜色的索引值。由于这类图像只能显示16种颜色,因此显示效果不是很精细,现在只在图标等较少的场合中应用。
(3)256色图像
一幅256色图像像素值的取值范围为[0, 255],由8个二进制位表示。和16色图像一样,这0到255也不代表具体颜色,而是调色板中256种颜色的索引值。和16色图像相比,由于可显示的颜色更丰富了,显示效果得到明显改善。
256色图像更重要的一种应用格式是256灰度图像。256灰度图像实际上是256色图像的一个特例。图像像素值的取值范围仍然是[0, 255],但每一个数值代表一种灰度,“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑到白的过渡色。就文件格式而言,256灰度图像仍然采用256色图像的格式,只不过其调色板中的256种颜色已明确由小到大定义成不同灰度的颜色。由于256灰度图像去除了颜色信息,因此,在很多图像分析场合,尤其是数字图像模式识别应用中较常用。
(4)真彩色图像
和上述图像不同,真彩色图像的像素值直接表示具体颜色,因此没有调色板。一般,真彩色图像的每个像素值由3个字节组成,分别表示红(R)、绿(G)、蓝(B)三原色的亮度值。组合在一起,真彩色图像共可以表示256×256×256=16 777 216,或16M种颜色。由于真彩色图像所能表示的颜色数量已经超过人眼所能分辨的颜色数量,因此,实际应用中认为真彩色图像的显示效果和数字化前的原始图像是一样的,这也是真彩色图像名称的由来。
2.图像文件结构
在计算机中,数据是以文件的形式存储在外存储器中的,图像数据也不例外。图像文件就是以数字形式存储起来的图像。为了便于读写,图像数据一般以一定的格式存放。目前已有几十种图像文件格式,它们虽各不相同,但都具有相似的特征。图像文件一般由文件头、像素数据和调色板数据三部分组成。
(1)文件头
文件头用于存放图像基本信息,包括各种特征参数、像素数据与调色板数据在文件中的存放位置,以及文字注解等。它分固定格式及灵活格式两大类。前者如BMP、PCX文件等,它们存储规定的参数,且数据在文件中的存储位置是固定的。后者如TIF文件,文件中除了规定的参数外,还可自行定义特征参数,数据在文件中的存储位置也不固定,且同一文件中还可存放多幅图像。还有一些格式介于两者之间,如GIF和TGA文件格式。
(2)像素数据
像素数据以位图的形式存放,每个像素数据对应图像相应位置上的颜色值,具体颜色值的定义由调色板数据提供。像素数据有压缩和不压缩之分。压缩数据可以节省存储容量,但在存取时须进行压缩和解压缩处理,处理速度稍慢。不压缩的像素数据在不同格式的图像文件中的存储结构基本相同。
(3)调色板数据
调色板数据是指二值、16色和256色彩色图像的色调数据,一般放在文件头。图像显示时需要调用调色板数据。
真彩色图像的像素数据中已有颜色分量,故不再需要调色板数据。
3.图像文件常用参数
在图像的显示控制中最为重要的参数为图像的宽度、高度、每像素所占位数、位平面数、图像类型、像素数据存储位置、调色板数据存储位置、压缩类型和图像扫描方向等。它们可分为图幅参数、类型参数、位置参数和其他参数4类。
(1)图幅参数
图像的宽度和高度是图像的基本参数。由图像宽度可以计算出每行字节数,即由图像宽度乘以每像素字节数直接求得,但有的图像格式要求每行字节数是4的倍数(如BMP文件)或偶数(如PCX文件),计算时须调整。
(2)类型参数
图像的类型参数通过每像素所占位数进行表示,包括1、4、8、24等。其中,类型为1、4、8的图像中,每像素数据仅为调色板上的颜色索引号,因此,其对应调色板所存储的颜色个数分别为2、16和256。而类型为24的图像是真彩色图像,由于其每像素数据直接表示对应颜色值,因此,它不需要调色板数据。
有的图像类型还特别注明图像是黑白还是彩色。有了这个参数,类型为8的黑白图像文件中,每像素数据可以直接表示对应黑白灰度值(0~255),因此可以省略调色板数据(如TIF、TGA文件)。
(3)位置参数
像素数据和调色板数据的存储位置用于对图像数据的存数指针、取数指针进行定位。它们的存放位置可以是固定的,也可以是不固定的,因不同文件而不同。
这里须注意图像扫描方向或数据存储顺序。大多数图像文件采用的扫描方向为自上而下(如PCX、GIF、TIF与JPEG文件),少数为自下而上(如BMP、TGA文件)。因此,在对读取图像数据进行显示或处理时,须按照文件类型进行相应调整。
(4)其他参数
压缩类型用于注明图像文件是否压缩、采用何种压缩等,供存数及取数程序确定是否需要压缩和解压缩。
综上所述,尽管计算机中存储的图像文件类型繁多,但不同类型的图像文件均可由图像中每像素所占位数和位平面数等图像类型参数来区分,如表1-1所示。图像文件按每像素所占总位数可分为4类,即黑白二值、16色彩色、256色彩色和24位真彩色。有些图像文件中用图像类型这个参数来区别黑白图像和彩色图像。表1-1中,pal表示该文件类型采用调色板,需要调色板数据;rgb表示彩色分量排列顺序为红、绿、蓝,bgr则相反,为蓝、绿、红;bw、wb则省略调色板,前者表示黑白图像中零值为黑色,高数值为白色,后者则相反,零值为白色,高数值为黑色;*表示该类图像支持的数据类型。
screenshot

此外,16色彩色和真彩色图像可分为第一位平面结构与多位平面结构两类。单一位平面结构下,图像数据以像素为单位集中存放,与显示存储器中的存放形式相同。而图像文件中的多位平面存储结构与显示存储器中的有所不同,它是以行为单位存放的。在同一行中,图像数据以颜色分量为单位集中在一起,每个位平面相当于一行黑白图像,几个位平面的数据依次存放。

1.1.4 数字图像处理

数字图像处理即针对在空间上离散的、在幅值上量化分层的数字图像,采用一些特定数理模式进行加工处理,以达到有利于人眼视觉或某种接收系统所需要的图像的过程。一般,数字图像处理的方法主要包括:图像变换、图像增强、图像复原、图像压缩编码等。这部分处理也称做数字图像的预处理。其基本特点是输入和输出均为图像。在此基础上,可以进行图像分析、模式识别等内容研究。一般认为图像分析和模式识别是和图像预处理相对独立的另外两个部分,其基本特点是输入是图像,输出不是图像,而是对图像的分析和特征分类,或对图像的描述和解释。

相关文章
|
1月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
71 0
|
1月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
1月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
32 1
|
1月前
|
存储 编解码 vr&ar
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
69 0
|
1月前
|
存储 算法 编译器
C/C++编译器局部优化技术:局部优化是针对单个函数或基本块进行的优化
C/C++编译器局部优化技术:局部优化是针对单个函数或基本块进行的优化
32 0
|
21天前
|
存储 C++
【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)
【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)
|
29天前
|
算法 IDE Java
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
【软件设计师备考 专题 】面向对象程序设计语言:C++、Java、Visual Basic和Visual C++
40 0
|
29天前
|
算法 编译器 C++
【C++ 泛型编程 中级篇】C++ 编译时技术:探索 if constexpr 和 std::enable_if
【C++ 泛型编程 中级篇】C++ 编译时技术:探索 if constexpr 和 std::enable_if
40 0
|
29天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
29天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0

热门文章

最新文章