计算机视觉基础之数字图像(2)

目录

  • 一、直方图
    • 1、什么是直方图?
    • 2、直方图的性质
    • 3、直方图均衡化
    • 4、相关示例代码
  • 二、滤波
    • 1、定义
    • 2、线性滤波
  • 三、卷积
    • 1、定义
    • 2、卷积--过滤器/卷积核/Kernel
    • 3、卷积的应用
    • 4、卷积——步长
    • 5、卷积--填充

一、直方图

1、什么是直方图?

  直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
计算机视觉基础之数字图像(2)_第1张图片
  在图像处理中,经常用到直方图,如颜色直方图、灰度直方图等。
  图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。
  图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率.
计算机视觉基础之数字图像(2)_第2张图片
该图描述了:如像素值为50的像素有多少个

2、直方图的性质

• 直方图反映了图像中的灰度分布规律。它描述每个灰度级具有的像素个数,但不包含这些像素在图像中的位置信息。图像直方图不关心像素所处的空间位置,因此不受图像旋转和平移变化的影响,可以作为图像的特征。

任何一幅特定的图像都有唯一的直方图与之对应,但不同的图像可以有相同的直方图。

如果一幅图像有两个不相连的区域组成,并且每个区域的直方图已知,则整幅图像的直方图是该两个区域的直方图之和。

3、直方图均衡化

(1)直方图均衡化是将原图像的直方图通过变换函数变为均匀的直方图,然后按均匀直方图修改原图像,从而获得一幅灰度分布均匀的新图像。 直方图均衡化就是用一定的算法使直方图大致平和的方法。

  图像增强:增强图像中的有用信息,它可以是一个失真的过程,其目的是要改善图像的视觉效果,针对给定图像的应用场合。
  有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。

  直方图均衡化的作用是图像增强

计算机视觉基础之数字图像(2)_第3张图片
(2)为了将原图像的亮度范围进行扩展,需要一个映射函数,将原图像的像素值均衡映射到新直方图中,这个映射函数有两个条件:

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

步骤:

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

计算流程:
  1)对于输入图像的任意一个像素p, p∈[0,255], 总能在输出图像里有对应的像素q, q∈[0,255] 使得下面等式成立(输入和输出的像素总量相等):
在这里插入图片描述
        累加直方图公式

  2)其中, 输出图像每个灰度级的个数:H*W即像素点 个数,除的数不一定是256,根据自己实习需求和问题可修改
在这里插入图片描述
  3)代入累加直方图公式:
在这里插入图片描述
在这里插入图片描述
理解上述公式可结合下图中的变换过程:
计算机视觉基础之数字图像(2)_第4张图片

4、相关示例代码

import cv2
import numpy as np
from matplotlib import pyplot as plt

'''
calcHist—计算图像直方图
函数原型:calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None)
images:图像矩阵,例如:[image]
channels:通道数,例如:0
mask:掩膜,一般为:None
histSize:直方图大小,一般等于灰度级数
ranges:横轴范围
'''


