图像处理 基元概念

2009-07-23 22:30:00 byxdaz 阅读数 23702
  • 反走样绘图

    本阶段主要带领同学们完成以下几个方面的学习:文件、目录、输入输出、典型案例演示,QT自定义外观设计、样式表设计与实现、绘制模式、典型案例演示,XMl原理、接口设计、SAX、DOM等,数据库基本原理、Sqlite、mysql...

    8人学习 李浩林
    免费试看

图像处理与识别学习小结

 

数字图像处理是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外,基于光学理论的处理方法依然占有重要的地位。 数字图像处理是信号处理的子类, 另外与计算机科学、人工智能等领域也有密切的关系。 传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。大多数用于一维信号处理的概念都有其在二维图像信号领域的延伸,它们中的一部分在二维情形下变得十分复杂。同时图像处理也具有自身一些新的概念,例如,连通性、旋转不变性,等等。这些概念仅对二维或更高维的情况下才有非平凡的意义。图像处理中常用到快速傅立叶变换,因为它可以减小数据处理量和处理时间。
数字图像处理应用在以下方面

摄影及印刷 (Photography and printing)

卫星图像处理 (Satellite image processing)

医学图像处理 (Medical image processing)

面孔识别, 特征识别 (Face detection, feature detection, face identification)

显微图像处理 (Microscope image processing)

汽车障碍识别 (Car barrier detection)

 

数字图像基础

图像的基本概念、图像取样和量化、数字图像表示、 空间和灰度级分辨率、图像纹理、像素间的一些基本关系(相邻像素、邻接性、连通性、区域和边界、距离度量)、线性和非线性变换

线性变换:如果变换函数是线性的或是分段线性,这种变换就是线性变换。以线性函数加大图像的对比度的效果是使整幅图像的质量改善。以分段线性函数加大图像中某个(或某几个)亮度区间的对比度的效果是使局部亮度区间的质量得到改善。

非线性变换:当变换函数是非线性时,即为非线性变换。常用的有指数变换和对数变换。

RGB (red green blue): 红绿蓝三基色

CMYK (Cyan-Magenta-Yellow-black inK): 青色-品红-黄色-黑色

HSI (Hue-Saturation-Intensity): 色调-饱和度-强度

DDB (device-dependent bitmap): 设备相关位图

DIB (device-independent bitmap): 设备无关位图

CVBS (Composite Video Broadcast Signal): 复合电视广播信号

YUV(亦称Y Cr Cb)是被欧洲电视系统所采用的一种颜色编码方法(属于PAL制)。

 



 

数字图像存储与显示

图像格式

在计算机中,有两种类型的图:矢量图(vector graphics)和位映象图(bitmapped graphics)。矢量图是用数学方法描述的一系列点、线、弧和其他几何形状,如图(a)所示。因此存放这种图使用的格式称为矢量图格式,存储的数据主要是绘制图形的数学描述;位映象图(bitmapped graphics)也称光栅图(raster graphics),这种图就像电视图像一样,由象点组成的,如图(b),因此存放这种图使用的格式称为位映象图格式,经常简称为位图格式,存储的数据是描述像素的数值。

 

矢量图与位映象图

目前包括bmp格式、gif格式、jpeg格式、jpeg2000格式、tiff格式、psd格式、

Png格式、swf格式、svg格式、pcx格式、dxf格式、wmf格式、emf格式、LIC格式、eps格式、TGA格式。

目前比较出名的图像处理库有很多,比如LEADTOOLSOPENCVLEADTOOLS这个是功能非常强大的图像多媒体库,但是这个是收费注册的。OpenCV 是一个跨平台的中、高层 API 构成,目前包括 300 多个 C 函数。它不依赖与其它的外部库,尽管也可以使用某些外部库。OpenCV 对非商业用途和商业用途都是免费(FREE)的。开源的图像库也有不少,比如:

ImageStoneGIMPCxImage等,虽然它们的功能没有LEADTOOLS强大,但是一般的图像处理是可以应付的。

具体的功能介绍参考:http://blog.csdn.net/byxdaz/archive/2009/03/09/3972293.aspx

OpenCV源代码及文档下载:SOURCEFORGE.NET
http://sourceforge.net/projects/opencvlibrary/

 

 

数字图像增强

图像增强的目的在于改善图像的显示质量,以利于信息的提取和识别。从方法上说,则是设法摒弃一些认为不必要或干扰的信息,而将所需要的信息得以突出出来,以利于分析判读或作进一步的处理。以下介绍几种较为简单的遥感数字图像增强处理方法。

A空间域增强处理

空间域是指图像平面所在的二维空间,空间域图像增强是指在图像平面上应用某种数学模型,通过改变图像像元灰度值达到增强效果,这种增强并不改变像元的位置。空域增强包括空域变换增强与空域滤波增强两种。空域变换增强是基于点处理的增强方法、空域滤波增强是基于邻域处理的增强方法。

1)、空域变换增强

常用的空域变换增强方法包括:对比度增强、直方图增强和图像算术运算等。

对比度增强是一种通过改变图像像元的亮度分布态势,扩展灰度分布区间来改变图像像元对比度,从而改善图像质量的图像处理方法。因为亮度值是辐射强度的反映,所以也称为辐射增强。常用的方法有对比度线性变换和非线性变换。其关键是寻找到一个函数,以此函数对图像中每一个像元进行变换,使像元得到统一的重新分配,构成得到反差增强的图像。

直方图增强

直方图均衡化

     直方图均衡化基本做法是将每个灰度区间等概率分布代替了原来的随机分布,即增强后的图象中每一灰度级的像元数目大致相同。直方图均衡化可使得面积最大的地物细节得以增强,而面积小的地物与其灰度接近的地物进行合并,形成综合地物。减少灰度等级换取对比度的增大。

直方图归一化 

     直方图归一化是把原图像的直方图变换为某种指定形态的直方图或某一参考图像的直方图,然后按着已知的指定形态的直方图调整原图像各像元的灰级,最后得到一个直方图匹配的图像。这种方法主要应用在有一幅很好的图像作为标准的情况下,对另一幅不满意的图像用标准图像的直方图进行匹配处理,以改善被处理图像的质量。如在数字镶嵌时,重叠区影像色调由于时相等原因差异往往很大,利用直方图匹配这一方法后可以改善重叠区影像色调过度,如果镶嵌图像时相相差不大,完全可以作到无缝镶嵌。

数字图像的算术运算

两幅或多幅单波段影像,完成空间配准后,通过一系列运算,可以实现图像增强,达到提取某些信息或去掉某些不必要信息的目的。

  

2)、空域滤波增强

空域变换增强是按像元逐点运算的,从整体上改善图像的质量,并不考虑周围像元影响。空间滤波增强则是以重点突出图像上的某些特征为目的的(如突出边缘或纹理等),通过像元与周围相邻像元的关系,采取空间域中的邻域处理方法进行图像增强。邻域法处理用于去噪声、图像平滑、锐化和相关运算。

图像卷积运算是在空间域上对图像作局部检测的运算,以实现平滑和锐化的目的。具体作法是选定一卷积函数,又称为“M×N窗口模板,如3×35×5等。然后从图像左上角开始开一与模板同样大小的活动窗口,图像窗口与模板像元的亮度值对应相乘再相加。将计算结果赋予中心像元作为其灰度值,然后待移动后重新计算,将计算结果赋予另一个中心像元,以此类推直到全幅图像扫描一遍结束生成新的图像。

平滑是指图像中出现某些亮度变化过大的区域,或出现不该有的亮点(噪声)时,采用平滑方法可以减小变化,使亮度平缓或去掉不必要噪声点。它实际上是使图像中高频成分消退,即平滑图像的细节,降低其反差,保存低频成分,在频域中称为低通滤波。具体方法有:均值平滑、中值滤波、锐化。

锐化的作用在于提高边缘灰度值的变化率,使界线更加清晰。它是增强图像中的高频成分,在频域处理中称为高通滤波,也就是使图像细节的反差提高,也称边缘增强。要突出图像的边缘、线状目标或亮度变化率大的部分常采用锐化方法。一般有三种实现方法:

1)梯度法

    梯度反映了相邻像元的亮度变化率,即图像中如果存在边缘,如湖泊、河流的边界,山脉和道路等,则边缘处有较大的梯度值。对于亮度值较平滑的部分,亮度梯度值较小。因此,找到梯度较大的位置,也就找到边缘,然后再用不同的梯度计算值代替边缘处像元的值,也就突出了边缘,实现了图像的锐化。通常有罗伯特梯度和索伯尔梯度方法。

2)拉普拉斯算法

    拉普拉斯算法的意义与梯度法不同,它不检测均匀的亮度变化,而是检测变化率的变化率,相当于二阶微分。计算出的图像更加突出亮度值突变的位置。

3)定向检测

    当有目的地检测某一方向的边、线或纹理特征时,可选择特定的模板卷积运算作定向检测。可以检测垂直边界、水平边界和对角线边界等,各使用的模板不同

 

B频率域图像增强处理
频域增强指在图像的频率域内,对图像的变换系数(频率成分)直接进行运算,然后通过Fourier逆变换以获得图像的增强效果。

一般来说,图像的边缘和噪声对应Fourier变换中的高频部分,所以低通滤波能够平滑图像、去除噪声。

图像灰度发生聚变的部分与频谱的高频分量对应,所以采用高频滤波器衰减或抑制低频分量,能够对图像进行锐化处理。

频域,就是由图像f(x,y)的二维傅立叶变换和相应的频率变量(u,v)的值所组成的空间。在空间域图像强度的变化模式(或规律)可以直接在该空间得到反应。F(0,0)是频域中的原点,反应图像的平均灰度级,即图像中的直流成分;低频反映图像灰度发生缓慢变化的部分;而高频对应图像中灰度发生更快速变化的部分,如边缘、噪声等。但频域不能反应图像的空间信息。

 

 

二维DFT及其反变换、Fast FT

关于这方面的内容需要参考数学知识。

空域和频域滤波间的对应关系:

卷积定理是空域和频域滤波的最基本联系纽带。二维卷积定理:

 

 

 


基本计算过程:

  1. 取函数h(m,n)关于原点的镜像,得到h(-m,-n)
  2. 对某个(x,y),使h(-m,-n)移动相应的距离,得到h(x-m,y-n)
  3. 对积函数f(m,n)h(x-m,y-n)(m,n)的取值范围内求和
  4. 位移是整数增量,对所有的(x,y)重复上面的过程,直到两个函数:f(m,n)h(x-m,y-n)不再有重叠的部分。

 

傅立叶变换是空域和频域的桥梁,关于两个域滤波的傅立叶变换对:

 

 

 

 

 

 

 

 


频域与空域滤波的比较:

1. 对具有同样大小的空域和频率滤波器:h(x,y), H(u,v),频域计算(由于FFT)往往更有效(尤其是图像尺寸比较大时)。但对在空域中用尺寸较小的模板就能解决的问题,则往往在空域中直接操作。

2. 频域滤波虽然更直接,但如果可以使用较小的滤波器,还是在空域计算为好。    因为省去了计算傅立叶变换及反变换等步骤。

3. 由于更多的直观性,频率滤波器设计往往作为空域滤波器设计的向导。

 

