当前位置:文档之家› 图像识别技术和图像处理技术

图像识别技术和图像处理技术

图像识别技术和图像处理技术
图像识别技术和图像处理技术

摘要

本文对图形图像处理系统的发展现状和所采用的主要技术进行了详细分析,确定了相应的结构和主要功能,以及实际开发中所采取的技术。系统在Windows XP平台下实现,本课题是采用Visual C++作为编程工具,采用面向对象的程序设计技术实现一个图形绘制和图像处理的应用软件。主要工作分为三类,包括基本图形绘制与编辑、简单的图像处理、图像格式的转换。图形方面主要是设计图形基类,以及继承图形基类的具体图形类。通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。系统的优点有:充分体现了面向对象的设计思想,充分运用了C++的特性,比如封装、多态、继承。程序结构清晰,可读性好,程序中做了充分的注释。图形绘制部分避免了传统的switch case的繁琐结构。容易扩充和移植。

最后,对系统进行测试表明,系统功能达到了预期的要求,界面友好,操作简便,运行也较稳定,是一个完成基本功能的图形图像系统。

总体上,本文介绍了系统开发设计的全过程和设计过程中部分代码,也对系统测试的过程进行简单描述,同时对系统中采用的关键技术也作了一些必要的说明,对图像变换的基本原理,图像处理的基本原理和各种图像格式做了详细的阐述。

关键词:图形;图像;多态;继承

Abstract

This article has carried on the detailed analysis about graph image processing system development and using of the key technology,identify the corresponding structure and central function, as well as the system adopts technology in the actual development. The system realizes under the Windows XP platform, the topic use Visual C++ as a programming tool, use object-oriented programming techniques to achieve a graphic and image processing software. Major work is divided into three categories, basic drawing and editing graphics, simple image processing, and image format conversion. The graph aspect is designs the graph base class , as well as inherits the graph bas e class’s specific graph class. Through independent function's encapsulation, for the future’s needs of the graphic images lays the foundation. The system merit has: the object-oriented design’s thought application of the c++ properties, for example encapsulation, pol ymorphism, and inheritance. Program’s structure is clear, good readability, codes has the full annotation in the program. The graph plan’s part has avoided complicated structure of the traditional switch case. Easy expansion and transplantation.

Finally, system’s testing shows, s ystem’s functions achieve the expected demand, friendly interface, and the operation is simple, also a much stable operation, it has basic functions of the graphic image system.

As a whole, this paper describes the system design process and part of the process of designing code, also carries on the simple description to the system test process, meanwhile it made some necessary explanations about key technology in the system, it made the detailed description to image transform of the basic

principle, the image processing basic principle and various image formats. Keyword: graph; image; polymorphism; inheritance

目录

摘要.................................................. 错误!未定义书签。Abstract .................................................. 错误!未定义书签。第1章引言........................................... 错误!未定义书签。

课题的研究目的和意义................................. 错误!未定义书签。

国内外发展现状....................................... 错误!未定义书签。

研究方法与手段....................................... 错误!未定义书签。

运行环境......................................... 错误!未定义书签。

开发环境......................................... 错误!未定义书签。第2章图形图像处理系统相关技术综述....................... 错误!未定义书签。

图形设计基础......................................... 错误!未定义书签。

Visual C++技术概要............................... 错误!未定义书签。

图形设备接口GDI ................................. 错误!未定义书签。

设备环境DC ...................................... 错误!未定义书签。

CDC类的派生类的功能及其之间的区别............... 错误!未定义书签。

与绘图相关的GDI对象类........................... 错误!未定义书签。

坐标变换和映射模式............................... 错误!未定义书签。

图像设计基础......................................... 错误!未定义书签。

数字图像的基本概念............................... 错误!未定义书签。

调色板........................................... 错误!未定义书签。

调色板的概念..................................... 错误!未定义书签。第3章图形图像处理系统的总体设计......................... 错误!未定义书签。