# 灰度图像直方图
# 获取灰度图像
img = cv2.imread("lenna.png", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imshow("image_gray", gray)

# 灰度图像的直方图,方法一
plt.figure()
plt.hist(gray.ravel(), 256)
plt.show()

'''
# 灰度图像的直方图, 方法二
hist = cv2.calcHist([gray],[0],None,[256],[0,256])
plt.figure()#新建一个图像
plt.title("Grayscale Histogram")
plt.xlabel("Bins")#X轴标签
plt.ylabel("# of Pixels")#Y轴标签
plt.plot(hist)
plt.xlim([0,256])#设置x坐标轴范围
plt.show()
'''

'''
#彩色图像直方图

image = cv2.imread("lenna.png")
cv2.imshow("Original",image)
#cv2.waitKey(0)

chans = cv2.split(image)
colors = ("b","g","r")
plt.figure()
plt.title("Flattened Color Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")

for (chan,color) in zip(chans,colors):
    hist = cv2.calcHist([chan],[0],None,[256],[0,256])
    plt.plot(hist,color = color)
    plt.xlim([0,256])
plt.show()
'''
#!/usr/bin/env python
# encoding=gbk

import cv2
import numpy as np
from matplotlib import pyplot as plt

'''
equalizeHist—直方图均衡化
函数原型: equalizeHist(src, dst=None)
src:图像矩阵(单通道图像)
dst:默认即可
'''

# 获取灰度图像
img = cv2.imread("lenna.png", 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imshow("image_gray", gray)

# 灰度图像直方图均衡化
dst = cv2.equalizeHist(gray)

# 直方图
hist = cv2.calcHist([dst],[0],None,[256],[0,256])

plt.figure()
plt.hist(dst.ravel(), 256)
plt.show()

cv2.imshow("Histogram Equalization", np.hstack([gray, dst]))
cv2.waitKey(0)


'''
# 彩色图像直方图均衡化
img = cv2.imread("lenna.png", 1)
cv2.imshow("src", img)

# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
cv2.imshow("dst_rgb", result)

cv2.waitKey(0)
'''

二、滤波

1、定义

  滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果,对另一与之有关的随机过程进行估计的概率理论与方法。

  滤波是信号处理中的一个重要概念,滤波分经典滤波和现代滤波两种。

  经典滤波的概念,是根据傅立叶分析和变换提出的一个工程概念。根据高等数学理论,任何一个满足一定条件的信号,都可以被看成是由无限个正弦波叠加而成。换句话说,就是工程信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。

  现代滤波的概念,用模拟电子电路对模拟信号进行滤波,其基本原理就是利用电路的频率特性实现对信号中频率成分的选择。根据频率滤波时,是把信号看成是由不同频率正弦波叠加而成的模拟信号,通过选择不同的频率成分来实现信号滤波。
计算机视觉基础之数字图像(2)_第5张图片

2、线性滤波

参考学习(必看):
图像处理中的线性和非线性滤波器(上)
OpenCV 线性滤波

  线性滤波经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。

  邻域算子是利用给定像素周围的像素值决定此像素的最终输出值的一种算子。线性滤波就是一种常见的邻域算子。
计算机视觉基础之数字图像(2)_第6张图片
  如上图所示第三幅图中的-8由中间这个矩阵和第一幅图中矩阵像素进行运算得到,计算完一个值后,移动中间这个矩阵对应第一幅图中不同的9个元素,再次进行计算。

三、卷积

1、定义

  卷积的原理与滤波类似,二者的数学计算公式也相同。但是卷积却有着细小的差别。卷积操作也是卷积核与图像对应位置的乘积和。但是卷积操作在做乘积之前,需要先将卷积核翻转180度,之后再做乘积。

  卷积的数学定义:一般称g为作用在f上的filter(滤波器)或kernel(核)
在这里插入图片描述

2、卷积–过滤器/卷积核/Kernel

对于滤波器,也有一定的规则要求:
  1)滤波器的大小应该是奇数,这样它才有一个中心,例如3x3, 5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。

  2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。但这不是硬性要求。

  3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

  4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

  在具体应用中,往往有多个卷积核,可以认为,每个卷积核代表了一种图像模式。如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。
  例如,如果我们设计了6个卷积核,可以理解:我们认为这个图像上有6种底层纹理模式,也就是我们用6种基础模式就能描绘出一副图像

  用Gx来卷积下面这张图的话,就会在中间黑白边界获得比较大的值。
计算机视觉基础之数字图像(2)_第7张图片
计算机视觉基础之数字图像(2)_第8张图片
计算机视觉基础之数字图像(2)_第9张图片

3、卷积的应用

(1)一个没有任何效果的卷积
计算机视觉基础之数字图像(2)_第10张图片
  将原像素中间像素值乘1,其余全部乘0。显然像素值不会发生任何变化。

(2)平滑均值滤波
计算机视觉基础之数字图像(2)_第11张图片
  取九个值的平均值代替中间像素值— 起到平滑的效果。
计算机视觉基础之数字图像(2)_第12张图片
计算机视觉基础之数字图像(2)_第13张图片
(3) 高斯平滑滤波
计算机视觉基础之数字图像(2)_第14张图片
  高斯平滑水平和垂直方向呈现高斯分布,更突出了中心点在像素平滑后的权重,相比于均值滤波而言,有着更好的平滑效果。

(4)图像锐化
计算机视觉基础之数字图像(2)_第15张图片
  图像锐化使用的是拉普拉斯变换核函数,其有多种模板

(5)Sobel边缘检测
计算机视觉基础之数字图像(2)_第16张图片
  Soble更强调了和边缘相邻的像素点对边缘的影响。
计算机视觉基础之数字图像(2)_第17张图片
summary:卷积解决的问题——卷积负责提取图像中的局部特征。

4、卷积——步长

  如果用(f, f)的过滤器来卷积一张(h, w)大小的图片,每次移动一个像素的话,那么得出的结果就是(h-f+1, w-f+1)的输出结果。 f是过滤器大小, h和w分别是图片的高宽。
  如果每次不止移动一个像素,而是s个像素,那么结果就会变为:这个s就叫做步长。图片可能不清楚,其中的运算符号是+1
在这里插入图片描述
存在的问题:
  • 只要是f或s的值比1要大的话,那么每次卷积之后结果的长宽,要比卷积前小一些。
  • 丢失信息

5、卷积–填充

计算机视觉基础之数字图像(2)_第18张图片
计算机视觉基础之数字图像(2)_第19张图片
p表示要添加几圈元素,几圈0,就上图中的zero padding

  卷积—三种填充模式:橙色部分为image, 蓝色部分为filter。从左往右分别是: full、 same、 valid模式。
计算机视觉基础之数字图像(2)_第20张图片
注意:这里的same还有一个意思,卷积之后输出的feature map尺寸保持不变(相对于输入图片)。当然, same模式不代表完全输入输出尺寸一样,也跟卷积核的步长有关系。 same模式也是最常见的模式,因为这种模式可以在卷积过程中让图的大小保持不变。valid模式计算没有用到填充的元素,填充是为了调整图像的大小,最常用的是same模式

  卷积–3通道卷积:RGB三个通道拆解开来,分别进行卷积,每个通道使用的卷积核不同,W1中有三个卷积核,如何汇总,将三个通道同一个点算出的的三个值相加即可。有几个filter就有几个输出通道,W0、W1输出通道数为2
计算机视觉基础之数字图像(2)_第21张图片
  CNN厉害的地方在于,过滤器的特征并不是人为设定的,而是通过大量图片自己训练出来的。

本文章参考了百度百科、他人技术博客、八斗学院免费教程资料、计算机视觉书籍等综合整理而来,如有侵权,联系删除!水平有限,欢迎各位指导交流!

你可能感兴趣的:(AI学习笔记,计算机视觉,图像处理,opencv,人工智能,python)