平滑的频率域滤波器类型
、理想低通滤波器
、巴特沃思低通滤波器
、高斯低通滤波器
频率域锐化滤波器类型
理想高通滤波器
巴特沃思高通滤波器

高斯型高通滤波器

频率域的拉普拉斯算子
钝化模板、高频提升滤波和高频加强滤波
频率域图像增强处理的过程:

 

 

图像复原
图像复原:试图利用退化过程的先验知识,去恢复已被退化图像的本来面目。

 

图像复原的基本思路:先建立退化的数学模型,然后根据该模型对退化图像进行拟合。

图像复原模型可以用连续数学和离散数学处理,处理项的实现可在空间域卷积,或在频域相乘。 
参考资料:
http://download.csdn.net/source/1513324

 


边缘检测

数字图像的边缘检测是图像分割、目标区域的识别、区域形状提取等图像分析领域十分重要的基础,图像理解和分析的第一步往往就是边缘检测,目前它以成为机器视觉研究领域最活跃的课题之一,在工程应用中占有十分重要的地位。所谓边缘就是指图像局部亮度变化最显著的部分,它是检测图像局部变化显著变化的最基本的运算。边缘的记录有链码表和线段表2种,链码表适合计算周长,线段表容易计算面积以及相关的,他们之间可以相互的转换

常见的边缘检测算法:

Roberts边缘检测算子

Sobel边缘算子

Prewitt边缘算子

Kirsch边缘算子

CANNY边缘检测

 


图像压缩
图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。图像压缩可以是有损数据压缩也可以是无损数据压缩。对于如绘制的技术图、图表或者漫画优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下将会带来压缩失真。如医疗图像或者用于存档的扫描图像等这些有价值的内容的压缩也尽量选择无损压缩方法。有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。

无损图像压缩方法有:

行程长度编码

熵编码法

LZW算法

有损压缩方法有:

将色彩空间化减到图像中常用的颜色。所选择的颜色定义在压缩图像头的调色板中,图像中的每个像素都用调色板中颜色索引表示。这种方法可以与 抖动(en:dithering)一起使用以模糊颜色边界。

色度抽样,这利用了人眼对于亮度变化的敏感性远大于颜色变化,这样就可以将图像中的颜色信息减少一半甚至更多。

变换编码,这是最常用的方法。首先使用如离散余弦变换(DCT)或者小波变换这样的傅立叶相关变换,然后进行量化和用熵编码法压缩。

分形压缩(en:Fractal compression)。



形态学图像处理
 
膨胀与腐蚀

 膨胀
腐蚀
开操作与闭操作
击中或击不中变换
一些基本的形态学算法

边界提取
区域填充
连通分量的提取
凸壳
细化
粗化
骨架

裁剪


图像分割
图像分割是指通过某种方法,使得画面场景中的目标物被分为不同的类别。通常图像分割的实现方法是,将图像分为“黑”、“白”两类,这两类分别代表了两个不同的对象。

图像分割方法:阈值分割区域分割、数学形态学、模式识别方法

A、阈值分割包括以下几种:

1)由直方图灰度分布选择阈值

2)双峰法选择阈值

3)迭代法选取阈值

     原理如下,很好理解。

     迭代法是基于逼近的思想,其步骤如下:
      1. 求出图象的最大灰度值和最小灰度值,分别记为ZMAX和ZMIN,令初始阈值T0=(ZMAX+ZMIN)/2;
     2. 根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值ZO和ZB;
     3. 求出新阈值TK+1=(ZO+ZB)/2;
     4. 若TK=TK+1,则所得即为阈值;否则转2,迭代计算。

4 )大津法选择阈值

大津法是属于最大类间方差法,它是自适应计算单阈值的简单高效方法,或者叫(Otsu

大津法由大津于1979年提出,对图像Image,记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。图像的总平均灰度为:u=w0*u0+w1*u1。从最小灰度值到最大灰度值遍历t,当t使得值g=w0*(u0-u)2+w1*(u1-u)2 最大时t即为分割的最佳阈值。对大津法可作如下理解:该式实际上就是类间方差值,阈值t分割出的前景和背景两部分构成了整幅图像,而前景取值u0,概率为 w0,背景取值u1,概率为w1,总均值为u,根据方差的定义即得该式。因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大, 当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此使类间方差最大的分割意味着错分概率最小。直接应用大津法计算量较大,因此一般采用了等价的公式g=w0*w1*(u0-u1)2

5)由灰度拉伸选择阈值

大津法是较通用的方法,但是它对两群物体在灰度不明显的情况下会丢失一些整体信息。因此为了解决这种现象采用灰度拉伸的增强大津法。在大津法的思想上增加灰度的级数来增强前两群物体的灰度差。对于原来的灰度级乘上同一个系数,从而扩大了图像灰度的级数。试验结果表明不同的拉伸系数,分割效果差别比较大。

 

B、区域的分割

区域生长、区域分离与合并

 区域生长算法


C基于形态学分水岭的分割

分水岭分割算法


图像特征提取与匹配

常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。

A 颜色特征

特点:颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献。由于颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征。

常用的特征提取与匹配方法:

颜色直方图

其优点在于:它能简单描述一幅图像中颜色的全局分布,即不同色彩在整幅图像中所占的比例,特别适用于描述那些难以自动分割的图像和不需要考虑物体空间位置的图像。其缺点在于:它无法描述图像中颜色的局部分布及每种色彩所处的空间位置,即无法描述图像中的某一具体的对象或物体。

颜色直方图特征匹配方法:直方图相交法、距离法、中心距法、参考颜色表法、累加颜色直方图法。

 

B 纹理特征

纹理特征的提取方法比较简单,它是用一个活动的窗口在图像上连续滑动,分别计算出窗口中的方差、均值、最大值、最小值及二者之差和信息熵等,

形成相应的纹理图像,当目标的光谱特性比较接近时,纹理特征对于区分目标可以起到积极的作用。选取适当的数据动态变化范围,进行纹理特征提取后,使影像的纹理特征得到突出,有利于提取构造信息。

特点:纹理特征也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只是一种物体表面的特性,并不能完全反映出物体的本质属性,所以仅仅利用纹理特征是无法获得高层次图像内容的。与颜色特征不同,纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。在模式匹配中,这种区域性的特征具有较大的优越性,不会由于局部的偏差而无法匹配成功。作为一种统计特征,纹理特征常具有旋转不变性,并且对于噪声有较强的抵抗能力。但是,纹理特征也有其缺点,一个很明显的缺点是当图像的分辨率变化的时候,所计算出来的纹理可能会有较大偏差。另外,由于有可能受到光照、反射情况的影响,从2-D图像中反映出来的纹理不一定是3-D物体表面真实的纹理。

常用的特征提取与匹配方法:

纹理特征描述方法分类

1)统计方法统计方法的典型代表是一种称为灰度共生矩阵的纹理特征分析方法Gotlieb Kreyszig 等人在研究共生矩阵中各种统计特征基础上,通过实验,得出灰度共生矩阵的四个关键特征:能量、惯量、熵和相关性。统计方法中另一种典型方法,则是从图像的自相关函数(即图像的能量谱函数)提取纹理特征,即通过对图像的能量谱函数的计算,提取纹理的粗细度及方向性等特征参数

2)几何法

所谓几何法,是建立在纹理基元(基本的纹理元素)理论基础上的一种纹理特征分析方法。纹理基元理论认为,复杂的纹理可以由若干简单的纹理基元以一定的有规律的形式重复排列构成。在几何法中,比较有影响的算法有两种:Voronio 棋盘格特征法和结构法。

3)模型法

模型法以图像的构造模型为基础,采用模型的参数作为纹理特征。典型的方法是随机场模型法,如马尔可夫(Markov)随机场(MRF)模型法和 Gibbs 随机场模型法

4)信号处理法

纹理特征的提取与匹配主要有:灰度共生矩阵、Tamura 纹理特征、自回归纹理模型、小波变换等。

灰度共生矩阵特征提取与匹配主要依赖于能量、惯量、熵和相关性四个参数。Tamura 纹理特征基于人类对纹理的视觉感知心理学研究,提出6种属性,即

:粗糙度、对比度、方向度、线像度、规整度和粗略度。自回归纹理模型(simultaneous auto-regressive, SAR)是马尔可夫随机场(MRF)模型的一种应用实例。

 

C形状特征

特点:各种基于形状特征的检索方法都可以比较有效地利用图像中感兴趣的目标来进行检索,但它们也有一些共同的问题,

常用的特征提取与匹配方法:

通常情况下,形状特征有两类表示方法,一类是轮廓特征,另一类是区域特征。图像的轮廓特征主要针对物体的外边界,而图像的区域特征则关系到整个形状区域。

几种典型的形状特征描述方法:

1)边界特征法该方法通过对边界特征的描述来获取图像的形状参数。其中Hough 变换检测平行直线方法和边界方向直方图方法是经典方法。Hough 变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法,其基本思想是点—线的对偶性;边界方向直方图法首先微分图像求得图像边缘,然后,做出关于边缘大小和方向的直方图,通常的方法是构造图像灰度梯度方向矩阵。

2)傅里叶形状描述符法

傅里叶形状描述符(Fourier shape descriptors)基本思想是用物体边界的傅里叶变换作为形状描述,利用区域边界的封闭性和周期性,将二维问题转化为一维问题。

由边界点导出三种形状表达,分别是曲率函数、质心距离、复坐标函数。

3)几何参数法

形状的表达和匹配采用更为简单的区域特征描述方法,例如采用有关形状定量测度(如矩、面积、周长等)的形状参数法(shape factor)。在 QBIC 系统中,便是利用圆度、偏心率、主轴方向和代数不变矩等几何参数,进行基于形状特征的图像检索。

 

D空间关系特征

特点:所谓空间关系,是指图像中分割出来的多个目标之间的相互的空间位置或相对方向关系,这些关系也可分为连接/邻接关系、交叠/重叠关系和包含/包容关系等。通常空间位置信息可以分为两类:相对空间位置信息和绝对空间位置信息。前一种关系强调的是目标之间的相对情况,如上下左右关系等,后一种关系强调的是目标之间的距离大小以及方位。显而易见,由绝对空间位置可推出相对空间位置,但表达相对空间位置信息常比较简单。
空间关系特征的使用可加强对图像内容的描述区分能力,但空间关系特征常对图像或目标的旋转、反转、尺度变化等比较敏感。另外,实际应用中,仅仅利用空间信息往往是不够的,不能有效准确地表达场景信息。为了检索,除使用空间关系特征外,还需要其它特征来配合。

常用的特征提取与匹配方法:

提取图像空间关系特征可以有两种方法:一种方法是首先对图像进行自动分割,划分出图像中所包含的对象或颜色区域,然后根据这些区域提取图像特征,并建立索引;另一种方法则简单地将图像均匀地划分为若干规则子块,然后对每个图像子块提取特征,并建立索引。

 

 

模式识别

模式识别是一种从大量信息和数据出发,在专家经验和已有认识的基础上,利用计算机和数学推理的方法对形状、模式、曲线、数字、字符格式和图形自动完成识别的过程。模式识别包括相互关联的两个阶段,即学习阶段和实现阶段,前者是对样本进行特征选择,寻找分类的规律,后者是根据分类规律对未知样本集进行分类和识别。广义的模式识别属计算机科学中智能模拟的研究范畴,内容非常广泛,包括声音和语言识别、文字识别、指纹识别、声纳信号和地震信号分析、照片图片分析、化学模式识别等等。计算机模式识别实现了部分脑力劳动自动化。

