机器视觉(图像处理)入门经典之图像数字化及处理方法
声明:内容大部分从某文档中搬砖过来,部分自己理解的标注。最开始接触相关内容的文档只是为了个人学习,顺便做个笔记,我之所以将此文档搬运到博客上是因为我觉得它很有用(对于基础)想借此分享给大家学习。
图像的数字化
一般的图像(模拟图像)不能直接用计算机来处理,必须首先转化为数字图像
把模拟图像分割成一个个称为像素的小区域,每个像素的亮度或灰度值用一个整数表示
数字化的含义:
使模拟图像的灰度、亮度和色彩数据化
图像数字化的步骤:
两个步骤:
1、在空间坐标对图像离散化——图像采样
2、在幅度上离散化——灰度级量化(取整)
图像采样示意图:
也就是在xy轴上(空间坐标)将完整的一幅图像定义在从某些位置上“拆解”(离散)成最小单位即像素快,用坐标(x,y)表示像素点之间的位置关系。
将虚拟图像转换为数字图像是为了达到计算机进行处理的目的。虚拟图像转换为数字图像的方式就是把虚拟图像由像素点来表示。
数字图像,它是由像素点(图像的最小单位)构成的,每个像素点表示着一个灰度值在平面坐标系上矩阵排布,这些灰度值按照一定的关系组合在一起形成了图像。至此,既然图像的操作单元以及它的排布关系已经确定了,那么就可以通过计算机对其计算处理。
为什么是灰度?
这个问题我最早也困惑为什么不是红度?绿度?蓝度?,后来想想无论红的绿的蓝的黑的都可以,确定图像完全可以由任意颜色的0~255之间的值来表示。偏向于灰度可能是因为灰的极端为黑白两种鲜明的对比色也或许是因为早期的成像都是黑白。
灰度值量化
经过采样,模拟图像已在空间上离散化为像素,但抽样所得的像素值仍是连续量(非整数),必须将其化为正整数——灰度级的量化。
若抽样点(橡素)的连续浓淡值为Zi ,Zi-1 <= Zi < Zi+1,则Zi = qi,即Zi量化为整数qi,qi称为像素的灰度值
(所谓量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。经过抽样的图像,只是在空间上被离散成为像素(样本)的阵列。而每个样本灰度值还是一个由无穷多个取值的连续变化量,必须将其转化为有限个离散值,赋予不同码字才能真正成为数字图像。这种转化称为量化。)
一般,灰度图像常量化为8位图像。
数字图像数据量的计算
抽样点数越多,图像像素数目越多,图像数据量越大
量化级别越高,图像每个像素所占用的字节越长,图像数据量越大。
一幅数字图像的总数据量可用公式计算:
数据量=M*N*b
M——每行像素量
N——每列像素量
b——灰度量化所占用的位数或字节数
例如:一幅8位灰度图像,大小为512*512,其数据量多大?
512*512*8bit = 512*512*1k = 512*512 / 1024 = 256 kb
数字图像处理的实质:
通过对数字图像中像素数据的判断,依据处理或识别要求,最后逐个修改像素的灰度值。
数字图像的数据以矩阵形式排列
一幅M*N个像素的数字图像,其像素灰度值的排列实际形成了一个M行N列的矩阵F,数字图像中的像素与矩阵元素是一 一对应的
矩阵可用二维数组来表示
一个M*N像素的矩阵,在算法语言中,可以用一个M*N的二维数组来表示。
此后对像素的处理就代之以对数组元素的处理,很容易用计算机来实现。
如何用高级语言实现图像处理?
在图像处理中,一般都是顺序完成对整幅画面的存取和处理操作的,具有代表性的是以光栅扫描方式——逐行逐列存取与处理。
若数字图像的大小为M*N(width*height)个像素,数组元素灰度值为 f(x,y),则C语言处理程序的基本框架为:
从程序显而易见,计算机处理数字图像是从每个像素点逐个处理。
二值化处理的程序(一个CVI例子程序)
程序逐个判断像素点的pixel_value > Th ? 如果为true 设置此像素点的灰度值为255,为false设置此像素点的灰度值为0,由此处理后的图像会呈现黑白鲜明的对比。
处理结果:
图像处理的方法多种多样,从实现处理的过程看有两类:空域处理 和 频域处理。
空域:即空间域,指灰度图像本身,图像是一种灰度在二维空间变化的信息。
空域处理:对源图像像素的灰度值直接运算,生成新的图像,被操作者是像素的灰度值。
空域处理可分为以下几种方式:
点处理
区域处理
迭代处理
跟踪处理
点处理:是指输出像素值仅取决于对应输入像素的像素值。
若输入像素灰度值为f(x,y),
输出像素灰度值为g(x,y),
则g(x,y) = ▲f(x,y) ,
▲代表某种函数关系式。
点处理的典型用途:
调整图像的灰度分布,如灰度变换(线性、非线性)和灰度修正;
图像的二值化;
图像反色;
点处理方法的优点:
可用LUT方法快速实现;
区域处理——领域处理
算法:
根据输入图像某像素f(x,y)的一个小领域N(f(x,y))的像素值,按某种函数关系▲得到输出像素g(x,y)的值,即g(x,y)=▲(N(f(x,y)))
区域处理中的领(区)域的形状
领域N(f(x,y))的形状是多种多样的;实用中多采用以像素(x,y)为中心的矩形对称领域如3*3、5*5等
领域越大,计算量越大,若图像大小为M*N,领域为K*L,则领域处理时总计算量为M*N*K*L。
领域处理的用途
图像的平滑(滤波)
图像的锐化(增强)
图像的形态学处理等
迭代处理:
迭代是指反复进行某种处理运算。
迭代处理多用于图像细化、图像增强、图像平滑及边缘探测等方面。
跟踪处理:
跟踪处理一般用于图像边界、边缘的提取,以便进行图像的分割、识别及特征参数的计算。
边缘提取的原理在于判断目标里外两像素点灰度值差,若差大于某个特定值即可断定这个像素点的位置为目标边缘。
图像处理方法二:频域处理
为什么要采用频域处理?
灰度图像的边缘、线条——高频成分
其余部分灰度值改变不大——低频成分
观察图像的高频和低频成分。因此采用频率分析——变换方法有利于对图像进行特征提取及图像增强的处理。
图像在频域上处理的一般过程:
频域处理是建里在修改图像傅里叶变换基础之上的——增强感兴趣的频率分量,然后将修改后的傅里叶变换直再做逆傅里叶变换,以得到增强的图像,一般过程: