现代图像处理技术的发展趋势报告
摘要:图像处理技术从其功能上可以分为两大类:模拟图像处理技术、和数字图像处理技术。数字图像处理技术指的是将图像信号直接转换成为数字信号,并利用计算机进行处理的过程,其主要的特点在于处理的精度高、处理的内容丰富、可以进行复杂、难度较高的处理内容。当其不在于处理的速度比较缓慢。当前图像处理技术主要的是体现在数字处理技术上,本文说阐述的图像处理技术也是以数字图像处理技术为主要介绍对象。数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。近年来, 图像处理技术得到了快速发展, 呈现出较为明显的发展趋势, 了解和掌握这些发展趋势对于做好目前的图像处理工作具有前瞻性的指导意义。本文总结了现代图像处理技术的三点发展趋势。
一、 图像处理目的
对图像进行处理(或加工、分析)的主要目的有三个方面: (1)提高图像的视感质量,如进行图像的亮度、彩色变换,增强、抑制某些成分,对图像进行几何变换等,以改善图像的质量。(2)提取图像中所包含的某些特征或特殊信息,这些被提取的特征或信息往往为计算机分析图像提供便利。提取特征或信息的过程是计算机或计算机视觉的预处理。提取的特征可以包括很多方面,如频域特征、灰度或颜色特征、边界特征、区域特征、纹理特征、形状特征、拓扑特征和关系结构等。
(3)图像数据的变换、编码和压缩,以便于图像的存储和传输。不管是
何种目的的图像处理,都需要由计算机和图像专用设备组成的图像处理系统对图像数据进行输入、加工和输出。
二、 图像处理主要研究的内容
数字图像处理主要研究的内容有以下几个方面:
(1)图像变换由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅里叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。
(2)图像编码压缩图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。
(3)图像增强和复原图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立"降质模型",再采用某种滤波方法,恢复或重建原来的图像。
(4)图像分割图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。
(5) 图像描述图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述
方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述等方法。
(6)图像分类(识别)图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。
发展趋势:
一、图像处理的网络化
图像处理系统的发展大致可分为3 个阶段。早期的图像处理系统比较昂贵, 多以小型机为主机,且多人轮流使用一台设备, 这时的图像处理系统可称为图像大系统。
这个阶段为第1 阶段, 这一阶段的图像处理系统具有以图像帧存储为中心的系统结构。随着微机性能的提高和价格的大幅下降, 在图像处理实验室里, 一人一机不再是奢侈的配置, 图像处理系统得到了极大的普及, 这时的图像处理系统可称为图像小系统。
这个阶段为第2 阶段, 这一阶段的图像处理系统具有以计算机内存为中心的系统结构。随着网络数据库的发展, 系统走出了一人一机的圈子, 服务器/客户机、Internet、浏览器、网络数据库??图像处理系统似乎变大了, 资源也增多了。计算机编程语言、操作系统出现了多样化,多CPU 的服务器开始走进普通实验室, 分布式计算系统被
用来构造指纹识别系统和人面像识别系统,图像处理系统越来越大型化, 这时的图像处理系统可称为超级图像系统。
这个阶段为第3 阶段, 这一阶段的图像处理系统具有以网络为中心的系统结构。图像处理技术和计算机技术密不可分, 随着计算机技术的超高速发展, 图像处理系统的更新换代速度也明显加快。例如一些在DOS 操作系统下运行的应用软件, 随着Windows 的出现而面临着升级的压力; 原来建筑在ISA 总线上的图像卡, 随着PCI总线的出现而趋于淘汰, PCI 图像卡则应运而生。落后与先进、淘汰与新生, 同一应用领域出现多个版本的竞争, 新的知识不断涌现, 这无疑使图像界既充满活力, 同时又面临着诸多挑战。在众多新技术中, 图像处理网络化的影响无疑是巨大的。知识的挖掘、图像的浏览、基于内容的查询、以网络为中心的系统结构等挑战性的新课题不断涌现, 网络化使图像处理技术提高到了一个新高度。
二、图像处理的复杂化
图像处理的疑难问题很多且极其复杂, 如文字识别技术。目前, 印刷体汉字的识别率高达99%以上, 基本达到了实用程度, 但手写体汉字的识别却处在限定型手写体汉字识别的水平上, 其识别率还有待提高, 而自然手写体汉字的识别仍处在艰难的研究中。
图像压缩是近十年来研究的热点, JPEG,MPEGI, MPEGⅡ已经获得了应用, 业界又提出了对MPEG4, MPEG7, JPEG2000 的研究。可以这样认为, 超低码率的图像编解码技术是目前需要攻克的难题, 而模糊图像的复原是需要长期研究的课题。由于散焦和运动模糊图像对图像的
损伤较大, 给图像复原造成了很大困难, 特别是集散焦、运动、高噪声、低清晰度于一身的复合型模糊图像, 其复原的难度使研究人员望而却步。面对银行、宾馆、汽车收费站监控系统使用的录像机录制的模糊图像,有关部门急需一种针对性强的模糊图像复原系统,但目前的技术水平难以胜任; 在指纹识别中, 大数据量指纹库中的识别速度以及模糊指纹的复原、变形指纹的校正都是亟待解决的问题; 在人面像识别中, 人的年龄、表情、姿态都对人面像识别有重大影响, 海量人面像识别不仅存在识别率的问题, 而且存在查询识别速度的问题。图像界对现存的这些复杂问题已进行了多年探索并积累了一定经验, 相信随着图像处理技术的快速发展, 这些复杂问题将会出现新突破。
三、处理速度的高速化
著名的摩尔定律(Moore law) 指出: 微处理器的集成度每18 个月将翻一番, 即CPU 以18 个月为一个更新换代周期; 新摩尔定律提出全球因特网流量每6 个月翻一番。当然, 摩尔定律的成立是界定于某一个时期的。作为计算机重要应用的图像处理技术, 在处理速度上将呈现出什么样的发展规律,目前还未见相关的研究报道。不言而喻, 图像处理的速度受多方面条件的制约, 其水平也是针对特定环境、特定时期而言的。按照习惯划分, 图像处理可分为软件处理和硬件处理。硬件处理系统中含有软件处理或软件介入。纯软件处理属于事后处理, 达不到视频实时处理的速度, 原因在于:
(1) 早期计算机总线速度低于视频传输速度, 活动视频图像不能实时地送入计算机;
(2) 早期计算机的处理速度较低, 无法及时地处理活动视频图像数据;
(3) 除摄像机、录像机和视频取指器等视频设备外, 扫描仪、数码相机和主机的传输速率低, 难以高速处理图像;
(4) 一般的纯软件处理不能直接插入到视频数据流中, 因此需要附加图像获取时间。
由于纯软件处理所进行的是事后处理, 所以长期以来人们关心的重点是能够具体实现各种图像处理的算法。随着PCI 总线的引入, 活动视频图像能够被实时地送入计算机内存中, 特别是Intel 公司1995 年提出的NSP (native signal processing, 自然信号处理) 技术, 1997 年推出的含57 条指令的MMX(multimedia extensions) 指令集和1999 年推出的含70 条指令的SSE (streaming SIMDextensions) 指令集(又称为KNI, 即Katmai newinstruction 指令集), 这些重大举措使图像界成为直接受益者, 计算机处理图像的速度由此有了显著提高。用MMX 技术直接进行JPEG 压缩的软件已经面市, 基于MMX/SSE 技 术的图像处理平台也已研制成功。PCI+MMX/SSE技术已成为新一代图像处理系统的关键技术, 其特点是处理速度快、价格低、单屏操作方便、微机资源强大, 在视频实时的时间(如40 ms) 内可对一幅图像进行某些处理。用微机进行图像处理在速度上虽然取得了很大进展, 但仍存在问题。如果微机用40 ms 处理完一幅图像, 那一幅视频活动图像到达计算机内存的时间一般需要40 ms, 而串行处理则需要80 ms, 这种处理速度只能算是准实时处理, 仍不能满足视频实时处理的要求。在现有PCI 图像卡里, 可以把一幅视频图像到达计算机内存的传
输时间缩短到13 ms 左右,留给微机27 ms 的处理时间以达到实时处理。这种设计可谓独具匠心, 但所扩展的实用程度非常有限,原因在于具体应用中常常是多算法的集成。因此,可以说当前MMX/SSE 技术对视频图像的处理速度还有待提高, 这就需要配以硬件处理, 以便在图像处理速度上达到更高水平。20 世纪80~90 年代是图像硬件处理技术发展的黄金时期, 许多大型系统问世并达到了很高的水平。
显然, 为追求“算法及其处理速度”的指标而付出昂贵的成本代价, 无论从科技水平还是从科研所遵循的规律来讲都是无可厚非的, 但并不等于要达到“算法及其处理速度”的高指标一定得付出昂贵的成本代价。今天, 我们面临的“算法及其处理速度”的挑战是在一个已有的高水平起点上展开的。一方面, MMX/SSE 技术已达到了较高的水平且代价很低; 另一方面, 大型系统所达到的水平也已成为一个尺度。因此, 新构思、新结构和新系统只有在超越已有成果的水平上才具有重要意义。
四、总结
研究方向。自20世纪60年代第三代数字计算机问世以后,数字图像处理技术出现了空前的发展,在该领域中需要进一步研究的问题主要有如下五个方向:1)在进一步提高精度的同时着重解决处理速度问题;2)加强软件研究,开发新的处理方法,特别要注意移植和借鉴其他学科的技术和研究成果,创造新的处理方法;3)加强边缘学科的研究工作,促进图像处理技术的发展;4)加强理论研究,逐步形成处理科学自身的理论体;5)时刻注意图像处理领域的标准化
问题。
数字图像处理的今后的应用越来越广泛,地位越来越重要,在未来现代化建设中将要发挥无与伦比的重要作用。
第二篇:《图像处理技术》实验报告一
《图像处理技术》实验报告
姓 名:李怀彬
工作单位:安徽省特殊教育中专学校
指导教师:童卫青
完成日期:2014年5月27日
1. 实验1
1.1 实验目的
了解和运用基于OpenCV的读、写和显示图像的方法
1.2 实验所用的主要OpenCV函数的说明
1、cvLoadImage函数
函数原型:IplImage* cvLoadImage( const char* filename, int flags=CV_LOAD_IMAGE_COLOR );
filename :要被读入的文件的文件名(包括后缀);
flags :指定读入图像的颜色和深度:
指定的颜色可以将输入的图片转为3通道(CV_LOAD_IMAGE_COLOR), 单通道 (CV_LOAD_IMAGE_GRAYSCALE), 或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。
深度指定输入的图像是否转为每个颜色通道每象素8位,(OpenCV的早期版本一样),或者同输入的图像一样保持不变。
选中CV_LOAD_IMAGE_ANYDEPTH,则输入图像格式可以为8位无符号,16位无符号,32位有符号或者32位浮点型。
函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。
cvLoadImage函数使用方法
cvLoadImage( filename, -1 ); 默认读取图像的原通道数
cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图
cvLoadImage( filename, 1 ); 读取彩色图
2、cvNamedWindow函数
简介:cvNamed?Window该函数为开放计算机视觉(OpenCV)库库函数,用来创建指定的窗口。
定义:cvNamed?Window该函数为开放计算机视觉(OpenCV)库库函数,用来创建指定的窗口。
参数:name 窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。
flags 窗口属性标志。可以选择CV_WINDOW_AUTOSIZE(1)和0两种值。 CV_WINDOW_AUTOSIZE这个标志被设置后, 如果用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。0表示以固定的窗口尺寸显示图像。
函数cvNamedWindow创建一个可以放置图像和trackbar的窗口。被创建的窗口可以通过它们的名字被引用。 如果已经存在这个名字的窗口,这个函数将不做任何事情。
3、cvShowImage函数
简介:该函数为开放计算机视觉(OpenCV)库库函数,用来在在指定窗口中显示图像。
定义:void cvShowImage( const char* name, const CvArr* image );
参数:name 窗口的名字。
image 被显示的图像。
函数cvShowImage 在指定窗口中显示图像。如果窗口创建的时候被设定标志CV_WINDOW_AUTOSIZE,那么图像将以原始尺寸显示;否则,图像将被伸缩以适合窗口大小
4、cvSaveImage函数
简介
cvSaveImage
保存图像到文件
int cvSaveImage( const char* filename, const CvArr* image );
filename
文件名。
image
要保存的图像。
函数cvSaveImage保存图像到指定文件。图像格式的的选择依赖于filename的扩展名,请参考cvLoadImage。只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。
对单通道的图像进行保存,也有可能得到新的3通道图像。例如:cvSaveImage("r.bmp",r);把程序中命名为r的单通道图像存储名字为r的bmp格式下图像,得到新图像为3通道。
5、cvWaitKey函数
函数功能:
cvWaitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。
返回值为当前键盘按键值。
所以显示图像时,如果需要在cvShowImage("xxxx.bmp",image)后加上while(cvWaitKey(n)==key)为大于等于0的数即可,那么程序将会停在显示函数处,不运行其他代码;直到键盘值为key的响应之后。
delay>0时,延迟"delay"ms,在显示视频时这个函数是有用的,用于设置在显示完一帧图像后程序等待"delay"ms再显示下一帧视频;如果使用cvWaitKey(0)则只会显示第一帧视频。
返回值:如果delay>0,那么超过指定时间则返回-1;如果delay=0,将没有返回值。
如果程序想响应某个按键,可利用if(cvWaitKey(1)==Keyvalue);
经常程序里面出现if( cvWaitKey(10) >= 0 ) 是说10ms中按任意键进入此if块。
6、cvDestroyWindow函数
简介:cvDestroyWindow,该函数为开放计算机视觉(OpenCV)库库函数之一,用来销毁一个窗口。
定义:void cvDestroyWindow( const char* name );
参数:name 要被销毁的窗口的名字。
函数cvDestroyWindow销毁指定名字的窗口。
7、cvReleaseImage函数
cvReleaseImage(img)和free、delete相同,只是把该指针img所指的内存给释放掉,但并没有把img指针本身干掉,其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,成了野指针。如果此时不把img设置为NULL,会让人误以为img是个合法的指针。
在继续使用img之前,通常会用语句if (img != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。
1.3本图像实验的主要步骤
第一步:设置环境变量
控制面板—用户账户-用户账户-更改我的环境变量-新建一个环境变量,变量名为Pash,变量值为“E:\DIP_TrainingCourse\lib”
第二步,实验代码执行
代码设计流程说明
l 定义文件头
#include <stdio.h>
#include "cv.h"
#include "highgui.h"
定义main函数
int main(void)
{
char img_i[1024] = "..\\img\\lena.jpg";//输º?入¨?图ª?像?的Ì?文?件t名?
char img_o[1024] = "exp1_out.jpg"; //输º?出?图ª?像?的Ì?文?件t名?
IplImage* pImg = NULL; //图ª?像?结¨¢构1体¬?的Ì?指?针?
读图像文件
pImg = cvLoadImage(img_i,CV_LOAD_IMAGE_COLOR);
if(pImg == NULL){
printf("图ª?像?文?件t不?存ä?在¨²\n");
return -1;
创建窗口
cvNamedWindow("Lena",CV_WINDOW_AUTOSIZE);
cvMoveWindow("Lena",0,0);
显示图像
cvShowImage("Lena",pImg);
写图像文件
cvSaveImage(img_o,pImg);
销毁窗口
cvDestroyWindow("Lena");
释放图像
cvReleaseImage(&pImg);
1.4实验结果和讨论
结果
通过本次实验,主要了解了基于OpenCV的读、写和显示图像的方法。掌握了cvLoadImage、cvNamedWindow、cvShowImage、cvSaveImage、cvDestroyWindow、cvReleaseImage等函数的功能及使用方法。为今后的学习奠定了基础。
讨论心得
本次实验,程序代码编译对环境变量要求较高,当环境变量改变时,影响程序结果的现实,即,程序只能通过编译,但无法显示结果。
存在的问题:
1、 在本次实验过程中,由于对软件平台不够熟练,需要在老师或同学的帮助下才能完成。
2、 对程序中设计到的各种函数不太了解。