深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理

深度学习图像处理目标检测图像分割计算机视觉 01-图像预处理

  • 摘要
  • 一、开发环境搭建
    • 1.1 anaconda安装
    • 1.2 安装TensorFlow
    • 1.3 安装OpenCV
  • 二、中值滤波
  • 三、高斯滤波
  • 四、快速傅里叶变换
  • 五、AHE和CLAHE
  • 总结

摘要

本课程为计算机视觉,那么计算机视觉到底是什么东西?就是研究如何使机器“看”的科学,让计算机具备人类视觉的所有功能,让计算机从图像数据中,提取有用的信息并解释,重构人眼,重构视觉皮层,重构大脑剩余部分。计算机视觉可以干什么?他可以模拟人类视觉的优越能力,同时还可以弥补人类视觉的缺陷。同时,计算机视觉是一个高度复合的、交叉的综合的的学科,涉及了图像处理,机器学习,硬件系统等等学科。计算机视觉的主要研究方向有两个维度,一个是语义感知(Semantic),就是“看见”,一个东西显示在你眼睛前面,你要知道他到底是个什么东西。另一个就是几何属性(Geometry),主要关于虚拟现实场景的应用。本节课程的重点将集中在语义感知部分。请添加图片描述

一、开发环境搭建

1.1 anaconda安装

登录官网anaconda官网下载,因为不同的python版本与我们后续要用到的包的版本是一一对应的,要注意自己下载的是哪个版本的,这里推荐使用python3.6,如果版本太高,后续可能会出现版本不匹配的问题,下载好之后,打开exe文件,双击运行,根据自己的情况安装即可,安装完成后,自己电脑上会出现anaconda。

深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第1张图片
再检查一下,使用win+R,输入cmd
输入conda–version,如果显示出conda的版本,表示安装成功,就可以去配置其他的环境了。
深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第2张图片

1.2 安装TensorFlow

TensorFlows是人工智能AI领域的一个重要软件工具,是谷歌开发的开源软件(即免费的)。 人工智能领域分为三个方面,即基础层、技术层和应用层;而TensorFlow就是技术层中的学习框架。所谓学习框架,你可以用它来处理大量数据,快速建立数学模型,这些模型可以完成智能功能,TensorFlow就好像一个功能强大的机床,它可以帮助制造出不同的产品(即数学模型)。TensorFlow就是一个软件,在该软件里面,用户需要使用Python等语言通过编程来搭建数学模型,这些模型被用于人工智能的应用。
不同的python版本对用的tensorflow版本不同,这里安装tensorflow1.9.0.在安装的时候可以直接pip安装,但是可能比较慢,我们可以选择清华源或者豆瓣源进行安装。
例如清华源:pip install tensorflow-cpu==1.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 安装OpenCV

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。opencv可应用的领域非常多,例如人机互动,物体识别,图像分割,人脸识别,动作识别,运动跟踪,机器人,运动分析,机器视觉,结构分析,汽车安全驾驶等领域
安装OpenCV时,不仅要安装opencv-python,也要安装opencv-contrib-python
给出清华源安装的路径,opencv的安装是比较缓慢的,而且容易因为断网出错,加上一个超时再安装,比较容易成功。
pip --default-timeout=100 install opencv-python3.4.2.16 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip --default-timeout=100 install opencv-contrib-python
3.4.2.17 -i https://pypi.tuna.tsinghua.edu.cn/simple
等安装完之后,我们可以检查一下是否安装成功,pip list,会列举出我们计算机上有的所有的包。
深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第3张图片
深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第4张图片
可以看到安装的tensorflow和opencv成功了。

二、中值滤波

在使用邻域平均法去噪的同时也使得边界变得模糊。而中值滤波是非线性的图像处理方法,在去噪的同时可以兼顾到边界信息的保留。选一个含有奇数点的窗口W,将这个窗口在图像上扫描,把窗口中所含的像素点按灰度级的升或降序排列,取位于中间的灰度值来代替该点的灰度值。
中值滤波的优点是可以有效地去除椒盐噪声。

import cv2
import numpy as np
import matplotlib.pyplot as plt
#直接读为灰度图像的话,数值变成0就可以
img = cv2.imread('opencv.png',255)

for i in range(2000): #添加点噪声(椒盐噪声)
    temp_x = np.random.randint(0,img.shape[0])
    temp_y = np.random.randint(0,img.shape[1])
    img[temp_x][temp_y] = 255
    
#中值滤波---可以有效地去除椒盐噪声
blur_1 = cv2.medianBlur(img,5)

