数字图形处理一

Digital Image Processing

  1. 图形和图像的区别

    图形是由指令集构成,指令就是命令,由 位置 形状,颜色等进行描述 。记录和显示的是坐标,颜色是隐含的 。 moveTo lineTo 等。。

    图像 更加直观,坐标是隐含的,显示的是颜色值 。
    《计算机图形学》《计算机图像处理学》
  1. 图像空间分辨率

    指图像数字化的空间精细成都,

  2. 灰度级分辨率

    即颜色深度,每一像素颜色值锁占的二进制位数,颜色深度越大,标识颜色的数目越多

  3. 数字图像处理的目的

    图像降噪,改变亮度颜色,增强或者抑制某些成分,几何变换,进而改善图像质量。

  4. 一般的图像处理流程

    1. 预处理(统一大小等)
    2. 图像分割 (边缘检测,区域分割等)
    3. 特征提取
    4. 图像识别
    5. 图像分析

1. 图像的灰度化处理

在图像处理中,灰度化是一种很常用的图片处理手段 。

方法1:求出每个像素点的RGB三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量

方法2:求RGB和YUV颜色空间的变化关系,建立亮度Y与RGB三个颜色分量的对应关系:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。OpenCV的cvtColor函数,可以直接完成灰度化操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 1 ; i < src.rows; i++) {

for (int j = 1 ; j < src.cols; j++) {

int b = src.at<Vec3b>(i , j)[0];
int g = src.at<Vec3b>(i , j)[1];
int r = src.at<Vec3b>(i , j)[2];

uchar gray = 0.11f*r + 0.59f*g + 0.30f*b;

src.at<Vec3b>(i , j)[0] = gray;
src.at<Vec3b>(i , j)[1] = gray;
src.at<Vec3b>(i , j)[2] = gray;
}
}

2. 图像的二值化

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for (int i = 1; i < src.rows; i++) {
for (int j = 1; j < src.cols; j++) {

int b = src.at<Vec3b>(i ,j)[0];
int g = src.at<Vec3b>(i ,j)[1];
int r = src.at<Vec3b>(i ,j)[2];

if (b > 100) {
src.at<Vec3b>(i ,j)[0] =255;
} else {
src.at<Vec3b>(i ,j)[0] = 0;
}

if (g > 100) {
src.at<Vec3b>(i ,j)[1] =255;
} else {
src.at<Vec3b>(i ,j)[1] = 0;
}

if (r > 100) {
src.at<Vec3b>(i ,j)[2] =255;
} else {
src.at<Vec3b>(i ,j)[2] = 0;
}
}
}

3. 图形变换基础

平移,比例缩放,旋转,镜像

齐次坐标表示法: 用N+1维向量标识N维向量的方法 ,(x,y)投影在 xyz三维立体空间的
z=1的平面上 。

4. 图像增强和灰度变换

利用 点运算

输入图像 f(x,y) 输出图像 g(x,y) , gx = T(f(x,y)) 。

不改变空间和位置,逐点运算进行转换。

点运算 又称为 对比度增强,对比度拉伸,灰度变换 。

  1. 线性变换

    输入和输出呈线性比例关系,g(x,y) = T(f(x,y)) = a f(x,y) + b

    a > 0 输出图像对比度增大 ,a < 0 输出图像对比度减小

    a=1 ,b ≠ 0 ,灰度值上下移,对应变亮或者变暗

    a < 0 相反的,亮变暗,暗变亮

5. 平滑处理的概念

  1. 线性平滑

    每一个像素的灰度值用它的邻域值代替,邻域为 n✖️n (n取奇数)
  2. 非线性平滑
    取一个阈值,当像素与邻域平均值之间的差大于阈值已均值代替,否则不变
  3. 自适应平滑

6. 图像去噪和添加椒盐噪声

二值图像的去噪

用3✖️3的模板进行均值滤波,当f(x,y)周围的8个像素平均值为 a 时候

若 |f(x,y) -a | > 127.5 则对f(x,y)进行黑白翻转,否则不变

  1. 邻域平均法:

    算法简单,计算速度快,但是会造成一定程度的模糊

    改进: 选择邻域的大小,形状,方向,
  2. 邻域加权平均法

    将模板系数与对应像素的灰度值相乘,将所有乘积累加,用所得结果代替原中心像素。
    <例如:高斯离散模板>
  3. 超限邻域平均法
    给定一个灰度值作为阈值,如果像素点大于邻域8个像素平均值并且超过了阈值,用平均灰度替换。

N✖️N均值滤波器: f(x,y)为中心的 N✖️N的窗口,当平均灰度为a时,f(x,y) = a。
N 越大,那么噪声消除越明显 。 均值滤波器以图像的模糊为代价 。

  1. 均值滤波法

    对n✖️n的窗口进行取平均数

  2. 中值滤波法

    对n✖️n的窗口进行排序,取中间值 . 对椒盐噪声有很好的效果

6. 图像边缘锐化

锐化的基本方法 :

  1. 微分运算
  2. 边缘检测
  3. 梯度锐化

锐化的目的:

  1. 增强边界信息
  2. 提取物体边界

单向微分运算:

纵向: G(i,j) = f(i,j) - f(i-1,j)

横向: G(i,j) = f(i,j) - f(i,j-1)

双向微分,同时增强两个方向的边缘:

G(i ,j) = sqrt { [f(i,j) - f(i-1,j) * f(i,j) - f(i-1,j)] + [f(i,j) - f(i,j-1) * f(i,j) - f(i,j-1) ] }

通常情况下,边缘上的灰度变化平缓,而边缘两侧灰度变化较快。一般是亮度变化最显著的部分。

高斯拉普拉斯算子,是更好的边缘检测,把高斯平滑器和拉普拉斯锐化结合起来,先平滑掉噪声,再进行边缘检测。

7. 图像边缘检测

7. 图像阈值分割

  1. 直方图门限选择
  2. 迭代阈值分割

阈值选择:
可通过输出直方图来确定。 假设只有背景和物体组成,那么直方图灰度具有明显的双峰值。 - 找到谷底即可

8. 形态学基本概念

腐蚀,膨胀,

开运算 - 先腐蚀后膨胀

闭运算 - 先膨胀后腐蚀

细化,粗化,中轴变换