需求分析............................................. 错误!未定义书签。

图形图像处理系统目标设计............................. 错误!未定义书签。

图形图像处理系统功能描述............................. 错误!未定义书签。

界面设计............................................. 错误!未定义书签。

主界面设计....................................... 错误!未定义书签。

菜单设计.......................................... 错误!未定义书签。

工具栏设计....................................... 错误!未定义书签。

属性框设计....................................... 错误!未定义书签。第4章图形图像处理系统图像部分设计....................... 错误!未定义书签。

与设备无关位图(DIB) .................................. 错误!未定义书签。

DIB位图的结构................................... 错误!未定义书签。

定义DIB处理函数集............................... 错误!未定义书签。

CDib类的设计目标................................ 错误!未定义书签。

图像变换............................................. 错误!未定义书签。

图像变换的理论基础............................... 错误!未定义书签。

旋转............................................. 错误!未定义书签。

镜像............................................. 错误!未定义书签。

图像处理的基本方法................................... 错误!未定义书签。

图像格式............................................. 错误!未定义书签。

PCX格式......................................... 错误!未定义书签。

GIF格式......................................... 错误!未定义书签。

JPEG ............................................. 错误!未定义书签。第5章图形图像处理系统图形部分设计....................... 错误!未定义书签。

图形类的设计......................................... 错误!未定义书签。

图形系统的层次结构............................... 错误!未定义书签。

类层次性的特点................................... 错误!未定义书签。

图形系统类层次的设计原则......................... 错误!未定义书签。

基类CEntity ..................................... 错误!未定义书签。

命令基类CCommand ................................ 错误!未定义书签。

派生类设计........................................... 错误!未定义书签。

派生类Cline ..................................... 错误!未定义书签。

派生类Cline的具体实现........................... 错误!未定义书签。

创建直线命令类CCreateLine ....................... 错误!未定义书签。

位置类Position ...................................... 错误!未定义书签。

构造位置类的原因................................. 错误!未定义书签。

位置类Position的实现............................ 错误!未定义书签。

图元拾取............................................. 错误!未定义书签。

直线的拾取....................................... 错误!未定义书签。

矩形的拾取....................................... 错误!未定义书签。

圆的拾取......................................... 错误!未定义书签。

图元拾取的准确度和可靠性......................... 错误!未定义书签。

图元的编辑........................................... 错误!未定义书签。

图元编辑函数..................................... 错误!未定义书签。

实现图元的交互编辑............................... 错误!未定义书签。

序列化和反序列化..................................... 错误!未定义书签。

系统测试.............................................. 错误!未定义书签。第6章结论............................................... 错误!未定义书签。参考文献.................................................. 错误!未定义书签。致谢................................................... 错误!未定义书签。

第1章引言

课题的研究目的和意义

本课题的目的是采用Visual C++作为编程工具,实现基本图形元素如直线、圆、椭圆等的绘制,对图形元素的基本操作如填充、擦除等,也包括对常用图像格式的处理,如图像的显示、图像格式的转换等[1]。

应该说,目前已有种类繁多的图形图像处理专用软件工具,如AutoCAD、和PhotoShop等,利用这些图形图像处理软件可以实现同样的功能。即便如此,研究这些图形图像处理技术仍具有一定使用价值。首先,利用一个设计良好的简单的小图形处理程序可以用于教学演示的目的,展示基本的图形图像处理技术和面向对象技术在这一领域的应用效果。其次,在很多应用中需要提供自己的图形图像处理功能,例如,在一个正在连接网络的任务中可能就希望显示一幅示意性的动画,此时,不能依赖一个图形软件来实现。因此,通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础[2]。此外,借助Visual C++语言这种典型的面向对象编程环境,能够充分挖掘硬件的潜能,得到性能优良的程序代码。

国内外发展现状