#画图
plt.subplot(1,2,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgr
plt.subplot(1,2,2),plt.imshow(blur_1,'gray')

plt.show()

放大图像可以看到第一幅图像上的椒盐噪声,而经过中值滤波的图像明显的去除了椒盐噪声。
深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第5张图片

三、高斯滤波

图像高斯平滑也是邻域平均的思想对图像进行平滑的一种方法,在图像高斯平滑中,对图像进行平均时,不同位置的像素被赋予了不同的权重。高斯平滑与简单平滑不同,它在对邻域内像素进行平均时,给予不同位置的像素不同的权值,它模拟人眼的特征,关注中心的区域。人眼的特征是离关注中心越远,感受精度越模糊。

import cv2
import numpy as np
import matplotlib.pyplot as plt
#直接读为灰度图像的话,数值变成0就可以,但是直接读成灰度图像,添加的椒盐噪声肉眼不可见
img = cv2.imread('opencv.png',255)

for i in range(2000): #添加点噪声(椒盐噪声)
    temp_x = np.random.randint(0,img.shape[0])
    temp_y = np.random.randint(0,img.shape[1])
    img[temp_x][temp_y] = 255
    
#高斯滤波---对边缘稍微有点破坏,因为高斯滤波模仿人眼特征,关注中心区域
blur_1 = cv2.GaussianBlur(img,(5,5),0)
#中值滤波---可以有效地去除椒盐噪声
#blur_2 = cv2.medianBlur(img,5)

#画图
plt.subplot(1,3,1),plt.imshow(img,'gray')#默认彩色,另一种彩色bgr
plt.subplot(1,3,2),plt.imshow(blur_1,'gray')
#plt.subplot(1,3,3),plt.imshow(blur_2,'gray')
plt.show()

深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第6张图片
可以观察到高斯滤波对边缘区域有一定的破坏,经过高斯滤波后的图像,在一定程度上会变得模糊。

四、快速傅里叶变换

FFT的基本思想是把原始的N点序列,依次分解成一系列的短序列。充分利用DFT计算式中指数因子 所具有的对称性质和周期性质,进而求出这些短序列相应的DFT并进行适当组合,达到删除重复计算,减少乘法运算和简化结构的目的。此后,在这思想基础上又开发了高基和分裂基等快速算法,随着数字技术的高速发展,1976年出现建立在数论和多项式理论基础上的维诺格勒傅里叶变换算法(WFTA)和素因子傅里叶变换算法。它们的共同特点是,当N是素数时,可以将DFT算转化为求循环卷积,从而更进一步减少乘法次数,提高速度。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
#快速傅里叶变换,时域转换成频域
#频域中越靠近中间位置,频率越低,
#可以在频域做各种操作,比如低通滤波器,高通滤波器,频段滤除等
img = cv.imread('opencv.png',0)#读成灰度图 
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

magnitude_spectrum = 20*np.log(np.abs(fshift))

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第7张图片
快速傅里叶变换,是把时域转换成频域,转换出来的频域图像,越靠近中间位置,代表的频率越低,我们把图像进行快速傅里叶变换后,可以对图像进行一系列的操作,比如低通滤波器,高通滤波器,频段滤除等,低通滤波器就是在频域图中,选中中心区域的频率通过,其它部分的频率不允许通过,中间部分代表的是低频率,低频率代表的是图像的主体内容,而高频率代表的是图像的细节部分,这样子的话,图像就会只剩下一个主体部分。高通相反只剩下细节部分。

五、AHE和CLAHE

AHE是一种用来改善图像对比度的图像处理技术,它与传统的(普通)直方图均衡相比,不同点主要在于,AHE通过计算图像每一个显著区域的直方图,来重新分布图像的亮度值,因此它更适合于用来改善图像的局部对比度,以及增强图像边缘信息,利于分割。
但是,AHE有一个缺陷,就是他在增强对比度的同时也会增强图像同质(均匀)区域的噪声,因此作为AHE的改进,CLAHE可以有效降低这种噪声的增强

CLAHE与AHE最大的不同在于前者对对比度进行了限制,这一特性也可以被应用到全局的直方图均衡中,即Contrast Limited HE,简称CLHE,但实际中它很少被用到。CLAHE中,每一个像素邻域都要进行对比度限制,从而得到对应的变换函数,被用来降低AHE中噪声的增强,这主要是通过限制AHE中的对比度增强来实现的。像素周围邻域噪声的增强主要是由变换函数的斜率造成的,由于像素邻域的噪声与邻域的CDF成正比,因此也与邻域直方图在该中心像素位置的值成正比,CLAHE之所以能够限制对比度,是因为它在计算邻域的CDF之前在指定阈值处对直方图进行了修剪,如下图所示,这一做法不仅限制了CDF的斜率,也限制了变换函数的斜率,其中对直方图进行切割所使用的阈值,被称作修剪限制度(clip limit),这个参数不仅依赖于直方图的归一化,而且依赖于像素邻域的size大小,通常设为3到4之间。

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('timg.jpg',0) #直接读为灰度图像
res = cv2.equalizeHist(img)
#clahe限制对比度自适应均衡直方图是基于ahe(自适应均衡直方图)
#只不过使得修剪后的图像对比度更自然
clahe = cv2.createCLAHE(clipLimit=2,tileGridSize=(10,10))
cl1 = clahe.apply(img)
#原图
plt.subplot(131),plt.imshow(img,'gray')
#ahe的效果
#将本来平滑的地方,噪声被放大了,比如人身上衣服的噪声点比较明显
plt.subplot(132),plt.imshow(res,'gray')
#把对比度不好的图调的层次感明显一点,使得直方图的分布更加均衡。
#clahe,露天的部分边缘并没有调亮多少,但是下面周围的建筑物明显清晰了
plt.subplot(133),plt.imshow(cl1,'gray')

plt.show()

深度学习图像处理目标检测图像分割计算机视觉 01--图像预处理_第8张图片

总结

本次课程学习了环境配置和几个滤波算法,中值滤波是选中一个卷积核的中值来代替原来的值,可以有效地去除椒盐噪声,高斯滤波是模拟人眼的特征,根据选中的标准差不同,标准差的大小决定模糊程度,它可以有效地去除高斯噪声,但是图像在一定程度上会变得模糊。快速傅里叶变换可以把时域变换成频域,方便我们进行各种操作,例如低通滤波器,频率滤除等。直方图均衡化可以使得亮度在直方图上更好的分布,实际上就是进行线性拉伸,重新分配各个灰度上的像素点数量,使得他们大致相等,但是AHE自适应直方图,通过对局部的区域进行直方图均衡,可以解决例如逆光拍摄这样的局部曝光比较厉害的图像,因为每个区域都会被多次赋值,所以AHE会过度放大图像中的相对均匀区域的噪音,可以采用CLAHE,他的不同之处在于直方图的修减过程,使得图像的对比度更自然。

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