其他分享
首页 > 其他分享> > 数字图像处理——第二章 数字图像基础

数字图像处理——第二章 数字图像基础

作者:互联网

数字图像处理——第2章 数字图像基础

文章目录

2.1 视觉感知要素

关于颜色

人类视觉的产生,除了光源对眼睛的刺激,还需要人脑对光刺激的解释。人感受到的物体的颜色主要取决于反射光的特性。如果物体比较均衡的反射各种光谱,则看起来是白色的。如果物体对某些光谱反射得较多,则看起来物体就呈现相对应的颜色。

关于颜色的主观感觉

人类视觉对颜色的主观感觉有三种:色调、饱和度和亮度。
色调:从一个物体反射过来的或透过物体的光波长,是由颜色种类来辨别的,如红、橙、绿。
饱和度:即色纯度,指颜色的深浅,例如:深红和浅红。
亮度:颜色的明暗程度,从黑到白,主要受光源强弱影响。

2.2 光和电磁波谱

接上述知识,没有颜色的光称为单色光无色光。单色光的唯一属性是它的强度或大小。因为感知单色光的强度从黑色到灰色变化,最后到白色,灰度级一词通常用来表示单色光的强度。在后续讨论中,我们将交替地使用强度和灰度级这两个术语。从黑到白的单色光的度量值范围通常称为灰度级,而单色图像常称为灰度图像。可以用彩色图像转化为灰度图像,例如使用最简单的平均法,将同一个像素位置3个通道RGB的值进行平均。
caX7pF.jpg

2.3 图像感知和获取

2.4 图像取样和量化

为了产生幅数字图像,我们需要把连续的感知数据转换为数字形式。这种转换包括两种处理:取样和量化。

2.4.1 取样、量化和空间、灰度分辨率

此处和下文空间、灰度分辨率对应。取样对应空间分辨率;量化对应灰度分辨率。所以四个概念一并总结。

取样:图像空间坐标的离散化,决定了图像的空间分辨率。下图通俗理解,单位面积上的感受器数量(那些10×10、20×20的小网格)决定图像的分辨率,随着水平和垂直感受器数量的增加(10×10–>20×20),分辨率就变高,图像也越清晰,反之则会更模糊。

cUsiTK.jpg

采用cv2.resize函数对图片测试,便能看出模糊与清晰的效果:

cUsNXn.jpg

量化:一个像素点用多少位来表示,位数越高,能表示的颜色越多。如下图所示,绿块表示一个像素点,量化等级越多(2bit–>3bit),所得图像层次越丰富。

cUy4rn.jpg

同样,也展示下效果

cajP6H.jpg

2.4.2 数字图像表示

这部分总结点书上不一样的更实际有助于理解的东西。明白图片的坐标在哪,这对图片的前景目标的定位很重要。例如目标检测中某个object的坐标为(100, 500),你得清楚哪个是w,哪个是h,然后原点O在哪,不然没办法将框画回去。直接上结论:

cU2dFP.jpg

怎么来的?用PIL验证一下,拖动下能看出左上角才是原点O

caja3F.jpg

关于更多的图像表示可看上篇博客,跳转到1.1 图像、像素及数字图像处理

2.4.3 图像内插

图像缩放算法往往基于插值实现,常见的图像插值算法包括最近邻插值、双线性插值、双三次插值等等,本章没有具体介绍各种插值算法的细节,我们将在第四章进行详细的总结。值得一提的是,之前了解过Mask R-CNN算法,其中RoIAlign中使用的便是双线性插值。所以说深度学习大法虽好,但算法中也常见到基本的图像处理算法,所以基础课程确实得好好学习。

2.5 像素间的一些基本关系

2.5.1 相邻像素

相邻像素有三种邻域表示,设定像素点p的坐标为(x, y),则p的4邻域,p的对角邻域、p的8邻域如下:其中p的4邻域可写成N4( P )。

caYrod.jpg

我倒是觉得清楚这些概念有利于后面理解卷积的过程。能更好的理解空洞卷积.

2.5.2 邻接性和相邻的关系

上述邻域的关系,相邻只是像素间物理位置(x, y)上的关系,和像素值无关。再加上像素值(f(x, y))这个变量,就构成像素的其他关系。

比如邻接性要有两个要素:一个是灰度值的邻接性(二值图像中,像素值都为1(或都为0)的像素)、一个是物理位置的邻接性(邻域,如N4( P )等)。所以邻接便有4邻接和8邻接,m邻接。

2.5.3 距离度量

(1). 欧式距离—— D e ( p , q ) D_{e}(p, q) De​(p,q)像素p(x,y)和q(s,t)间的欧式距离,就是我们在直角坐标系中最常用的两点间的直线距离,定义如下:公式
D e ( p , q ) = ( x − s ) 2 + ( y − t ) 2 D_{e}(p, q)=\sqrt{(x-s)^{2}+(y-t)^{2}} De​(p,q)=(x−s)2+(y−t)2
(2). 城市距离—— D 4 ( p , q ) D_{4}(p, q) D4​(p,q)该模型只能走横竖两个方向,不能走斜向。两个点的距离就是横向加竖向的距离之和
D 4 ( p , q ) = ∣ x − s ∣ + ∣ y − t ∣ D_{4}(p, q)=|x-s|+|y-t| D4​(p,q)=∣x−s∣+∣y−t∣
(3). 棋盘距离—— D 8 ( p , q ) D_{8}(p, q) D8​(p,q)该模型就是围着P点的所有元素都是相邻的,也就是它下一步可以走到包围它的八个点的任何一个,也就是横竖和斜向
D 8 ( p , q ) = max ⁡ ( ∣ x − s ∣ , ∣ y − t ∣ ) D_{8}(p, q)=\max (|x-s|,|y-t|) D8​(p,q)=max(∣x−s∣,∣y−t∣)
欧式距离给出的结果比较准确,但计算时要进行平方和开方运算,计算量大。 城市距离和棋盘距离均为非欧式距离, 计算量小,但有一定的误差

