最近在搞opencv来做一些简单的图像识别,既然涉及到图像识别,那么首先我们要把图像重新认识一下,大部分人看到一张照片可能就是单纯的一张照片,在一些做图像处理的人的眼中,可不就这么简单了。
计算机图形的分类
(1)位图(Bitmap)
也叫做点阵图,删格图象,像素图,简单的说,就是最小单位由象素构成的图,缩放会失真。构成位图的最小单位是象素,位图就是由象素阵列的排列来实现其显示效果的,每个象素有自己的颜色信息,在对位图图像进行编辑操作的时候,可操作的对象是每个象素,我们可以改变图像的色相、饱和度、明度,从而改变图像的显示效果。举个例子来说,位图图像就好比在巨大的沙盘上画好的画,当你从远处看的时候,画面细腻多彩,但是当你靠的非常近的时候,你就能看到组成画面的每粒沙子以及每个沙粒单纯的不可变化颜色
(2)矢量图(Vector)
也叫做向量图,简单的说,就是缩放不失真的图像格式。矢量图是通过多个对象的组合生成的,对其中的每一个对象的纪录方式,都是以数学函数来实现的,也就是说,矢量图实际上并不是象位图那样纪录画面上每一点的信息,而是纪录了元素形状及颜色的算法,当你打开一付矢量图的时候,软件对图形象对应的函数进行运算,将运算结果[图形的形状和颜色]显示给你看。无论显示画面是大还是小,画面上的对象对应的算法是不变的,所以,即使对画面进行倍数相当大的缩放,其显示效果仍然相同[不失真]。举例来说,矢量图就好比画在质量非常好的橡胶膜上的图,不管对橡胶膜怎样的常宽等比成倍拉伸,画面依然清晰,不管你离得多么近去看,也不会看到图形的最小单位。
两者的优缺点:
位图的好处是,色彩变化丰富,编辑上,可以改变任何形状的区域的色彩显示效果,相应的,要实现的效果越复杂,需要的象素数越多,图像文件的大小[长宽]和体积[存储空间]越大。
矢量的好处是,轮廓的形状更容易修改和控制,但是对于单独的对象,色彩上变化的实现不如位图来的方便直接。另外,支持矢量格式的应用程序也远远没有支持位图的多,很多矢量图形都需要专门设计的程序才能打开浏览和编辑。
常用的位图绘制软件有adobe photoshop、corel painter等,对应的文件格式为[.psd .tif][.rif]等,另外还有[.jpg][.gif][.png][.bmp]等。
常用的矢量绘制软件有adobe illustrator、coreldraw、freehand、flash等,对应的文件格式为[.ai .eps][.cdr][.fh][.fla/.swf]等,另外还有[.dwg][.wmf][.emf]等。
矢量图可以很容易的转化成位图,但是位图转化为矢量图却并不简单,往往需要比较复杂的运算和手工调节。
矢量和位图在应用上也是可以相互结合的,比如在矢量文件中嵌入位图实现特别的效果,再比如在三维影象中用矢量建模和位图贴图实现逼真的视觉效果等等。
这两种图形都被广泛应用到出版,印刷,互联网[如flash和svg]等各个方面,他们各有优缺点,两者各自的好处几乎是无法相互替代的,所以,长久以来,矢量跟位图在应用中一直是平分秋色。
数字图像的分类
数字图像,是二维图像用有限数字数值像素的表示。通常,像素在计算机中保存为二维整数数组的光栅图像,这些值经常用压缩格式进行传输和储存。
数字图像可以许多不同的输入设备和技术生成,例如数码相机、扫描仪、坐标测量机、seismographic profiling、airborne radar等等,也可以从任意的非图像数据合成得到,例如数学函数或者三维几何模型,三维几何模型是计算机图形学的一个主要分支。数字图像处理领域就是研究它们的变换算法。
每个图像的像素通常对应于二维空间中一个特定的’位置’,并且有一个或者多个与那个点相关的采样值组成数值。根据这些采样数目及特性的不同数字图像可以划分为:
(1)二值图像:
图像中每个像素的亮度值(Intensity)仅可以取自0或1的图像,因此也称为1-bit图像。
(2)灰度图像:
也称为灰阶图像: 图像中每个像素可以由0(黑)到255(白)的亮度值(Intensity)表示。0-255之间表示不同的灰度级。
(3)彩色图像 (Color image):
彩色图像主要分为两种类型,RGB及CMYK。其中RGB的彩色图像是由三种不同颜色成分组合而成,一个为红色,一个为绿色,另一个为蓝色。而CMYK类型的图像则由四个颜色成分组成:青C、品M、黄Y、黑K。CMYK类型的图像主要用于印刷行业。
(4)假彩色图像
(5)多光谱图像(Multi-spectral) thematic
(6)立体图像:
立体图像是一物体由不同角度拍摄的一对图像,通常情况下我们可以用立体像计算出图像的深度信息。
(7)三维图像:
三维图像是由一组堆栈的二位图像组成。每一幅图像表示该物体的一个横截面。
常见的图像术语
(1)像素:
每张图片都是由色点组成的,每个色点称为一个像素。一张图片由30万个色点组成,这个图片的像素就是30W。我们常说相机是多少像素,这个像素就是说这款照相机的感器件有多少个,有100W个感光器件的相机就是100W像素的相机,有4000W个感光器件的相机就是4000W像素,以此类推。一台100W像素的相机拍摄的照片洗成5寸的照片会比洗成6寸清晰一点。
(2)图像分辨率:
图像分辨率是指每英寸图像内的像素点数。图像分辨率是有单位的,叫 像素每英寸。分辨率越高,像素的点密度越高,图像越逼真(这就是为什么做大幅的喷绘时,要求图片分辨率要高,就是为了保证每英寸的画面上拥有更多的像素点)。
(3)屏幕分辨率:
屏幕分辨率是屏幕每行的像素点数*每列的像素点数,每个屏幕有自己的分辨率。屏幕分辨率越高,所呈现的色彩越多,清晰度越高。
图像处理的一些降维手段
在图像识别领域,我们操作的基本都是位图,通常情况下,我们手机拍出来的照片我们称为彩色图像也称为:RGB图像,它既包含了颜色也包含了色彩强度(也可以成为亮度),反映到计算机里面,彩色图像是由3个维度组成:[ x,y,(R,G,B) ]其中R,G,B的每一个取值都可以是0-255之间的任意一个整数,所以我们称彩色图片是三维矩阵(matrix)= x * y * 3
在图像处理领域,通常在拿到一张彩色图片后,第一步基本都是先做灰度(grayscale),灰度图像,我们可以理解为它去掉了彩色图片中的颜色,只留下的色彩强度(也可以成为亮度) ,这样以来就变成了一个二维矩阵 = x * y * 1 组成是: [x,y,(0-255)]。
灰度是指黑白图像中点的颜色深度,范围一般从0到255,白色为255 ,黑色为0,故黑白图片也称灰度图像,在医学、图像识别领域有很广泛的用途,比如医学的X光,磁共振,CT出来的胶片都属于灰度照片。
彩色图片转灰度照片的几种方法:
1.浮点算法:Gray=R*0.3+G*0.59+B*0.11
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*28+G*151+B*77)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
在做过灰度之后,下一步就是做二值化进一步简化色彩,整个图片只能有有黑白两种颜色,它仍然属于二维矩阵=x * y * 1 组成是: [x,y,(0 or (1 or 255))]。注意0代表黑色,1和255代表白色,灰度图片转为二值图片,非常简单就是把像素里面的亮度小于某一个阈值(通常是127)设置成0,大于127的转化为255通常用1代替。
这里看出来的基本思想就是降维,在图片降维后,它的处理复杂度变得更小,更有利于我们找图像的梯度或者特征值,当然并不是所有的图片处理都要这么做,也分场景。
总结:
本文介绍了计算机图形处理的相关基础知识,如图形的种类,数字图像的分类,处理图片的一些降维手段以及RGB图像与灰度和二值化的图像的区别,了解这些之后对于我们处理图像会有很大帮助,从而做到知其然也要知其所以然。
参考链接:
https://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F
https://zh.wikipedia.org/wiki/%E7%9F%A2%E9%87%8F%E5%9B%BE%E5%BD%A2
https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%9B%BE
http://www.cnblogs.com/areliang/archive/2006/04/29/388769.html
https://www.quora.com/Does-grayscale-image-means-1-dimensional-image
https://www.quora.com/What-is-the-difference-between-a-binary-image-and-a-gray-scale-image