模式识别--对表征事物或现象的各种形式的(数值的,文字的和逻辑关系的)信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程,是信息科学和人工智能的重要组成部分。

模式还可分成抽象的和具体的两种形式。前者如意识、思想、议论等,属于概念识别研究的范畴,是人工智能的另一研究分支。我们所指的模式识别主要是对语音波形、地震波、心电图、脑电图、图片、文字、符号、三位物体和景物以及各种可以用物理的、化学的、生物的传感器对对象进行测量的具体模式进行分类和辨识。

模式识别问题指的是对一系列过程或事件的分类与描述,具有某些相类似的性质的过程或事件就分为一类。模式识别问题一般可以应用以下4种方法进行分析处理。

模版比对:

统计模式识别方法:统计模式识别方法是受数学中的决策理论的启发而产生的一种识别方法,它一般假定被识别的对象或经过特征提取向量是符合一定分布规律的随机变量。其基本思想是将特征提取阶段得到的特征向量定义在一个特征空间中,这个空间包含了所有的特征向量,不同的特征向量,或者说不同类别的对象都对应于空间中的一点。在分类阶段,则利用统计决策的原理对特征空间进行划分,从而达到识别不同特征的对象的目的。统计模式识别中个应用的统计决策分类理论相对比较成熟,研究的重点是特征提取。统计模式识别的基本原理是:有相似性的样本在模式空间中互相接近,并形成集团,即物以类聚。其分析方法是根据模式所测得的特征向量Xi=(xi1,xi2,…,xid)T(i=1,2,…,N),将一个给定的模式归入C个类ω1,ω2,…,ωc中,然后根据模式之间的距离函数来判别分类。其中,T表示转置;N为样本点数;d为样本特征数。

统计模式识别的主要方法有:判别函数法,k近邻分类法,非线性映射法,特征分析法,主因子分析法等。

在统计模式识别中,贝叶斯决策规则从理论上解决了最优分类器的设计问题,但其实施却必须首先解决更困难的概率密度估计问题。BP神经网络直接从观测数据(训练样本)学习,是更简便有效的方法,因而获得了广泛的应用,但它是一种启发式技术,缺乏指定工程实践的坚实理论基础。统计推断理论研究所取得的突破性成果导致现代统计学习理论——VC理论的建立,该理论不仅在严格的数学基础上圆满地回答了人工神经网络中出现的理论问题,而且导出了一种新的学习方法——支撑向量机。

 

人工神经网络模式识别:人工神经网络的研究起源于对生物神经系统的研究。人工神经网络区别于其他识别方法的最大特点是它对待识别的对象不要求有太多的分析与了解,具有一定的智能化处理的特点。

句法结构模式识别:又称结构方法或语言学方法。其基本思想是把一个模式描述为较简单的子模式的组合,子模式又可描述为更简单的子模式的组合,最终得到一个树形的结构描述,在底层的最简单的子模式称为模式基元。在句法方法中选取基元的问题相当于在决策理论方法中选取特征的问题。通常要求所选的基元能对模式提供一个紧凑的反映其结构关系的描述,又要易于用非句法方法加以抽取。显然,基元本身不应该含有重要的结构信息。模式以一组基元和它们的组合关系来描述,称为模式描述语句,这相当于在语言中,句子和短语用词组合,词用字符组合一样。基元组合成模式的规则,由所谓语法来指定。一旦基元被鉴别,识别过程可通过句法分析进行,即分析给定的模式语句是否符合指定的语法,满足某类语法的即被分入该类。

在几种算法中,统计模式识别是最经典的分类识别方法,在图像模式识别中有着非常广泛的应用。

 

 

参考书籍:美国 冈萨雷斯 数字图像处理第二版

2019-09-13 12:45:06 Vichael_Chan 阅读数 2116
  • 反走样绘图

    本阶段主要带领同学们完成以下几个方面的学习:文件、目录、输入输出、典型案例演示,QT自定义外观设计、样式表设计与实现、绘制模式、典型案例演示,XMl原理、接口设计、SAX、DOM等,数据库基本原理、Sqlite、mysql...

    8人学习 李浩林
    免费试看

一、特征提取概念

特征提取是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。

二、特征概述

至今为止特征没有万能和精确的定义。特征的精确定义往往由问题或者应用类型决定。特征是一个数字图像中“有趣”的部分,它是许多计算机图像分析算法的起点。因此一个算法是否成功往往由它使用和定义的特征决定。因此特征提取最重要的一个特性是“可重复性”:同一场景的不同图像所提取的特征应该是相同的。 

特征提取检查每个像素来确定该像素是否代表一个特征。假如它是一个更大的算法的一部分,那么这个算法一般只检查图像的特征区域。作为特征提取的一个前提运算,输入图像一般先在尺度空间中被平滑,此后通过局部导数运算来计算图像的一个或多个特征。
有时,假如特征提取需要许多的计算时间,而可以使用的时间有限制,一个高层次算法可以用来控制特征提取阶层,这样仅图像的部分被用来寻找特征。
由于许多计算机图像算法使用特征提取作为其初级计算步骤,因此有大量特征提取算法被发展,其提取的特征各种各样,它们的计算复杂性和可重复性也非常不同。
下面是用来描述图像的一些基本概念:

1.边缘

边缘是组成两个图像区域之间边界(或边缘)的像素。一般一个边缘的形状可以是任意的,还可能包括交叉点。在实践中边缘一般被定义为图像中拥有大的梯度的点组成的子集。一些常用的算法还会把梯度高的点联系起来来构成一个更完善的边缘的描写。这些算法也可能对边缘提出一些限制。局部地看边缘是一维结构。

2.角

角是图像中点似的特征,在局部它有两维结构。早期的算法首先进行边缘检测,然后分析边缘的走向来寻找边缘突然转向(角)。后来发展的算法不再需要边缘检测这个步骤,而是可以直接在图像梯度中寻找高度曲率。后来发现这样有时可以在图像中本来没有角的地方发现具有同角一样的特征的区域。

3.区域

与角不同的是区域描写一个图像中的一个区域性的结构,但是区域也可能仅由一个像素组成,因此许多区域检测也可以用来监测角。一个区域监测器检测图像中一个对于角监测器来说太平滑的区域。区域检测可以被想象为把一张图像缩小,然后在缩小的图像上进行角检测。

4.脊

长条形的物体被称为脊。在实践中脊可以被看作是代表对称轴的一维曲线,此外局部针对于每个脊像素有一个脊宽度。从灰梯度图像中提取脊要比提取边缘、角和区域困难。在空中摄影中往往使用脊检测来分辨道路,在医学图像中它被用来分辨血管。
特征被检测后它可以从图像中被抽取出来。这个过程可能需要许多图像处理的计算机。其结果被称为特征描述或者特征向量。

三、常用图像特征概述

常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。

1.颜色特征

1.1基本概念
颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献。由于颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征。另外,仅使用颜色特征查询时,如果数据库很大,常会将许多不需要的图像也检索出来。颜色直方图是最常用的表达颜色特征的方法,其优点是不受图像旋转和平移变化的影响,进一步借助归一化还可不受图像尺度变化的影响,基缺点是没有表达出颜色空间分布的信息。
1.2常用的特征提取与匹配方法
(1) 颜色直方图
其优点在于:它能简单描述一幅图像中颜色的全局分布,即不同色彩在整幅图像中所占的比例,特别适用于描述那些难以自动分割的图像和不需要考虑物体空间位置的图像。其缺点在于:它无法描述图像中颜色的局部分布及每种色彩所处的空间位置,即无法描述图像中的某一具体的对象或物体。
最常用的颜色空间:RGB颜色空间、HSV颜色空间。
颜色直方图特征匹配方法:直方图相交法、距离法、中心距法、参考颜色表法、累加颜色直方图法。
(2) 颜色集
颜色直方图法是一种全局颜色特征提取与匹配方法,无法区分局部颜色信息。颜色集是对颜色直方图的一种近似首先将图像从 RGB颜色空间转化成视觉均衡的颜色空间(如 HSV 空间),并将颜色空间量化成若干个柄。然后,用色彩自动分割技术将图像分为若干区域,每个区域用量化颜色空间的某个颜色分量来索引,从而将图像表达为一个二进制的颜色索引集。在图像匹配中,比较不同图像颜色集之间的距离和色彩区域的空间关系
(3) 颜色矩
这种方法的数学基础在于:图像中任何的颜色分布均可以用它的矩来表示。此外,由于颜色分布信息主要集中在低阶矩中,因此,仅采用颜色的一阶矩(mean)、二阶矩(variance)和三阶矩(skewness)就足以表达图像的颜色分布。
(4) 颜色聚合向量
其核心思想是:将属于直方图每一个柄的像素分成两部分,如果该柄内的某些像素所占据的连续区域的面积大于给定的阈值,则该区域内的像素作为聚合像素,否则作为非聚合像素。

2.纹理特征

2.1基本概念
纹理特征也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只是一种物体表面的特性,并不能完全反映出物体的本质属性,所以仅仅利用纹理特征是无法获得高层次图像内容的。与颜色特征不同,纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。在模式匹配中,这种区域性的特征具有较大的优越性,不会由于局部的偏差而无法匹配成功。作为一种统计特征,纹理特征常具有旋转不变性,并且对于噪声有较强的抵抗能力。但是,纹理特征也有其缺点,一个很明显的缺点是当图像的分辨率变化的时候,所计算出来的纹理可能会有较大偏差。另外,由于有可能受到光照、反射情况的影响,从2-D图像中反映出来的纹理不一定是3-D物体表面真实的纹理。例如,水中的倒影,光滑的金属面互相反射造成的影响等都会导致纹理的变化。由于这些不是物体本身的特性,因而将纹理信息应用于检索时,有时这些虚假的纹理会对检索造成“误导”。 在检索具有粗细、疏密等方面较大差别的纹理图像时,利用纹理特征是一种有效的方法。但当纹理之间的粗细、疏密等易于分辨的信息之间相差不大的时候,通常的纹理特征很难准确地反映出人的视觉感觉不同的纹理之间的差别。

2.2常用的特征提取与匹配方法
(1)统计方法
统计方法的典型代表是一种称为灰度共生矩阵的纹理特征分析方法。灰度共生矩阵的四个关键特征是能量、惯量、熵和相关性。统计方法中另一种典型方法是从图像的自相关函数(即图像的能量谱函数)提取纹理特征,即通过对图像的能量谱函数的计算,提取纹理的粗细度及方向性等特征参数
(2)几何法
所谓几何法,是建立在纹理基元(基本的纹理元素)理论基础上的一种纹理特征分析方法。纹理基元理论认为,复杂的纹理可以由若干简单的纹理基元以一定的有规律的形式重复排列构成。在几何法中,比较有影响的算法有两种:Voronio 棋盘格特征法和结构法。
(3)模型法
模型法以图像的构造模型为基础,采用模型的参数作为纹理特征。典型的方法是随机场模型法,如马尔可夫(Markov)随机场(MRF)模型法和 Gibbs 随机场模型法
纹理特征的提取与匹配主要有:灰度共生矩阵、Tamura 纹理特征、自回归纹理模型、小波变换等。
灰度共生矩阵特征提取与匹配主要依赖于能量、惯量、熵和相关性四个参数。Tamura 纹理特征基于人类对纹理的视觉感知心理学研究,提出6种属性,即:粗糙度、对比度、方向度、线像度、规整度和粗略度。自回归纹理模型(simultaneous auto-regressive, SAR)是马尔可夫随机场(MRF)模型的一种应用实例。