图形与图像处理是计算机最早应用的领域之一,从简单的图形显示到复杂的图像分析、模式识别,使得图形与图像处理技术不断走向成熟,也涌现出了大量的软件。例如,ACDSee、PhotoShop、CorelDraw等,这些软件提供了一般显示、特殊显示、特技处理等大量复杂的功能。图形处理技术得益于图形学的

发展,而从目的上可以将图像处理技术分为两类,分别是图像识别技术和图像处理技术。针对图像处理技术,可以是旋转、亮度、对比度、饱和度、RGB调节、调节图像尺寸等属性方面的处理技术和添加文字、图像增强、弱化、水印、特效、镂空等处理方法。甚至为了达到更精微的处理效果,这些软件还使用了图层。

随着网络和多媒体技术的发展和应用,体现在应用软件中的是一些更具有“现代感”的应用,例如,支持各种常用图形、RAW原始图片、Flash动画的快速浏览、编辑、保存、导入、导出,甚至还可以提供一些趣味涂鸦、字符素描之类的应用,以体现人的个性[3]。事实上,应用软件中常常需要采用其中的某些技术来处理相关的问题。例如,一个支持简单形状辅助设计的软件并不需要支持特效方面的方法。

在软件设计的支撑环境和技术上,C++是一个很好的选择,这主要是考虑到如下因素,主要包括代码效率高,处理底层问题能力强,支持面向对象的程序设计方法。利用C++技术可以实现对程序代码和数据的良好封装,使之能够具有良好的重用性。

研究方法与手段

1.3.1 运行环境

运行环境主要介绍了硬件环境和软件环境。

(1) 硬件环境

①处理器:Inter Pentium 166 MX 或更高

②内存:32MB或更高

③硬盘空间:1GB或更高

④显卡:SVGA显示适配器

(2) 软件环境

操作系统:Window 98/ME/2000/XP

1.3.2 开发环境

开发环境主要介绍了本系统采用的操作系统、开发语言。

(1) 操作系统:Windows XP

(2) 开发语言:C++

(3) 开发环境:Visual C++

第2章图形图像处理系统相关技术综述

图形设计基础

2.1.1 Visual C++技术概要

面向对象程序设计(Object-Oriented Programming,简称OOP)方法已出现近30年,在20世纪90年代己成为程序设计的主流方向。面向对象程序设计语言是现代程序开发的主要工具。

程序包含两类基本的元素,即数据和操作数据的指令集(称为代码)。传统的程序设计语言以设计代码为核心,程序设计实际上就是指定程序指令的先后次序,数据表示必须适应代码的设计。模块化程序设计方法将完成某一功能的指令集组成一个相对独立的程序模块(即函数或过程),使得程序的结构清晰,便于有效的维护,对程序设计技术有很大的促进。但由于结构化程序设计方法并不能保证各程序模块之间真正的相互独立,程序设计者在设计一个模块时很难完全排除其他模块的影响。随着程序规模的增大,各模块之间的相互影响导致一些难于测试,难以定位发现的错误,增加了程序开发和维护的困难。面向对象程序设计方法主要以数据为中心,代码是围绕着需要处理的数据而设计的[4]。

2.1.2 图形设备接口GDI

图形设备接口(GDI)是一个抽象的接口。通过该接口可以实现对图形的颜色、线条的粗细等属性的控制。程序可以通过调用这些GDI函数和硬件打交道的,从而实现了设备无关性[5]。

2.1.3 设备环境DC

设备环境DC(Device Context又称设备上下文,也称设备描述表)是一个关于如何绘制图形的方法的集合,它可以绘制各种图形,确定在应用窗口中绘制图形的方式,即确定绘图模式和映射模式。在绘图之前,必须获取绘图窗口区域的一个设备环境DC。接着进行GDI函数的调用,执行适合于设备环境DC的命令。获取DC时,Windows初始化了一套完整的属性和对象集合,可以使用它们渲染显示。为了创建自己应用程序的特定显示,可以更改这些属性和对象。Windows的设备环境是GDI的关键元素,它代表了不同的物理设备[5]。分为4种类型,包括显示器型,打印机型,内存型和信息型。每种类型的设备环境都有各自的特定用途,详见表2-1。

