学习记录一

图像基本知识

  • 一、图像相关概念
  • 二、图像的取样和量化
  • 三、上采样与下采样
  • 四、直方图
  • 五、滤波和卷积
    • 线性滤波
    • 卷积
  • 六、几种简单的卷积核
    • 一个没有任何用的卷积
    • 平滑均值滤波
    • 高斯平滑
    • 图像锐化
  • 七、Soble边缘检测

一、图像相关概念

像素:分辨率的单位,图像的基本单元。
分辨率(解析度):单位英寸内的像素点数。(注:图像分辨率不等于图像像素总数)
灰度:表示图像像素明暗程度的数值。范围 为0-255,白色是255,黑色是0.
色调:各种图像色彩模式下原色的明暗程度,范围0-255,共256级色调。
通道:把图像分解成一个或多个颜色成分:

  • 单通道:一个像素点只需一个数值表示,只能表示灰度; (二值图&灰度图)
  • 三通道:RGB模式,把图像分为红绿蓝三个通道,可以表示彩色,全0表示黑色;
  • 四通道:RGBA模式,在RGB基础上加上alpha通道,表示透明度,alpha=0表示全透明。

对比度:不同颜色间的差别,对比度=最大灰度值/最小灰度值。
频率: 灰度值变化剧烈程度的指标,是灰度在平面空间上的梯度。图像中的高频信号指图像强度/亮度/灰度变化剧烈的地方,也就是我们常说的边缘(轮廓);图像中的低频信号指变化平缓的地方,也就是大片色块的地方。
RGB模型
学习记录一_第1张图片色彩三原色(CMYK):品红、黄、 青
光学三原色(RGB):红、绿、 蓝