3.形状特征

3.1基本概念
各种基于形状特征的检索方法都可以比较有效地利用图像中感兴趣的目标来进行检索,但它们也有一些共同的问题,包括:①目前基于形状的检索方法还缺乏比较完善的数学模型;②如果目标有变形时检索结果往往不太可靠;③许多形状特征仅描述了目标局部的性质,要全面描述目标常对计算时间和存储量有较高的要求;④许多形状特征所反映的目标形状信息与人的直观感觉不完全一致,或者说,特征空间的相似性与人视觉系统感受到的相似性有差别。另外,从 2-D 图像中表现的 3-D 物体实际上只是物体在空间某一平面的投影,从 2-D 图像中反映出来的形状常不是 3-D 物体真实的形状,由于视点的变化,可能会产生各种失真。
3.2常用的特征提取与匹配方法
通常情况下,形状特征有两类表示方法,一类是轮廓特征,另一类是区域特征。图像的轮廓特征主要针对物体的外边界,而图像的区域特征则关系到整个形状区域。
(1)边界特征法
该方法通过对边界特征的描述来获取图像的形状参数。其中Hough 变换检测平行直线方法和边界方向直方图方法是经典方法。Hough 变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法,其基本思想是点—线的对偶性;边界方向直方图法首先微分图像求得图像边缘,然后,做出关于边缘大小和方向的直方图,通常的方法是构造图像灰度梯度方向矩阵。
(2)傅里叶形状描述符法
傅里叶形状描述符(Fourier shape deors)基本思想是用物体边界的傅里叶变换作为形状描述,利用区域边界的封闭性和周期性,将二维问题转化为一维问题。由边界点导出三种形状表达,分别是曲率函数、质心距离、复坐标函数。
(3)几何参数法
形状的表达和匹配采用更为简单的区域特征描述方法,例如采用有关形状定量测度(如矩、面积、周长等)的形状参数法(shape factor)。在 QBIC 系统中,便是利用圆度、偏心率、主轴方向和代数不变矩等几何参数,进行基于形状特征的图像检索。需要说明的是,形状参数的提取,必须以图像处理及图像分割为前提,参数的准确性必然受到分割效果的影响,对分割效果很差的图像,形状参数甚至无法提取。
(4)形状不变矩法
利用目标所占区域的矩作为形状描述参数。

4.空间关系特征

4.1基本概念
所谓空间关系,是指图像中分割出来的多个目标之间的相互的空间位置或相对方向关系,这些关系也可分为连接/邻接关系、交叠/重叠关系和包含/包容关系等。通常空间位置信息可以分为两类:相对空间位置信息和绝对空间位置信息。前一种关系强调的是目标之间的相对情况,如上下左右关系等,后一种关系强调的是目标之间的距离大小以及方位。显而易见,由绝对空间位置可推出相对空间位置,但表达相对空间位置信息常比较简单。
空间关系特征的使用可加强对图像内容的描述区分能力,但空间关系特征常对图像或目标的旋转、反转、尺度变化等比较敏感。另外,实际应用中,仅仅利用空间信息往往是不够的,不能有效准确地表达场景信息。为了检索,除使用空间关系特征外,还需要其它特征来配合。
4.2常用的特征提取与匹配方法
提取图像空间关系特征可以有两种方法:一种方法是首先对图像进行自动分割,划分出图像中所包含的对象或颜色区域,然后根据这些区域提取图像特征,并建立索引;另一种方法则简单地将图像均匀地划分为若干规则子块,然后对每个图像子块提取特征,并建立索引。

2017-06-24 21:20:06 akadiao 阅读数 4820
  • 反走样绘图

    本阶段主要带领同学们完成以下几个方面的学习:文件、目录、输入输出、典型案例演示,QT自定义外观设计、样式表设计与实现、绘制模式、典型案例演示,XMl原理、接口设计、SAX、DOM等,数据库基本原理、Sqlite、mysql...

    8人学习 李浩林
    免费试看

1、图像数字化一般采用均匀采样和均匀量化方式。
均匀采样,即等间隔采样。当对采样点数目有所限制时,比如说N×N个采样点,此时可以根据图像的特性采用自适应采样方案,有可能获得更好的效果。
自适应采样方案的基本思想是:在图像函数值变化较大的区域采用精细的采样,在相对平滑的区域采用粗糙的采样。这种自适应采样方案又称为非均匀采样。
一般来说,采样间隔越大,所得图像像素数越少,空间分辨率低,质量差,严重时出现像素呈块状的国际棋盘效应;采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量大。
2、对比度:是指一幅图象中灰度反差的大小。
对比度=最大亮度/最小亮度
3、清晰度:由图像边缘灰度变化的速度来描述。
4、分辨率:单位dpi (display pixels / inch)每英寸显示的线数,dpi的数值越大,图像越清晰。
5、数字图像分类:
(1)二进制图像
在一幅二进制图像中,每一个像素将取两个离散数值(0或1)中的一个。二进制图像使用uint8或双精度类型的数组来存储。
(2)索引图像
索引图像是一种把像素直接作为RGB调色板下标的图像。在MATLAB中,索引图像包含一个数据矩阵X和一个颜色映射(调色板)矩阵map。数据矩阵可以是unit8、unit16或双精度类型的。颜色映射矩阵map是一个m3的数据阵列,其中每个元素的值均为[0,1]之间的双精度浮点型数据,map矩阵中的每一行分别表示红色、绿色和蓝色的颜色值。索引图像可把像素的值直接映射为调色板数值,每个像素的颜色通过使用X的像素值作为map的下标来获得,如值1指向map的第一行,值2指向第二行,以此类推。
(3)灰度图像
灰度图像通常由一个unit8、unit16或双精度类型的数组来描述,其实质是一个数据矩阵I,如式(2.6.1)。该矩阵中的数据均代表了在一定范围内的灰度级,每一个元素对应于图像的一个像素点,通常0代表黑色,1、255或65535(针对不同的存储类型)代表白色。
(4)多帧图像
多帧图像是一种包含多幅图像或帧的图像文件,又称为多页图像或图像序列,主要用于需要对时间或场景上相关图像集合进行操作的场合。例如,磁谐振图像切片或电影帧等。在MATLAB中,它是一个四维数组,其中第四维用来指定帧的序号。
5)RGB图像
RGB图像又称为真彩图像,它是利用R、G、B三个分量表示一个像素的颜色,R、G、B分别代表红、绿、蓝三种不同的基本颜色,通过三基色可以合成出任意颜色。所以对一个尺寸为MN的真彩图像来说,在MATLAB中则存储为一个M*N *3的多维数据矩阵。RGB图像不使用调色板,每一个像素的颜色直接由存储在相应位置的红、绿、蓝颜色分量的组合来确定。每个像素的三个颜色分量都存储在矩阵的第三维中,如坐标(16, 36)处的红、绿、蓝颜色值分别保存在元素(16, 36, 2)、(16, 36, 4)和(16, 36, 6)中。

6、像素间的基本关系
1、N4(p)——象素(x, y)的4邻域:(x+1, y), (x-1, y),(x, y+1),(x, y-1)
2、ND(p)——象素(x, y)的对角邻域 (x+1, y+1), (x+1, y-1),(x-1, y+1),(x-1, y-1)
3、N8(p)——象素(x, y)的8邻域: N4(p) + ND(p)
这里写图片描述
这里写图片描述
7、灰度直方图的应用
①用于判断图像量化是否恰当
②用于确定图像二值化的阈值
③当物体部分的灰度值比其他部分灰度值大时,可利用 直方图统计图像中物体的面积
④计算图像信息量H(熵)
8、纹理的分析方法:
(1)统计方法
(2)结构方法
(3)频谱分析方法

(1)纹理分析的统计方法:
从图像有关属性的统计分析出发
用于木纹、纱地、草地等不规则物体
自然纹理,具有重复性排列现象的自然景象,无规则
(2)纹理分析的结构方法:
着力找出纹理基元,然后从结构组成上探索纹理的规律
通过纹理的元素及其排列规则来描述纹理的结构。
人工纹理:是由自然背景上的符号排列组成、有规则的
(3)纹理分析的频谱分析方法:
采用基于传统的Fourier频谱分析方法以确定纹理基元及其排列规律 。
手段:
峰值处的面积、峰值处的相位、峰值与原点的距离平方、两个峰值间的相角差等。

自相关函数分析法
自相关函数ρ(x,y)随x,y大小而变化,其变化与图像中纹理粗细的变化有着对应的关系,因而可描述图像纹理特征。
数学形态学的基本运算:膨胀(扩张)、 腐蚀(侵蚀) 、开启、闭合。
二值图象用集合A表示。
作为结构元素的二值模板用集合B表示,B具有原点。
通常情况下,在膨胀之后,集合A包含于膨胀结果AB;
通常情况下,在腐蚀之后,腐蚀结果AΘB包含于集合A。
用B膨胀A的过程是:
先对B做关于原点的映象,再将其映象平移。
A与B映象的交集不为空集,则原点处元素属于输出集合。
用B腐蚀的结果:
若B平移x后仍包含于A中,则原点位置的元素属于输出集合。
当原点不包含于结构元素中时,有可能出现的情况是:
A在膨胀之后,反而不属于膨胀结果。
对于原点不包含于结构元素中的腐蚀运算,有可能出现两种情况:
A在腐蚀之后,得到与图1相同的情形。
这里写图片描述
或者,腐蚀之后的结果反而不属于A,有新元素产生,如图2。
这里写图片描述
膨胀和腐蚀这两种运算是紧密联系的
一个运算对图象目标的操作,相当于另一个运算对图象背景的操作。
由于膨胀和腐蚀并不互为逆运算,因此通过级连可形成开启和闭合运算。
使用同一个结构元素先对图象进行腐蚀然后膨胀其结果,称为开启
使用同一个结构元素先对图象进行膨胀然后腐蚀其结果,称为闭合
将开启和闭合结合起来可构成形态学噪声滤除器。
设有一个集合A,先用一个结构元素B腐蚀A,再求取腐蚀结果和A的差集就可得到边界。