表2-1 设备环境的类型和用途

设备环境

用途

显示器型打印机型内存型信息型支持视频显示器上的绘图操作

支持打印机和绘图仪上的绘图操作支持位图上的绘图操作

支持设备数据的访问

2.1.4 CDC类的派生类的功能及其之间的区别

CDC各派生类各有特点,并可以完成不同的功能,表2-2介绍了各派生类的主要功能。

表2-2 CDC类的派生类简介

派生类名称说明

CClientDC这是一个设备描述表,提供对窗口客户区域的图形访

问。在窗口中画图时可使用此类DC,但对WM_PAINT

Windows消息除外。

CMetaFileDC这个设备描述表代表Windows元文件,它包含一系列

命令已重新产生图像。想要创建独立于设备的文件时

可使用此类DC,用户可以回放这种文件来创建图像。

续表2-2派生类名称说明

CPaintDC这是创建WM_PAINT Windows消息的设备描述表。应

用程序可以使用此DC更新Windows显示,通常在MFC

应用程序的OnPaint()函数中使用。

CWindowDC可以提供在整个窗口(包括客户区和非客户区)中画

图的设备描述表。

(1) CWindowDC类与CPaintDC和CClientDC类的区别

CWindowDC类与CPanitDC类和CClientDC的区别的一个方面是:用CPaintDC 类CClientDC类的对象绘制图形时,绘制区只能是客户区,而不能在非客户区,而CWindowDC可以在非客户区进行图形绘制。CWindowDC一般在框架窗口类中(CMainFrame)引用,在视图窗口中引用CWindowDC类时,由于视图类只能管理客户区,所以并不能在非客户区进行绘制。他们之间区别的另一个方面是:在

CWindowDC绘图类下,坐标系是建立在整个屏幕上的,在像素坐标方式下,坐标原点在屏幕的左上角,而在CPaintDC和CClientDC绘图类下,坐标系是建立在客户区上的,在像素坐标方式下,坐标原点在客户区的左上角[6]。

(2) CPainDC类与CClientDC类的区别

CPaintDC类与CClientDC类都是在窗口的客户区内绘制图形,但两者在绘制机制上有着本质的区别。CPaintDC类应用在OnPaint函数中,以响应Windows 的WM_PAINT消息,而CClientDC应用在非响应消息WM_PAINT的情况下。CPaintDC 类响应WM_PANINT消息,自动完成绘制,这对维护图形的完整性有着重要的作用。

2.1.5 与绘图相关的GDI对象类

本节主要介绍与绘制各种图形元素相关的GDI对象类。

所谓基本绘图对象类主要包括CBitmap类、CBrush类、CFont类、CPen类、CRgn类。它们都是CGdiObject类的派生类[6]。简要介绍如下。

(1) CBitmap——位图是一种位矩阵,每一个显示像素都对应于其中的一个或多个位。利用位图来表示图像,创建画刷。

(2) CBrush——画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色。

(3) CFont——字体是一种具有某种风格和尺寸的所有字符的完整集合。

(4) CPen——画笔是一种用来画线及绘制有形边框的工具,可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。

(5) CRgn——区域是由多边形、椭圆或二者组合形成的一种范围,可以利用它来进行填充、裁剪。

(6) CPalette——调色板是一种颜色映射接口,允许应用程序在不干扰其

他应用程序的前提下,充分利用输出设备的颜色描绘能力。

2.1.6 坐标变换和映射模式

在本节讨论两种坐标系——逻辑坐标系和设备坐标系及其相互之间的转换。坐标映射方式是指两种坐标系在相互转换时,逻辑单位和设备单位之间存在的某种比例关系。

(1) 逻辑坐标和设备坐标的转换