注:
1、现在很多图像识别的任务经常将彩色图像灰度化,主要是因为在图像识别过程中,颜色对类别识别基本没啥影响,灰度化将图像由多通道变为单通道,可以大大的减少计算量。(方法:skimage.color.rgb2gray(img)
2、在实际应用中通常会将RGB值转化为浮点数,那是因为整数运算中会因丢弃小数部分可能导致颜色值失真,计算过程越多越失真,而浮点数运算结果更准确。(方法:img_float[i, j]=img[i,j]/255即可将RGB值转化为[0,1]浮点数,(img_binary[i, j]=0 if img_float[i, j] <= 0.5 else 1进一步将图像二值化)

二、图像的取样和量化

计算机保存的图像都是一个一个的像素点,称为数字图像。图像数字化过程由图像的取样与量化来完成。
取样:就是要用多少点来描述一幅图像,取样结果质量的高低用图像的分辨率来衡量(不同像素点数的取样效果如下图)。
量化:是指要使用多大范围的数值来表示图像采样之后的一个点。
学习记录一_第2张图片

三、上采样与下采样

缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的:1、使图像符合显示区域的大小;2、生成对应图像的缩略图。
放大图像(或称为上采样(upsampling)或图像插值(interpolating))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。
注:平时我们所说的简单通过拖拽的放大/缩小图像,分辨率是降低/升高的,因为总的像素点数没变,图像面积放大/缩小了。而我们这里所说的放大/缩小图像,分辨率不变。注意区分!!)

上采样原理:内插值。常用的插值方法包括:最邻近插值The nearest interpolation、双线性插值等,也可以自己定义插值方法。(最近邻插值与双线性插值)
下采样原理:假设有一幅图像Img,其大小为M*N,并且我们想对该图像进行s倍下采样,即图像缩小s倍,那么就要在高和宽上同时缩小s倍,最终得到的下采样图像的大小就为(M/s)×(N/s)。(这里注意下采样和池化的区别:下采样和池化应该是包含关系,池化属于下采样,而下采样不局限于池化,如果卷积 stride=2,此时也可以把这种卷积叫做下采样)

四、直方图

直方图反映的是图像中的灰度分布规律,它描述每个灰度级具有的像素个数,但不包含这些像素在图像中的位置信息。如lenna.png的直方图为(多通道图像的直方图要分别计算每个通道的直方图):
学习记录一_第3张图片
性质:

  • 任何一幅特定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。
  • 如果一幅图像有两个不相连的区域组成,并且每个区域的直方图已知,则整幅图像的 直方图是该两个区域的直方图之和。


很多时候图像的灰度分布是不均匀的,因此需要直方图均衡化利用映射函数将原图像的直方图变为均匀的直方图,然后按均匀直方图修改原图像,从而获得一幅灰度分布均匀的新图像。(一般来说达不到右下图的理想情况)
学习记录一_第4张图片
上面提到的映射函数有两个条件:

  • 为了不打乱原有的顺序,映射后亮、暗的大小关系不能改变;
  • 映射后必须在原有的范围内,比如(0-255)

步骤如下:

  1. 依次扫描原始灰度图像的每一个像素,计算出图像的灰度直方图H
  2. 计算灰度直方图的累加直方图
  3. 根据累加直方图和直方图均衡化原理得到输入与输出之间的映射关系。
  4. 最后根据映射关系得到结果:dst(x,y) = H’(src(x,y))进行图像变换

步骤(3)具体公式推导如下:
对于输入图像的任意一个像素p, p∈[0,255], 总能在输出图像里有对应的像素q, q∈[0,255] 使得下面等式成立(输入和输出的像素总量相等):
在这里插入图片描述
其中,输出图像每个灰度级的个数:
学习记录一_第5张图片
代入累加直方图公式:
在这里插入图片描述
在实际应用中,直接调用写好的cv2.equalizeHist(hist)即可。
贴一个均衡化前后的对比图:

注:彩色图像均衡化,需要分解通道 对每一个通道均衡化。

五、滤波和卷积

线性滤波

线性滤波是图像处理最基本的方法,做法很简单。首先,我们有一个二维的滤波器矩阵(也就是卷积核)和一个要处理的二维图像。然后,对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,再加起来,作为该像素位置的值。这样就完成了滤波过程。
学习记录一_第6张图片
滤波和卷积的区别在于卷积需要先对滤波矩阵进行180的翻转,再进行乘积求和,但如果矩阵是对称的,那么两者就没有什么差别了。(一般我们提到卷积核都默认已经进行了翻转)

卷积

卷积核(滤波器/kernel)的规则要求:

  • 卷积核的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心也就有 了半径的称呼,例如5x5大小的核的半径就是2。
  • 卷积核所有的元素之和应该要等于1,这是为了保证卷积前后图像的亮度保持不变。但这不是硬性要求。
  • 如果卷积核所有元素之和大于1,那么卷积后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。
  • 对于卷积后的结构,可能会出现负数或者大于255的数值。这种情况将它们直接截断到0和255之间即可。对于负数,也可以取绝对值。

如果用(f, f)的卷积核来卷积一张(h, w)大小的图片,每次移动一个像素,那么得出的结果是(h-f+1, w-f+1)的输出结果。 如果每次不止移动一个像素,而是s个像素,那么结果就会变为:
学习记录一_第7张图片
这个s就叫做步长

但是,只要是f或s的值比1要大的话,那么每次卷积之后结果的长宽,要比卷积前小一些,这在一定程度上丢失了图像的信息,于是出现填充(padding)
学习记录一_第8张图片
有了填充之后,每次卷积之后的图像大小:
在这里插入图片描述
same(相同)填充:为了保证卷积前后图像大小不变,于是有
在这里插入图片描述
假设步长 s=1:
学习记录一_第9张图片
valid(有效)填充:填充之后,卷积计算得到的图像大小有可能是分数,这时让p=0,然后结果取整数部分。

六、几种简单的卷积核

在实际应用中,往往有多个卷积核,可以认为每个卷积核代表了一种图像模式。 如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。 例如,如果我们设计了6个卷积核,那么我们认为这个图像上有6种底层纹理模式,用6种基础模式就能描绘出一副图像。下面介绍几种简单的卷积核。

一个没有任何用的卷积

将原像素中间像素值乘1,其余全部乘0。 显然像素值不会发生任何变化。
学习记录一_第10张图片

平滑均值滤波

图像平滑:指用于突出图像的宽大区域、低频成分、主干部分或抑制图像噪声和干扰高频成分的图像处理方法,目的是使图像亮度平缓渐变,减小突变梯度,改善图像质量。
取九个值的平均值代替中间像素值,能起到平滑的效果。
学习记录一_第11张图片
效果如图:

高斯平滑

高斯平滑水平和垂直方向呈现高斯分布,更突出了 中心点在像素平滑后的权重,相比于均值滤波而言, 有着更好的平滑效果。它的取值主要来源于这个函数(了解即可):
在这里插入图片描述

学习记录一_第12张图片
效果如下:

图像锐化

图像锐化其实是为了突出图像的边缘、轮廓、或某些线性目标要素的特征,从而使图像变得清晰。这种滤波方法提高了边缘与周围像元之间的反差,因此也被称为边缘增强。图像锐化使用的是拉普拉斯变换核函数。
学习记录一_第13张图片
效果如下:

注:卷积核中间点的权值要比其他元素权值和大1,才能让这个像素保持原来的值。

除此之外,还有很多常用的卷积核,这里就不一一列举了。

七、Soble边缘检测

首先来看个极端例子,如下图,该图左半部分为全黑,右半部分为全白,如果用Sx来卷积下面这张图的话,就会在中间黑白边界获得比较大的值。因为Sx在全黑或全白区域卷积出来的值都是0,只有在黑白交界处取得最大值,从而能提取出竖直方向的边缘特征。Sy同理能提取出水平方向的边缘特征。这里的Sx和Sy就是Prewitt算子
学习记录一_第14张图片
学习记录一_第15张图片

但是上述的Sx和Sy在水平/垂直方向没有梯度,这对于检测带梯度的边缘(也就是斜边)效果不佳。因此一般边缘检测的卷积核都是带梯度的,例如Sobel的卷积核:
学习记录一_第16张图片
代码直接调用cv2.Sobel(img, cv2.CV_16S, 1, 0)即可,效果如下:

注:这里卷积核的元素和是0,所以滤波后的图像会很暗,只有边缘的地方是有亮度的。

你可能感兴趣的:(计算机视觉,opencv,图像处理)