2.6 图像常用的像素级运算

2.6.1 阵列与矩阵操作

图像可以等价的被看成是矩阵。两幅图像的阵列相乘是:
[ a 11 a 12 a 21 a 22 ] [ b 11 b 12 b 21 b 22 ] = [ a 11 b 11 a 12 b 12 a 21 b 21 a 22 b 22 ] \left[\begin{array}{ll} a_{11} & a_{12} \\ a_{21} & a_{22} \end{array}\right]\left[\begin{array}{ll} b_{11} & b_{12} \\ b_{21} & b_{22} \end{array}\right]=\left[\begin{array}{ll} a_{11} b_{11} & a_{12} b_{12} \\ a_{21} b_{21} & a_{22} b_{22} \end{array}\right] [a11​a21​​a12​a22​​][b11​b21​​b12​b22​​]=[a11​b11​a21​b21​​a12​b12​a22​b22​​]
两幅图像的矩阵相乘是:
[ a 11 a 12 a 21 a 22 ] [ b 11 b 12 b 21 b 22 ] = [ a 11 b 11 + a 12 b 21 a 11 b 12 + a 12 b 22 a 21 b 11 + a 22 b 21 a 21 b 12 + a 22 b 22 ] \left[\begin{array}{ll} a_{11} & a_{12} \\ a_{21} & a_{22} \end{array}\right]\left[\begin{array}{ll} b_{11} & b_{12} \\ b_{21} & b_{22} \end{array}\right]=\left[\begin{array}{ll} a_{11} b_{11}+a_{12} b_{21} & a_{11} b_{12}+a_{12} b_{22} \\ a_{21} b_{11}+a_{22} b_{21} & a_{21} b_{12}+a_{22} b_{22} \end{array}\right] [a11​a21​​a12​a22​​][b11​b21​​b12​b22​​]=[a11​b11​+a12​b21​a21​b11​+a22​b21​​a11​b12​+a12​b22​a21​b12​+a22​b22​​]

2.6.2 算数操作

做算术操作得两张图片的分辨率一致,若不一致,可以resize到同一个大小

图像的加法:cv2.add(img1,img2) 。图像的加法运算重要的应用:消除原图像中的附加噪声。

ca5Tr8.jpg

图像的减法:cv2.subtract(img1,img2) 和cv2.subtract(img2,img1) 。图像相减可以检测出两幅图像的差异信息。

caI8JA.jpg

图像的乘法:cv2.multiply(img1,img2)。图像的乘法运算主要用于实现图像的掩膜处理,即屏蔽掉图像中的某些部分。

caIXwD.jpg

图像的除法:cv2.divide(img1,img2) 和cv2.divide(img2,img1) 。图像的除法运算可以用来校正由于照明或者传感器的非均匀性造成的图像灰度阴影。

cajOgg.jpg

2.6.3 逻辑操作

逻辑操作包含与或非异或,其中只有非是图像自身的操作,其余三种皆为两张图象间的操作。在此处不展示效果,但是贴出实践代码,按照代码一键运行即可。使用python-OpenCV

'''
与或非异或
'''
# -*- coding=GBK -*-
import cv2
# 逻辑运算:与或非的操作
def logic_image(src11, src22):
    src = cv2.bitwise_and(src11, src22)#与 两张图片同一位置的色素两个值均不为零的才会有输出
    cv2.imshow("yu", src)
    src = cv2.bitwise_or(src11, src22)#或 两张图片同一位置的色素两个值不全为零的才会有输出
    cv2.imshow("huo", src)
    src = cv2.bitwise_not(src11)#非 对一张图片操作  取反
    cv2.imshow("fei", src)
    src = cv2.bitwise_xor(src11, src22)#异或 两张图片同一位置的色素两个值有一个为零,另一个不为零才会输出
    cv2.imshow("yihuo", src)

src1 = cv2.imread(" ")# 写入自身图片路径
src2 = cv2.imread(" ")# 写入自身图片路径
cv2.imshow("1", img1) # 展示原图1
cv2.imshow("2", img2) # 展示原图2
logic_image(img1, img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结

本章主要学习了数字图像处理的基本知识,主要记录的是自己学习过程中的笔记。从人类视觉特性角度出发,主要学习了图像的数字化表示及用python-OpenCV实现。本章像是一个目录,本章涉及的一些算法并没有深入讲解,并不是我没写,原因是后面都会涉及,那时候将会更加深入的学习,例如插值算法。

标签:11,12,21,22,数字图像处理,cv2,图像,第二章,数字图像
来源: https://blog.csdn.net/LLyj_/article/details/115579502