数字图像处理的发展是一个很漫长的过程,在现在我就跟大家分享一下大神们是怎么一步一步把我们见到的东西转换成数据保存起来并进行相应的处理的。
什么是图像处理
概念:
数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程,以提高图像的实用性从而达到人们所要求的预期效果
数字化的含义:
把模拟图像转换成数字图像的思路
- 使模拟图像点阵化
- 使色彩数据化
从上图的思路可以得出,如果我们把图像分割成由一个个小方块组成的,那么就可以通过记录二维数组的小方块的颜色值来保存一张图像数据.
数字图像的形成
为了对图像进行分割,我们采取了两种方式进行数据化
- 采样
把图像分割成像素进行采样对连续的2D信号(图像)进行采样,我们将依据预先定义的行数和列数得到一个完整的二维信号数组。给定行和列相交处的点(元素)称为像素。采样原始图像是一个有损操作,因为采样后像素的颜色变成了一种,采样图像的质量取决于预设的采样水平。
不同采样数量对图像质量的影响
由此可见:
采样数量越多,图像显示的细节越明显,图像更清晰,数据存储所需要的空间也就越大.
- 量化
把像素点的灰度值量化成数字 不同量化级别对图像质量的影响把抽样后所得的连续量表示的象素值离散化为整数值的操作。
由此可见:
量化值越多,图像的灰度变化更有层次,明暗效果更接近现实.同样的,存储的数据相对较多
彩色图像的量化
彩色像素可以分割成红,绿,蓝三种颜色的组合而成的颜色,而这三种颜色可以分别做灰度值的量化,因此彩色像素可以由三种灰度值组成
三基色
把图像转换成数字
既然从理论上可以实现把图片转换成数字,那么我们就开始实践起来,上面我们可以分析出:
图像 = 像素 的矩阵集合
像素由所处的 位置 和 颜色 组成
位置可以对应到坐标轴上,每一个点对应一个横坐标x和一个纵坐标y
函数表示
f(x, y)
组数表示
把像素对应到坐标轴上[x, y]
彩色=>拆分成红绿蓝通道=>量化成灰度梯度
灰度梯度: 0~255 = 0~2^8 = 1个字节
红: 2^8 = 0xFF
绿: 2^8 = 0xFF
蓝: 2^8 = 0xFF
因此:
1个真彩色像素
= 红 * 绿 * 蓝 = 2^32 = 0xFFFFFF = 3个字节
一张 1920 * 1080的真彩色照片占用的空间资源
= 1920 * 1080 * 3 / 1024 / 1024
= 5(M)
一张照片5M这么大,对于数据存储和数据传输是很大的一个数据量,所以为了解决这个问题,大神们也是想尽一切办法,在保证图片尽量不失真的情况下把图像的体积尽可能的减小,这里就延伸到图片压缩的内容.这里不展开细讲.
用代码去实现
既然理论和数据模型可以实现,那接下来就是代码上的实现了,以php为例,我们可以把颜色,像素,图片写成类.
颜色由红绿蓝三种颜色组成,红绿蓝这三种颜色分别表示0-255中的某个数值
class Color {
$red;
$green;
$blue;
......
}
点由x轴,y轴和颜色组成
class Dot {
$x;
$y;
$color;
......
}
图片由多行和多列的点组成,假如图片的宽度是点的列数,高度是点的行数,那么可以写成图片由宽,高和点组成
class Image {
$width;
$height;
$dot;
......
}
图像处理的方法
把图像数字化后,下一步就是对其进行分析处理,图像处理的方法多种多样,从实现处理的过程 看有两类:
- 空域处理
空域:即空间域,指灰度图像本身,图像是一种灰度 在二维空间变化的信息
空域处理:对源图像像素的灰度值直接运算,生成新的图像,被操作者是像素的灰度值。
空域处理有几下几类:
- 点处理
- 区域处理
- 迭代处理
- 跟踪处理
点处理:
指输出像素值仅取决于对应输入像素的像素值。
若输入像素灰度值为
f (X, y)
输出像素灰度值为
g (x, y)
则
g (x, y) = &f (x, y)
&代表某种函数关系。
点处理
点处理的典型用途:
调整图像的灰度分布和灰度修正
图像的二值化
图像反色
邻域处理
根据输入图像某像素f (x, y)的一个小邻域N(f(x,y))的像素值,按某种函数关系&N得到输出像素g (x, y)的值,即
邻域处理g(x, y) = &(N(f(x, y)))
邻域N (f(X,y))的形状是多种多样的,实用中多采用以像素f(x, y)为中心的矩型对称邻域如3x3、5x5等
邻域越大,计算量越大,若图像大小为M x N,邻域为 K x L,则邻域处理时总计算量为M x N x K x L
邻域处理的用途
图像的平滑(滤波)
图像的锐化(增强)
图像的形态学处理
迭代处理
迭代是指反复进行某种处理运算。
迭代处理多用于图像细化、图像增强、图像平滑及边 缘探测等方面。
迭代处理-字体细化
跟踪处理:
跟踪处理一般用于图像边界、 像的分割、识别及特征参数的计算。
image.png
频域处理
以上的都是空域处理,下面介绍频域处理.
图像是空域上的分布信息,若将图像进行二维正交变换(如傅立叶变换),则输入图像的二维灰度分布就 变换为对应的二维空间频率域中的频谱,对图像频谱进行的处理就称之为图像在频域上的处理。
傅里叶变换后生成的频谱
为什么要采用频域处理?
灰度图像的边缘、线条——高频成分
其余部分灰度值改变不大——低频成分
因此采用频率分析有利于对图像进行特征提取及图像增强的处理。
频域处理是建立在修改图像傅立叶变换基础之上的,増强感兴趣的频率分量,然后将修改后的傅立叶变换值再做逆傅立叶变换,以得到增强的图 像,一般过程如图所示。
频域处理的流程
图片处理工具
针对各种开发语言,有各种图片处理的工具,有以下几种可以参考下
Open CV
Matlab
imagick
gd(php)
canvas(h5)
网友评论