图像的几何变换:
几何运算可改变图象中各物体之间的空间关系。
这种运算可以被看成是将(各)物体在图象内移动。
其效果正如在一块橡皮板上画图,拉伸该橡皮板,并在不同的点固定该橡皮板。
几何运算住往需作一些限制以保持图象的外观顺序。
一个几何运算需要两个独立的算法。
一个算法来定义空间变换本身,用它描述每个象素如何从其初始位置“移动”到终止位置,即每个象素的“运动”。
一个用于灰度插值的算法,这是因为,在一般情况下,输入图象的位置坐标(x,y)为整数,而输出图象的位置坐标为非整数,反过来也是如此。
如果一个输入象素被映射到四个输出象素之间的位置,则其灰度值就按插值算法在四个输出象素之间进行分配。我们称之为象素移交(pixel carry-over)或称为向前映射法。
另一种更有效地达到目的的方法是象素填充(pixel filling)或称为向后映射算法。
在这里输出象素一次一个地映射回到输入图象中,以便确定其灰度级。
如果一个输出象素被映射到四个输出象素之间,则其灰度值由灰度级插值决定。向后空间变换是向前变换的逆。
输出象素通常被映射到输入图象中的非整数位置,即位于四个输入象素之间。
因此,为了决定与该位置相对应的灰度值,必须进行插值运算。
可采用的插值方法有多种:最近邻插值、双线性插值、Sink插值、多项式插值、B样条函数近似插值等。
最常用的是最近邻插值和双线性插值。
最简单的插值方法是所谓的零阶插值或称为最近邻插值,即令输出象素的灰度值等于离它所映射到的位置最近的输入象素的灰度值。
最近邻插值计算十分简单,在许多情况下,其结果也可令人接受。
然而,当图象中包含象素之间灰度级有较大变化的细微结构时,最近邻插值法会在图象中产生人工的痕迹。
一阶插值(或称双线性插值法)和零阶插值法相比可产生更令人满意的效果。只是程序稍微复杂一些,运行时间稍长一些。
由于通过四点确定一个平面是一个过约束问题,所以在一个矩形栅格上进行的一阶插值就需要用到双线性函数。
令f(x,y)为两个变量的函数,其在单位正方形顶点的值已知。假设希望通过插值得到正方形内任意点的f(x,y)值。
可令由双线性方程:
f(x,y)=ax+by+cxy+d
来定义的一个双曲抛物面与四个已知点拟合。从a到d这四个系数须由已知的四个顶点的f(x,y)值来确定。
这里写图片描述
有一个简单的算法可产生一个双线性插值函数,并使之与四个顶点的f(x,y)值拟合。
首先,对上端的两个顶点进行线性插值可得:
f(x,0)=f(0,0)+x[f(1,0)-f(0,0)]
类似地,对于底端两个顶点进行线性插值有:
f(x,1)=f(0,1)+x[f(1,1)-f(0,1)]
最后,做垂直方向的线性插值,以确定:
f(x,y)=f(x,0)+y[f(x,1)-f(x,0)]
将等式10.3和式10.4代入式10.5,展开等式并合并同类项可得:
f(x,y)=[f(1,0)-f(0,0)]x+[f(0,1)-f(0,0)]y+[f(1,1)+f(0,0)-f(0,1)-f(1,0)]xy+f(0,0)
在几何运算中,双线性灰度插值的平滑作用可能会使图象的细节产生退化,尤其是在进行放大处理时,这种影响将更为明显。
在其他应用中,双线性插值的斜率不连续性会产生不希望的结果。
这两种情况都可以通过高阶插值得到修正,当然这需要增加计算量。
图像平移:
采用称为齐次坐标的表达方式,可认为xy平面是x、y、z三维空间中z=0的平面,并写成简洁的矩阵形式如下:
这里写图片描述
图像缩放:
使输出图象(x,y坐标系)在x轴方向缩放c倍,在y轴方向缩放d倍。图象原点(通常取在左上角)在图象“膨胀”时保持不动。在齐次坐标系中:
这里写图片描述
图像旋转:
一个绕原点的顺时针θ角旋转。在齐次坐标系中可写为:
这里写图片描述

几何变换的应用:
1、几何校正
几何运算的一个重要应用是消除由于摄像机导致的数字图象的几何畸变。当需要从数字图象中得到定量的空间测量数据时,几何校正被证明是十分重要的。
2、图象校直
一些图象系统使用非矩形的象素坐标。在用普通的显示设备观察这些图象时,必须先对它们进行校直,也就是说,将其转换为矩形象素坐标。
3、图象配准
几何运算的另一个应用是对相似的图象进行配准以便进行图象比较。典型的应用是利用图象相减来检测运动或变化。如不进行配准,就不能检测到真正的变化。
4、图象样式转换
有时需将图象以另一种样式表示以便于解释,这时也会用到几何运算。
5、地图投影
几何运算的另一个主要应用是地图绘制中的图象投影。
6、变形
在电影和电视工业中,越来越普及的特技是基于几何运算的。变形就是一种可以使一个物体逐渐转变为另外一个物体的技术。

数字图像处理系统的基本结构:
这里写图片描述

练习题:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2018-01-08 15:42:37 u011555996 阅读数 380
  • 反走样绘图

    本阶段主要带领同学们完成以下几个方面的学习:文件、目录、输入输出、典型案例演示,QT自定义外观设计、样式表设计与实现、绘制模式、典型案例演示,XMl原理、接口设计、SAX、DOM等,数据库基本原理、Sqlite、mysql...

    8人学习 李浩林
    免费试看

图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大。(1)航天和航空技术方面的应用 数字图像处理技术在航天和航空技术方面的应用,除了上面介绍的JPL对月球、火星照片的处理之外,另一方面的应用是在飞机遥感和卫星遥感技术中。许多国家每天派出很多侦察飞机对地球上有兴趣的地区进行大量的空中摄影。对由此得来的照片进行处理分析,以前需要雇用几千人,而现在改用配备有高级计算机的图像处理系统来判读分析,既节省人力,又加快了速度,还可以从照片中提取人工所不能发现的大量有用情报。从60年代末以来,美国及一些国际组织发射了资源遥感卫星(如LANDSAT系列)和天空实验室(如SKYLAB),由于成像条件受飞行器位置、姿态、环境条件等影响,图像质量总不是很高。因此,以如此昂贵的代价进行简单直观的判读来获取图像是不合算的,而必须采用数字图像处理技术。如LANDSAT系列陆地卫星,采用多波段扫描器(MSS),在900km高空对地球每一个地区以18天为一周期进行扫描成像,其图像分辨率大致相当于地面上十几米或100米左右(如1983年发射的LANDSAT-4,分辨率为30m)。这些图像在空中先处理(数字化,编码)成数字信号存入磁带中,在卫星经过地面站上空时,再高速传送下来,然后由处理中心分析判读。这些图像无论是在成像、存储、传输过程中,还是在判读分析中,都必须采用很多数字图像处理方法。现在世界各国都在利用陆地卫星所获取的图像进行资源调查(如森林调查、海洋泥沙和渔业调查、水资源调查等),灾害检测(如病虫害检测、水火检测、环境污染检测等),资源勘察(如石油勘查、矿产量探测、大型工程地理位置勘探分析等),农业规划(如土壤营养、水份和农作物生长、产量的估算等),城市规划(如地质结构、水源及环境分析等)。我国也陆续开展了以上诸方面的一些实际应用,并获得了良好的效果。在气象预报和对太空其它星球研究方面,数字图像处理技术也发挥了相当大的作用。(2)生物医学工程方面的应用 数字图像处理在生物医学工程方面的应用十分广泛,而且很有成效。除了上面介绍的CT技术之外,还有一类是对医用显微图像的处理分析,如红细胞、白细胞分类,染色体分析,癌细胞识别等。此外,在X光肺部图像增晰、超声波图像处理、心电图分析、立体定向放射治疗等医学诊断方面都广泛地应用图像处理技术。 (3)通信工程方面的应用 当前通信的主要发展方向是声音、文字、图像和数据结合的多媒体通信。具体地讲是将电话、电视和计算机以三网合一的方式在数字通信网上传输。其中以图像通信最为复杂和困难,因图像的数据量十分巨大,如传送彩色电视信号的速率达100Mbit/s以上。要将这样高速率的数据实时传送出去,必须采用编码技术来压缩信息的比特量。在一定意义上讲,编码压缩是这些技术成败的关键。除了已应用较广泛的熵编码、DPCM编码、变换编码外,目前国内外正在大力开发研究新的编码方法,如分行编码、自适应网络编码、小波变换图像压缩编码等。(4)工业和工程方面的应用 在工业和工程领域中图像处理技术有着广泛的应用,如自动装配线中检测零件的质量、并对零件进行分类,印刷电路板疵病检查,弹性力学照片的应力分析,流体力学图片的阻力和升力分析,邮政信件的自动分拣,在一些有毒、放射性环境内识别工件及物体的形状和排列状态,先进的设计和制造技术中采用工业视觉等等。其中值得一提的是研制具备视觉、听觉和触觉功能的智能机器人,将会给工农业生产带来新的激励,目前已在工业生产中的喷漆、焊接、装配中得到有效的利用。(5)军事公安方面的应用 在军事方面图像处理和识别主要用于导弹的精确末制导,各种侦察照片的判读,具有图像传输、存储和显示的军事自动化指挥系统,飞机、坦克和军舰模拟训练系统等;公安业务图片的判读分析,指纹识别,人脸鉴别,不完整图片的复原,以及交通监控、事故分析等。目前已投入运行的高速公路不停车自动收费系统中的车辆和车牌的自动识别都是图像处理技术成功应用的例子。(6)文化艺术方面的应用 目前这类应用有电视画面的数字编辑,动画的制作,电子图像游戏,纺织工艺品设计,服装设计与制作,发型设计,文物资料照片的复制和修复,运动员动作分析和评分等等,现在已逐渐形成一门新的艺术--计算机美术。

数字图像处理技术与图象处理系统是七十年代末期形成一个独立学科,当时只能处理静止图象,主要用于军事、科研医学等领域。图象处理系统是为了加快处理速度而设计的专用系统,在中小型计算机控制下运行。这些系统的规模大,价格昂贵。面向PC机的图象处理系统是八十年代中后期开始出现的。它价格便宜,易于扩充, 软件丰富,因此很快得到推广,带动了图象处理技术的普及。