设备坐标是针对屏幕或其他显示设备而言的。其原点在屏幕的左上角。X轴正方向为向右,Y轴的正方向为向下。原点位于窗口的左上角点处。单位为像素。逻辑坐标则是在内存中虚拟的一个坐标系。其原点在屏幕的左上角。X轴的正方向为向右,Y轴的正方向为向上。其单位随着映射模式的不同而改变。

(2) 窗口和视口

窗口是虚拟存在的一个屏幕,在屏幕上看到的图形是视口。Windows在绘制图形时,并不是把图形直接绘制到屏幕上,而是绘制到特定的映射模式下的逻辑坐标系虚拟的窗口中,然后将这个图形映射到一个视图中,即视口中。而当前的设备(如屏幕,打印机)显示出来的就是该视图的一部分[7]。

(3) 设置绘图模式

绘图模式指定了画笔颜色和被填充物体内部颜色是如何与显示平面的颜色相混合的。绘图模式是描述两个变量的所有可能的布尔组合,指采用什么方式进行绘制工作,而采用的方式主要体现在像素颜色的设定。

图像设计基础

2.2.1 数字图像的基本概念

人眼看到的任何自然界的图像都是连续的模拟图像,其形状和形态表现由

图像各位置的颜色所决定。色度学理论认为,任何颜色都可由红(Red)、绿(Green)、蓝(Blue)3种基本颜色按不同的比例混合得到。红、绿、蓝被称为三原色,简称RGB三原色。因此,自然界的图像可用基于位置坐标的三维函数来表示,即

f(x,y,z)=(f red(x,y,z),f green(x,y,z),f blue(x,y,z)))

(2-1)

其中f表示空间坐标为(x,y,z)位置点的颜色,f red、f green、f blue分别表示该位置点的红、绿、蓝3种原色的颜色分量值。它们都是空间的连续函数,即连续空间的每—点都由一个精确的值与之相对应。

为了研究的方便,主要考虑平面图像。平面上每一点仅包括两个坐标值。因此,平面图像函数是连续的二维的数,即

f(x,y)=(f red(x,y),f green(x,y),f blue(x,y)))

(2-2)

图像可以分为黑白图像和彩色图像。所谓黑白图像,就是图像中每一点都不是彩色的,即每—点的红、绿、蓝颜色分量值都相等,即

f red=f green=f blue (2-3)

对于黑白图像,其f(x,y)表示(x,y)位置处的灰度值。

由于计算机仅能处理离散的数据,所以如要用计算机来处理图像,连续的图像函数必须转化为离散的数据集,这一过程叫做图像采集[7]。图像采集由图像采集系统完成,如图2-1所示。图像采集系统包括3个基本单元,即成像系统、采样系统和量化器。

图2-1 图像采集系统

2.2.2 调色板

现实世界的颜色种类是无限的,但计算机显示系统所能表现的颜色数量是有限的。因此,为了使计算机能最好地重现实际图景,就必须采用一定的技术来管理和取舍颜色。

按表现能力的不同,现代计算机的显示系统可以分为以下3种。

(1) VGA:能用640×480的分辨率同时显示16种颜色。

(2) SuperVGA:能用640×480的分辨率同时显示256种颜色

(3) 真彩色:能同时显示种颜色。

所谓真彩色(True Color),是指显示出来的图像的颜色与真实世界中的颜色非常自然逼真、人眼难以区分它们的差别。通常使用RGB表示法来表现真彩色图像,即用3字节(24位)来表示—个真彩色像素的颜色值,红、绿、蓝三原色的浓度分别用一字节(8位)来表示。Windows采用该方法来表现颜色,其SDK 提供一个名为RGB的宏来将不同的R、G、B颜色值转化为24位的颜色值,其原型如下所示。

COLORREF RGB(BYTE bRed, BYTE bGReen, BYTE bBlue) (2-7) COLORREF是表示颜色值的数据类型,是一个32位的无符号长整数;bRed、

bGreen和bBlue分别表示红、绿、蓝三原色的浓度,它们的类型是BYTE,长度是8位。其十六进制数据表示形式如下所示。

0x00bbggrr

(2-8)

字节rr、gg、bb比分别表示红、绿、蓝三原色的浓度,最高位字节为0,用于保留与将来的系统兼容[8]。

2.2.3 调色板的概念

在真彩色系统中,每一个像素的值都用24位来表示。像素值与真彩色颜色值可以一一对应,所以像素值就是所表现的颜色位。但对于仅能同时显示16色或256色的系统,每一个像素仅能分别采用4位或8位来表示,像素值与真彩色颜色值不能一一对应,用像素值代表颜色值的方法将不能得到最佳的效果,而必须采用调色板技术。所谓调色板就是在16色或256色显示系统中,由图像中出现最频繁的16种或256种颜色所组成的颜色表。对这些颜色按4位或8位,即0至15或255进行编号,每一编号代表其中的一种颜色。这种颜色编号叫做颜色的索引号,4位或8位的索引号与24位的颜色值的对应表叫做颜色查找表。使用调色板的图像叫做调色板图像。它们的像素值并不是颜色值,而是颜色在调色板查找表中的索引号[9]。

为了保证Windows的基本显示界面的一致性,Windows保留了一个有20种颜色的内部系统调色板,用来绘制窗口的图标、边界和按钮等通用界面。该调色板在所有的显示设置中都保持不变。在16色的显示系统中,系统调色板通过16种颜色的抖动来产生其余4种颜色。在256色的显示系统中,Windows也保持该20种颜色的次序,其余的236种颜色由当前的调色板分配[10]。

第3章图形图像处理系统的总体设计

需求分析

市场上的图像处理软件大都功能强大,需要好一阵子适应,普通的用户根本用不到那么多的功能。所以,可以开发一种简单小巧,可进行基本图像处理,图形绘制的软件非常必要。

利用一个设计良好的简单的小图形图像处理程序可以用于教学演示的目的,展示基本的图形图像处理技术和面向对象技术在这一领域的应用效果。通过对独立功能的封装,可以为今后需要的图形图像的应用奠定基础。此外,借助Visual C++语言这种典型的面向对象编程环境,能够充分挖掘硬件的潜能,得到性能优良的程序代码。

图形图像处理系统目标设计

系统的设计目标是采用面向对象的程序设计技术实现一个图形绘制和图像处理的应用软件,满足普通用户对于图形图像应用程序的简单需求。

主要工作分为三类,包括基本图形绘制与编辑、图像格式识别与转换、简单的图像处理。

图形图像处理系统功能描述

系统的主要功能包括绘制各种简单图形、改变所绘图形的颜色、线条类型、打开和存储各种常见的图像文件、对图像进行简单的处理。

(1) 图元绘制

①直线图元,或者称为线段图元,允许用户使用鼠标选择直线顶点绘制。

②圆图元,允许用户利用圆心和半径来进行绘制。

③矩形图元。

④圆角矩形图元。

(2) 改变绘制条件

在绘制图元时要能够改变绘制条件,主要包括如下内容。

①改变线条颜色,使用户可以绘制出不同颜色的图元。

②改变线条类型,使用户可以绘制出不同线型的图元。

③改变填充方式,使用户可以选择不同的填充方式。

(3) 图元修改

包括如下操作。

①删除图元。

②平移图元。

③镜像图元。

④旋转图元。

(4) 图元属性修改

①改变被选图元颜色。

图3-1 图形图像处理系统功能描述图

图3-2 图形图像处理系统功能描述图图形部分

图3-3 图形图像处理系统功能描述图图像部分

②改变被选图元线型。

③改变被选图元线宽。

(5) 图像格式处理

能够打开、存储、关闭几种常见图像文件,隐含了格式的转换。

(6) 图像变换

相关主题
文本预览
相关文档 最新文档