在过去的二十年里,C和C++已经成为在商业软件的开发领域中使用最广泛的语言。它们为程序员提供了十分灵活的操作,不过同时也牺牲了一定的效率。与诸如Microsoft,Visual Basic, 等语言相比,同等级别的C/C++应用程序往往需要更长时间来开发。由于C/C++语言的复杂性,许多程序员都试图寻找一种新的语言,希望能在功能与效率之间找到一个更为理想的权衡点。

     目前有些语言,以牺牲灵活性的代价来提高效率。可是这些灵活性正是C/C++程序员所需要的。这些解决方案对编程人员的限制过多(如屏蔽一些底层代码控制的机制),其所提供的功能难以令人满意。这些语言无法方便地同早先的系统交互,也无法很好地和当前的网络编程相结合。

    对于C/C++用户来说,最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能。他们想要一种和最新的网络标准保持同步并且能和已有的应用程序良好整合的环境。另外,一些C/C++开发人员还需要在必要的时候进行一些底层的编程。

    微软推出C# (C sharp)是微软对这一问题的解决方案。C#是一种最新的、面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选--无论是高级的商业对象还是系统级的应用程序。使用简单的C#语言结构,这些组件可以方便的转化为XML 网络服务,从而使它们可以由任何语言在任何操作系统上通过Internet进行调用。最重要的是,C#使得C++程序员可以高效的开发程序,而绝不损失C/C++原有的强大的功能。因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。

    效率与安全性新兴的网络经济迫使商务企业必须更加迅速的应对竞争的威胁。开发者必须不断缩短开发周期,不断推出应用程序的新版本,而不仅仅是开发一个"标志性"的版本。

   C#在设计时就考虑了这些问题。它使开发者用更少的代码做更多的事,同时也不易出错。新的应用程序开发模型意味着越来越多地解决方案依赖于新出现的网络标准,例如HTML,XML,SOAP等。现存的开发工具往往都是早于Internet出现的,或者是在我们所熟知的网络还处于孕育期时出现的。所以,它们一般无法很好地支持最新的网络技术。

    C#程序员可以在Microsoft.NET平台上事半功倍的构建应用程序的扩展框架。C#包含了内置的特性,使任何组件可以轻松转化为XML网络服务,通过Internet被任何操作系统上运行的任何程序调用。更突出的是,XML网络服务框架可以使现有的XML网络服务对程序员来说就和C#对象一样。这样,程序员就可以方便地使用他们已有的面向对象的编程技巧来开发利用现有的XML网络服务。

     还有一些精细的特性,使得C#成为一流的网络编程工具。例如,XML正逐渐成为在网络上传输结构化数据的标准。这种数据集合往往非常小。为提高性能,C#允许把XML数据直接映射到struct数据类型,而不是class。这样对处理少量的数据非常有效。

    即使是专家级的C++程序员也常会犯一些最简单的小错误--比如忘了初始化变量,但往往就是这些小错误带来了难以预料的问题,有些甚至需要很长时间来寻找和解决。一旦一个程序作为产品来使用,就算最简单的错误纠正起来也可能要付出极其昂贵的代价。C#的现代化设计能够消除很多常见的C++编程错误。 例如:资源回收减轻了程序员内存管理的负担;C#中变量由环境自动初始化;变量是类型安全的。这样,程序员编写与维护那些解决复杂商业问题的程序就更方便了。

更新软件组件是一项很容易出错的工作,因为代码的修改可能无意间改变原有程序的语义。为协助开发者进行这项工作,C#为版本的更新提供内在的支持。例如,方法重载必须显式声明。这样可以防止编码错误,保证版本更新的灵活性。还有一个相关的特性就是对接口和接口继承的内在支持。这些特性使得C#可以开发复杂的框架并且随着时间不断发展更新它。

    总体来说,这些特性使得开发程序项目的后续版本的过程更加健壮,从而减少后续版本的开发成本。

C#语言允许类型定义的,扩展的元数据。这些元数据可以应用于任何对象。项目构建者可以定义领域特有的属性并把他们应用于任何语言元素-类,接口等等。然后,开发人员可以编程检查每个元素的属性。这样,很多工作都变得方便多了,比如编写一个小工具来自动检查每个类或接口是否被正确定义为某个抽象商业对象的一部分,或者只是创建一份基于对象的领域特有属性的报表。定制的元数据和程序代码之间的紧密对应有助于加强程序的预期行为和实际实现的之间的对应关系。

作为一种自动管理的,类型安全的环境,C#适合于大多数企业应用程序。但实际的经验表明有些应用程序仍然需要一些底层的代码,要么是因为基于性能的考虑,要么是因为要与现有的应用程序接口兼容。这些情况可能会迫使开发者使用C++,即使他们本身宁愿使用更高效的开发环境。C#采用以下对策来解决这一问题:内置对组建对象模型(COM)和基于Windows的API的支持;允许有限制地使用纯指针(Native Pointer)。

在C#中,每个对象都自动生成为一个COM对象。开发者不再需要显式的实现IUnknown和其他COM接口.这些功能都是内置的.类似的,C#可以调用现有的COM对象,无论它是由什么语言编写的。

  C#包含了一个特殊的功能,使程序可以调用任何纯API。在一段特别标记的代码中,开发者可以使用指针和传统C/C++特性,如手工的内存管理和指针运算。这是其相对于其它环境的极大优势。这意味着C#程序员可以在原有的C/C++代码的基础上编写程序,而不是彻底放弃那些代码。无论是支持COM还是纯API的调用,都是为了使开发者在C#环境中直接拥有必要的强大功能。

所以C#是一种现代的面向对象语言。它使程序员快速便捷地创建基于Microsoft .NET平台的解决方案。这种框架使C#组件可以方便地转化为XML网络服务,从而使任何平台的应用程序都可以通过Internet调用它。C#增强了开发者的效率,同时也致力于消除编程中可能导致严重结果的错误。C#使C/C++程序员可以快速进行网络开发,同时也保持了开发者所需要的强大性和灵活性。

C#中,Image为源自 Bitmap  Metafile 的类提供功能的抽象基类,使用Image可以操作各种支持的图片,如GIF, BMP, JPG Image.FromFile()返回的是某个继承自Image的具体类的对象,在这里,就是Bitmap或者Metafile其中之一。这Bitmap不仅仅对应于bmp,其实只要是像素式的图片格式(矢量格式不行),理论上都可以用Bitmap。由于Bitmap是忽略图像格式的,所以,在本图像处理的源代码中,并没有给出不同图像格式转换的代码,我们所做的仅仅是创建一个Bitmap对象,用 Image.FromFile()方法载入图像并保存到我们所创建的Bitmap对象中即可。对载入图像,我们可以使用SystemDrawing命名空间里提供的Getpixel方法提取像素的RGB值来进行处理。

2.1 BMP图像

2.1 BMP图像的基本介绍

如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面。那么Windows是如何显示图象的呢?这就要谈到位图(bitmap)。

在 Windows 3.0 以前,Windows系统用的是DDB(设备有关位图)。DDB没有调色板,显示的颜色依赖硬件,处理色彩很不方便。所以 Microsoft 在 Windows 3.0中 重新定义了BMP文件格式(BMP 3.0),使其支持设备无关位图——也就是DIB。时至今日,BMP的版本号已升至5.0(Windows NT 4.0、Windows95 定义了 BMP 4.0,Windows 98、Windows 2000 定义了 BMP 5.0),但基本结构没有变——仍是 BMP文件头 和 DIB 组成。

Windows 3.1以上版本提供了对设备无关位图DIB的支持。DIB位图可以在不同的机器或系统中显示位图所固有的图像。与DDB相比而言,DIB是一种外部的位图格式,经常存储为以BMP为后缀的位图文件(有时也以DIB为后缀)。DIB位图还支持图像数据的压缩。与Windows DIB结构相似,但不完全相同的另一种DIB是OS/2采用的DIB。

DIB位图的位数据紧跟在颜色表后面。数据可以是不压缩的,也可以是压缩的。对4位和8位位图,可以采用RLE(游程长度编码)压缩,分别称为RLE4和RLE8位图。

位数据以行为单位存储,每行都被填充到一个四字节边界,即每行所占的存储长度总是四字节(32位)的倍数,不足时将多余位用0填充。位图行的存储次序是颠倒的,即位图文件中第一行数据对应的是位图的最底行。对于像素位数为1的DIB位图,其每个像素只占1位,每个字节存储八个像素。字节的最高位对应于最左边的像素。在没有压缩的像素位数为4的DIB位图中,每个字节存储两个像素,高四位对应于最左边的像素,每行填充到一个四字节边界。采用RLE编码压缩的四位DIB由一系列组组成。有三种类型的组:重复组、文字组和特殊组。重复组由两个字节组成,第一个字节表示像素个数,第二个字节表示一对像素的值。文字组由一个0字节、一个像素计数字节和文字像素字节组成。像素计数值必须至少为3(小于3时,可采用重复组编码),文字像素应填充到一个偶数字节边界。特殊组中,00 00表示一行的结束,00 01表示位图的结束,00 02 xx yy表示位置增量,即图像向右走xx个像素,向下走yy个像素。

在没有压缩的像素位数为8的DIB位图中,每个字节存储一个像素,每行填充到一个四字节边界。采用R LE编码压缩的四位DIB由一系列组组成。有三种类型的组:重复组、文字组和特殊组。重复组内两个字节组成,第一个字节表示像素个数,第二个字节表示像素值。文字组由一个0字节、一个像素计数字节和文字像素字节组成。像素计数值必须至少为3(小于3时,可采用重复组编码),文字像素应填充到一个偶数字节边界。特殊组中,00 00表示一行的结束,00 01表示位图的结束,0002xx yy表示位置增量,即图像向右走xx个像素, 向下走yy个像素。在像素位数为24的DIB位图中,每个像素占三字节,从左到右的每一字节分别存储蓝、绿、红的颜色值。每行用0填充到一个四字节边界。

OS/2 DIB和Windows DIB的主要区别是位图信息结构(信息头结构和颜色表结构)不同。而它们的图像位数据的存储方式是完全一样的。

我们知道,普通的显示器屏幕是由许许多多点构成的,我们称之为象素。显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个象素着色,然后从上到下这样扫描若干行,就扫过了一屏。为了防止闪烁,每秒要重复上述过程几十次。例如我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。我们称这种显示器为位映象设备。所谓位映象,就是指一个二维的象素矩阵,而位图就是采用位映象方法显示和存储的图象。举个例子,图1.1是一幅普通的黑白位图,图1.2是被放大后的图,图中每个方格代表了一个象素。我们可以看到:整个骷髅就是由这样一些黑点和白点组成的。在设计中,我们也是对图像的像元进行处理的。

    而自然界中的所有颜色都可以由红、绿、蓝(R,G,B)组合而成。有的颜色含有红色成分多一些,如深红;有的含有红色成分少一些,如浅红。针对含有红色成分的多少,可以分成0到255共256个等级,0级表示不含红色成分;255级表示含有100%的红色成分。同样,绿色和蓝色也被分成256级。这种分级概念称为量化。这样,根据红、绿、蓝各种不同的组合我们就能表示出256×256×256,约1600万种颜色。这么多颜色对于我们人眼来说已经足够丰富了。

常见颜色的RGB组合值

颜色   R     G      B

红     255    0      0

蓝      0    255     0

绿      0     0     255

黄     255   255     0

紫     255    0     255

青      0    255    255

白     255   255    255

黑      0     0      0

灰     128   128    128

当一幅图中每个象素赋予不同的RGB值时,能呈现出五彩缤纷的颜色了,这样就形成了彩色图。

图象数据就是该象素颜在调色板中的索引值。对于真彩色图,图象数据就是实际的R、G、B值。对于2色位图,用1位就可以表示该象素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个象素。对于16色位图,用4位可以表示一个象素的颜色,所以一个字节可以表示2个象素。对于256色位图,一个字节刚好可以表示1个象素。对于真彩色图,三个字节才能表示1个象素。

要注意两点:

  (1)每一行的字节数必须是4的整倍数,如果不是,则需要补齐。这在前面介绍biSizeImage时已经提到了。

  (2)一般来说,.bMP文件的数据从下到上,从左到右的。也就是说,从文件中最先读到的是图象最下面一行的左边第一个象素,然后是左边第二个象素……接下来是倒数第二行左边第一个象素,左边第二个象素……依次类推,最后得到的是最上面一行的最右一个象素。

  Windows操作系统统一管理着诸如显示,打印等操作,将它们看作是一个个的设备,每一个设备都有一个复杂的数据结构来维护。所谓设备上下文就是指这个数据结构。然而,我们不能直接和这些设备上下文打交道,只能通过引用标识它的句柄(实际上是一个整数),让Windows去做相应的处理。

2.2  图像的读取

    图像读取主要方法是利用OpenFileDialog(文件打开控件)获得打开图像的绝对路径,用System.Drawing里Bitmap.FromFile方法将所获得的图像转换成DIB并加载到内存中,同时将加载的图像复制到pictureBox1图像框中。

private void menuItem2_Click(object sender, System.EventArgs e)

{

OpenFileDialog imageopen = new OpenFileDialog();

imageopen.Title = "请打开图像文件" ;

imageopen.InitialDirectory = @"c:/" ;

imageopen.Filter = "(图像文件)*.bmp;jepg;jpg;gif;png|*.bmp;*.jepg;*.jpg;*.gif;*.png" ;

imageopen.FilterIndex = 1 ;

imageopen.RestoreDirectory = true ;

if(imageopen.ShowDialog() == DialogResult.OK)

{

filepath=imageopen.FileName;

this.progressBar1.Value=20;

this.pictureBox1.Image=System.Drawing.Bitmap.FromFile(filepath);

}

this.pictureBox2.Image=null;

3  灰度直方图

3.1灰度直方图的基本概念

从某种角度上来讲,图像处理是基于统计学概念上的,所以,为了能够将图像变成计算机所能够识别并处理的数据,我们必须对图像进行量化,使得我们能从数值概念上获得对图像的映像。这里,我们引入灰度图像的概念:灰度图像是一种具有从黑到白256级灰度色域或等级的单色图像。该图像中的每个像素用8位数据表示,因此像素点值介于黑白间的256种灰度中的一种。该图像只有灰度等级,而没有颜色的变化。这样,我们可以将图像的RGB属性归一为灰度属性,由此就可以方便我们对图像进行处理。

3.2  如何获取灰度直方图

首先我们应该清楚的是灰度直方图是一个从0-255范围变化的步长为一的数组,数组的每一个元素对应的是每一个灰度值。在这里,我们首先定义了一个int型数组,数组的大小为256,数组名为Histogram。其中,Histogram[i]对应得是灰度为i的像素的个数。

在这里,我们使用的计算灰度的算法为Gray=(int)(0.3*r+0.59*g+0.11*b)。其中,r,g,b分别为所处理像素的RGB值。算法的源代码如下:

private void menuItem24_Click(object sender, System.EventArgs e)

       {

               int height=this.pictureBox1.Image.Height;

              int width=this.pictureBox1.Image.Width;

              Bitmap process=(Bitmap)this.pictureBox1.Image;

              Color pixel;

              int  [] Histogram=new int[256];

              int Times,Gray,r,g,b;

              for (i=0;i<=255;i++)

              {

                  Histogram[i]=0;

              }

              for(i=0;i<width;i++)

              {

                  for(j=0;j<height;j++)

                  {

                     pixel=process.GetPixel(i,j);

                     r=pixel.R;

                     g=pixel.G;

                     b=pixel.B;

                     Gray=(int)(0.3*r+0.59*g+0.11*b);

                     Histogram[Gray]=Histogram[Gray]+1;

                  }

              }

       }

下图为对某一图像处理后所获得的灰度直方图,从该图中我们可以获得一个图像的灰度分布的直观映像。

4         图象的几何变换

4.1平移

平移(translation)变换大概是几何变换中最简单的一种了。如下图,初始坐标为(x0,y0)的点经过平移(tx,ty)(以向右,向下为正方向)后,坐标变为(x1,y1)。这两点之间的关系是x1=x0+tx ,y1=y0+ty。

如下图所示

 

以矩阵的形式表示为

 

我们更关心的是它的逆变换:

 

这是因为:我们想知道的是平移后的图象中每个象素的颜色。例如我们想知道,新图中左上角点的RGB值是多少?很显然,该点是原图的某点经过平移后得到的,这两点的颜色肯定是一样的,所以只要知道了原图那点的RGB值即可。那么到底新图中的左上角点对应原图中的哪一点呢?将左上角点的坐标(0,0)入公式(2.2),得到x0=-tx ,y0=-ty;所以新图中的(0,0)点的颜色和原图中(-tx , -ty)的一样。这样就存在一个问题:如果新图中有一点(x1,y1),按照公式(2.2)得到的(x0,y0)不在原图中该怎么办?通常的做法是,把该点的RGB值统一设成(0,0,0)或者(255,255,255)。

4.2旋转

旋转(rotation)有一个绕着什么转的问题,通常的做法是以图象的中心为圆心旋转。在我们熟悉的坐标系中,将一个点顺时针旋转a角后的坐标变换公式,如下图所示,r为该点到原点的距离,在旋转过程中,r保持不变;b为r与x轴之间的夹角。

 

旋转前:x0=rcosb;y0=rsinb

旋转a角度后:

x1=rcos(b-a)=rcosbcosa+rsinbsina=x0cosa+y0sina;

y1=rsin(b-a)=rsinbcosa-rcosbsina=-x0sina+y0cosa;

以矩阵的形式表示:

 

上面的公式中,坐标系xoy是以图象的中心为原点,向右为x轴正方向,向上为y轴正方向。它和以图象左上角点为原点o’,向右为x’轴正方向,向下为y’轴正方向的坐标系x’o’y’之间的转换关系如何呢

 

设图象的宽为w,高为h,容易得到:

 

逆变换为:

 

理解了上述理论基础,其实在C#中我们有现成的方法函数进行操作,我们可以利用Graphics对象所生成的g.RotateTransform方法函数来对图像进行旋转操作。图像旋转后我们还需要将旋转所得到的图像填充到指定的矩形区域中,在这里我们使用了g.FillRectangle方法函数来进行填充。

private void panel2_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

       {

              this.panel2.Refresh();

              Graphics g = e.Graphics;

              int angel=Convert.ToInt16(this.numericUpDown4.Value);

              System.Drawing.Bitmap temp=new Bitmap(filepath);

              TextureBrush brush=new TextureBrush(temp);

              g.RotateTransform(flaot(angel));            g.FillRectangle(brush,0,0,this.ClientRectangle.Width,this.ClientRectangle.Height);

              return;

       }

 4.3缩放

假设放大因子为ratio,(为了避免新图过大或过小,我们在程序中限制0.25≤ratio≤4),缩放(zoom)的变换矩阵很简单:

 

由于放大图象时产生了新的象素,以及浮点数的操作,得到的坐标可能并不是整数,这一点我们在介绍旋转时就提到了。我们采用的做法是找与之最临近的点。实际上,更精确的做法是采用插值(interpolation),即利用邻域的象素来估计新的象素值。其实我们前面的做法也是一种插值,称为最邻近插值(Nearest Neighbour Interpolation)。下面先介绍线形插值(Linear Interpolation)。

线形插值使用原图中两个值来构造所求坐标处的值。举一个一维的例子。下图所示,如果已经知道了两点x0,x2处的函数值f(x0),f(x2),现在要求x1处的函数值f(x1)。我们假设函数是线形的,利用几何知识可以知道

f(x1)=(f(x2)-f(x0))(x1-x0)/(x2-x0)+f(x0)

在图象处理中需要将线形插值扩展到二维的情况,即采用双线形插值(Bilinear Intrepolation), 

线形插值的示意图

 

   双线形插值的示意图

已知a、b、c、d四点的灰度,要求e点的灰度,可以先在水平方向上由a,b线形插值求出g、c、d线形插值求出f,然后在垂直方向上由g,f线形插值求出e。

线形插值基于这样的假设:原图的灰度在两个象素之间是线形变化的。一般情况下,这种插值的效果还不错。更精确的方法是采用曲线插值(Curvilinear Interpolation),即认为象素之间的灰度变化规律符合某种曲线,但这种处理的计算量是很大的。

同样的,我们可以利用Graphics对象所生成的g.FillRectangle方法函数来对图像进行缩放操作。图像缩放后我们还需要将缩放所得到的图像填充到指定的矩形区域中,同样在这里我们使用了g.FillRectangle方法函数来进行填充。

private void panel2_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

       {

           this.panel2.Refresh();

              Graphics g = e.Graphics;

              float fx=(float)(this.numericUpDown1.Value/10);

              float fy=(float)(this.numericUpDown2.Value/10);

              System.Drawing.Bitmap temp=new Bitmap(filepath);

              TextureBrush brush=new TextureBrush(temp);

              g.ScaleTransform(fx,fy);

               g.FillRectangle(brush,0,0,this.ClientRectangle.Width,this.ClientRectangle.Height);

              checkscale=0;

       }

5 简单图像处理

5.1  黑白处理:

彩色图像黑白化处理通常有三种方法:最大值法、平均值法、加权平均值法
三种方法的原理
        最大值法:最大值法是每个像素点的RGB值等于原像素点的RGB值中最大的一个,即R=G=B=MAX( R,G,B ); 效果,最大值发产生亮度很高的黑白图像。
        平均值法:平均值法使每个像素点的RGB值等于原像素点的RGB值的平均值,即R=G=B=(R+G+B)/3 
        加权平均法:加权平均法根据需要指定每个像素点RGB的权数,并取其加权平均值,即R=G=B=(Wr*R+Wg*G+Wb*B )/3 。Wr、Wg、Wb表示RGB的权数,均大于零,通过取不同的权数可实现不同的效果。

  本程序中采用的是平均值法来处理图像:

private void menuItem20_Click(object sender, System.EventArgs e)

       {

           if(this.pictureBox1.Image!=null)

           {

              this.pictureBox2.Visible=true;

              int height=this.pictureBox1.Image.Height;

              int width=this.pictureBox1.Image.Width;

              Bitmap temp=new Bitmap(width,height);

              Bitmap process=(Bitmap)this.pictureBox1.Image;

              Color pixel;

              for( int x=0;x<width;x++)

              {

                  for(int y=0;y<height;y++)

                  {

                     int r,g,b,t;

                     pixel=process.GetPixel(x,y);

                     t=(pixel.R+pixel.G+pixel.B)/3;

                      r=t;

                     g=t;

                     b=t;

                     temp.SetPixel(x,y,Color.FromArgb(r,g,b));

                  }

              }

              this.pictureBox2.Image=temp;

           }

       }     

 

5.2  浮雕处理

浮雕效果就是只将图像的变化部分突出出来,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果,这里采用的算法是将要处理的像素取值为与处于对角线上的另一个像素间的差值,这样只有颜色变化区才会出现色彩,而颜色平淡区因差值几乎为零则变成黑色。

         private void menuItem21_Click(object sender, System.EventArgs e)

       {

           if(this.pictureBox1.Image!=null)

           {

              this.pictureBox2.Visible=true;

              int height=this.pictureBox1.Image.Height;

              int width=this.pictureBox1.Image.Width;

              Bitmap temp=new Bitmap(width,height);

              Bitmap process=(Bitmap)this.pictureBox1.Image;

              Color pixel,pixelnext;

              for( int x=0;x<width-1;x++)

              {

                  this.progressBar1.Value=(int)(((float)x/(float)width)*100);

                  for(int y=0;y<height-1;y++)

                  {

                 

                     int r,g,b;

                     pixel=process.GetPixel(x,y);

                     pixelnext=process.GetPixel(x+1,y+1);

                     r=pixel.R-pixelnext.R+128;

                     b=pixel.B-pixelnext.B+128;

                     g=pixel.G-pixelnext.G+128;

                     r=Judge(r);

                     g=Judge(g);

                     b=Judge(b);

                     temp.SetPixel(x,y,Color.FromArgb(r,g,b));

                  }

              }

              this.pictureBox2.Image=temp;

           }

5.2  反色处理

反色的实际含义是将R、G、B值反转。若颜色的量化级别是256,则新图的R、G、B值为255减去原图的R、G、B值。这里针对的是所有图,包括真彩图、带调色板的彩色图(又称为伪彩色图)、和灰度图。

private void menuItem22_Click(object sender, System.EventArgs e)

       {

           if(this.pictureBox1.Image!=null)

           {

              this.pictureBox2.Visible=true;

              int height=this.pictureBox1.Image.Height;

              int width=this.pictureBox1.Image.Width;

              Bitmap temp=new Bitmap(width,height);

              Bitmap process=(Bitmap)this.pictureBox1.Image;

              Color pixel;

              for( int x=0;x<width;x++)

              {

                  this.progressBar1.Value=(int)(((float)x/(float)width)*100);

                  for(int y=0;y<height;y++)

                  {

                     int r,g,b;

                     pixel=process.GetPixel(x,y);

                     r=255-pixel.R;

                     g=255-pixel.G;

                     b=255-pixel.B;

                     temp.SetPixel(x,y,Color.FromArgb(r,g,b));

                  }

              }

              this.pictureBox2.Image=temp;

           }

       }

6图象的轮廓提取

图像的边缘(轮廓)是图像最基本的特征。所谓边缘(或边沿)是指其周围象素灰度有阶跃 变化或“屋顶”变化的那些象素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间。因此,它是图像分割依赖的重要特征。

物体的边缘是由灰度不连续性形成的。经典的边缘提取方法是考察图像的每个象素在某个邻域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律,用简单的方法检测边缘。这种方法称为边缘检测局部算子法。如果一个象素落在图像中某一个物体的边界上,那么他 的邻域将成为一个灰度级的变化带。对这种变化最有用的2个特征:灰度的变化率和方向, 他们分别以梯度向量的幅度和方向来表示。边缘检测算子检查每个象素的邻域并对灰度变化率进行量化,也包括方向的确定。常用的检测算子有Roerts算子、Sobel算子、Prewitt 算子和 Kirsh 算子等。

我们给出一个模板 和一幅图象 。不难发现原图中左边暗,右边亮,中间存在着一条明显的边界。进行模板操作后的结果如下:

可以看出,第34列比其他列的灰度值高很多,人眼观察时,就能发现一条很明显的亮边,其它区域都很暗,这样就起到了边沿检测的作用。为什么会这样呢?仔细看看那个模板就明白了,它的意思是将右邻点的灰度值减左邻点的灰度值作为该点的灰度值。在灰度相近的区域内,这么做的结果使得该点的灰度值接近于0;而在边界附近,灰度值有明显的跳变,这么做的结果使得该点的灰度值很大,这样就出现了上面的结果。这种模板就是一种边沿检测器,它在数学上的涵义是一种基于梯度的滤波器,又称边沿算子,你没有必要知道梯度的确切涵义,只要有这个概念就可以了。梯度是有方向的,和边沿的方向总是正交(垂直)的,例如,对于上面那幅图象的转置图象,边是水平方向的,我们可以用梯度是垂直方向的模板 检测它的边沿。

例如,一个梯度为45度方向模板 ,可以检测出135度方向的边沿。

6 .1Sobel算子轮廓提取:

在边沿检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边沿的 ;另一个是检测垂直平边沿的 。与 相比,Sobel算子对于象素的位置的影响做了加权,因此效果更好。

Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的 ,另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。由于建筑物图像的特殊性,我们可以发现,处理该类型图像轮廓时,并不需要对梯度方向进行运算,所以程序并没有给出各向同性Sobel算子的处理方法。下面的两幅图中,下左图为原图;下右图为Sobel算子处理后的结果图。可以看出Sobel算子确实把图象中的边沿提取了出来。

                        

原图                                Sobel算子处理后的结果图

    由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。  在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。

6 .2阈值化提取:

阈值化(thresholding)可以看作是削波的一个特例,我们用下图说明阈值化的原理。

 

阈值化的原理

不难看出,只要令削波中的g1old=g2old就实现了阈值化。阈值就象个门槛,比它大就是白,比它小就是黑。经过阈值化处理后的图象变成了黑白二值图,所以说阈值化是灰度图转二值图的一种常用方法(我们以前介绍过图案化和抖动的方法)。进行阈值化只需给出阈值点g1old即可。一般情况下,阈值的选取对程序执行结果有很大的影响,在本程序中采取的是直方图求门限,迭代法求最佳阈值的方法,这个方法在数学上已被证明当图像像素概率分布逼近正态分布时是最佳的。阈值化处理后的结果,是一幅二值图像

 

阈值化处理后的结果

在这里,阈值的选取是很重要的,阈值如果过高,就会产生将图像主体误认为是背景的情况;阈值如果过低,则会将背景部分误认为是主体部分。因此,我们应该仔细选择阈值,我认为阈值不应该是一个固定的值,它的值应该随着图像的不同而不同。在本程序中,采取了动态求取阈值的方法。首先我们先求得被处理图像的灰度直方图,根据直方图求得最大灰度与最小灰度。我们设置阈值的初值为最大灰度与最小灰度值之和的一半。然后求得小于阈值部分灰度的平均值iMean1Gray和大于阈值部分的平均值iMean2Gray,将阈值重新设为这两个灰度均值 的一半,如此迭代,最后求得最佳阈值iThreshold。实验结果证明该阈值是可信的,基本上可以把主体与背景区分开来。求阈值的代码如下:

for(Times=0;Times<128&&iThreshold!=iNewThreshold;Times++)

           {

               iThreshold=iNewThreshold;

              lP1=0;

              lP2=0;

              lS1=0;

              lS2=0;

              for(i=iMinGray;i<iThreshold;i++)

              {

                  lP1+=Histogram[i]*i;

                  lS1+=Histogram[i];

              }

              iMean1Gray=lP1/lS1;

              for(i=iThreshold;i<iMaxGray;i++)

              {

                  lP2+=Histogram[i]*i;

                  lS2+=Histogram[i];

              }

              iMean2Gray=lP2/lS2;

              iNewThreshold=(iMean1Gray+iMean2Gray)/2;

          }

6 .3  Robert算子轮廓提取

Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子

 

                     Robert算子轮廓提取结果

可以看出,图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内 产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。

private void menuItem23_Click(object sender, System.EventArgs e)

       {

           if(this.pictureBox1.Image!=null)

           {

              this.pictureBox2.Visible=true;

              int height=this.pictureBox1.Image.Height;

              int width=this.pictureBox1.Image.Width;

              Bitmap temp=new Bitmap(width,height);

              Bitmap process=(Bitmap)this.pictureBox1.Image;

              int i,j,p0,p1,p2,p3;

              Color [] pixel=new Color[4];

              int result;

              for(j=height-2;j>0;j--)

              {

                  for(i=0;i<width-2;i++)

                  {

                      pixel[0]=process.GetPixel(i,j);

                     pixel[1]=process.GetPixel(i,j+1);

                     pixel[2]=process.GetPixel(i+1,j);

                     pixel[3]=process.GetPixel(i+1,j+1);

                     p0=(int)(0.3*pixel[0].R+0.59*pixel[0].G+0.11*pixel[0].B);

                     p1=(int)(0.3*pixel[1].R+0.59*pixel[1].G+0.11*pixel[1].B);

                     p2=(int)(0.3*pixel[2].R+0.59*pixel[2].G+0.11*pixel[2].B);

                     p3=(int)(0.3*pixel[3].R+0.59*pixel[3].G+0.11*pixel[3].B);

                     result=(int)Math.Sqrt((p0-p3)*(p0-p3)+(p1-p2)*(p1-p2));

                     if (result>255)

                         result=255;

                     if (result<0)

                         result=0;

                     temp.SetPixel(i,j,Color.FromArgb(result,result,result));

                  }

              }

              this.pictureBox2.Image=temp;

           }

       }

6程序运行

6 .1 程序运行主界面

 

6 .2 相关功能介绍

在文件菜单下,可以实现图像的打开,保存,程序的退出等功能。

 

编辑菜单下可以将操作结果栏的图像复制到缓存中

 

视图菜单下可实现程序的所有图像处理功能,并可以将被处理图像转换为源图像。

 

窗口栏可将操作结果的图像关闭。

 

程序处理图像的结果如下图所示,左边为被处理图像,右边为处理结果图像。

 

结  论

数字图像处理主要研究的内容有以下几个方面: (1) 图像变换 由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。(2) 图像编码压缩 图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。(3) 图像增强和复原图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立"降质模型",再采用某种滤波方法,恢复或重建原来的图像。(4) 图像分割 图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一,这个同时也是本设计的重中之重。(5) 图像描述 图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。对于特殊的纹理图像可采用二维纹理特征描述.(6) 图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视

2017-06-20 10:02:58 han784851198 阅读数 384
  • 反走样绘图

    本阶段主要带领同学们完成以下几个方面的学习:文件、目录、输入输出、典型案例演示,QT自定义外观设计、样式表设计与实现、绘制模式、典型案例演示,XMl原理、接口设计、SAX、DOM等,数据库基本原理、Sqlite、mysql...

    8人学习 李浩林
    免费试看

一.图像的Canny算计运用与角点检测

1.1代码详解

# 角点检测
def work01():
    img = ndimage.imread('flower.jpg', 'L')#这里是你图片的路径
    img1 = feature.canny(img, low_threshold=100, high_threshold=200)
    plt.imshow(img1), plt.gray(), plt.show()
    dst = cv2.cornerHarris(img, 3, 5, 0.04)
    dst = cv2.dilate(dst, None)
    # Threshold for an optimal value, it may vary depending on the image.
    # cv2.imshow('dst', img)
    img[dst > 0.01 * dst.max()] = [255]
    plt.imshow(img), plt.gray(), plt.show()

1.2 边缘检测结果

这里写图片描述

1.3 角点检测结果

这里写图片描述

二.利用霍夫变换的直线检测

2.1 代码详解

#直线检测
def work02():
    img = misc.face()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = img
    edges = cv2.Canny(gray, 50, 150, apertureSize=3)
    minLineLength = 300
    maxLineGap = 10
    lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, minLineLength, maxLineGap)
    for x1, y1, x2, y2 in lines[0]:
        cv2.line(img, (x1, y1), (x2, y2), (0), 2)
    plt.imshow(img), plt.gray(), plt.show()

2.2 结果

这里写图片描述

三.利用霍夫变换的原的检测

3.1 代码详解

#圆环检测
def work03():

    gray = misc.face(gray=True)
    circles = cv2.HoughCircles(gray,cv.CV_HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=10,maxRadius=50)
    #这里的参数设置minRadius 和 maxRadius为检测的半径范围
    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        # draw the outer circle
        cv2.circle(gray, (i[0], i[1]), i[2], (0, 255, 0), 2)
        # draw the center of the circle
        cv2.circle(gray, (i[0], i[1]), 2, (0, 0, 255), 3)

    plt.imshow(gray),plt.gray(),plt.show()

3.2 结果

这里写图片描述

图像处理与识别

阅读数 9012