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

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

摘要

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

一、开发环境搭建

1.1 anaconda安装

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


再检查一下,使用win+R,输入cmd
输入conda–version,如果显示出conda的版本,表示安装成功,就可以去配置其他的环境了。

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-python3.4.2.17 -i https://pypi.tuna.tsinghua.edu.cn/simple
等安装完之后,我们可以检查一下是否安装成功,pip list,会列举出我们计算机上有的所有的包。


可以看到安装的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()

放大图像可以看到第一幅图像上的椒盐噪声,而经过中值滤波的图像明显的去除了椒盐噪声。

三、高斯滤波

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

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()


可以观察到高斯滤波对边缘区域有一定的破坏,经过高斯滤波后的图像,在一定程度上会变得模糊。

四、快速傅里叶变换

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()


快速傅里叶变换,是把时域转换成频域,转换出来的频域图像,越靠近中间位置,代表的频率越低,我们把图像进行快速傅里叶变换后,可以对图像进行一系列的操作,比如低通滤波器,高通滤波器,频段滤除等,低通滤波器就是在频域图中,选中中心区域的频率通过,其它部分的频率不允许通过,中间部分代表的是低频率,低频率代表的是图像的主体内容,而高频率代表的是图像的细节部分,这样子的话,图像就会只剩下一个主体部分。高通相反只剩下细节部分。

五、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 pltimg = 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()

总结

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

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

  1. 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述

    深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述 摘要 一.图像特征与描述 1.1.颜色特征 1.2.几何特征提取 1.3.基于特征点的特征描述子 1.3.1.几何特征:关键点 1. ...

  2. 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

    深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法 摘要 一.神经元 二.前馈网络 2.1 Delta学习规则 2.2 目标函数J(w) 三.误差反向传播算法(BP算法 ...

  3. 深度学习图像处理目标检测图像分割计算机视觉 07--图像检索

    深度学习图像处理目标检测图像分割计算机视觉 07--图像检索 摘要 一.传统的图像检索做法 1.1.相似颜色检索 1.2.相似纹理检索 1.3.相似形状检索 1.4.相似局部特征检索 1.5.Bag ...

  4. 深度学习(目标检测。图像分割等)图像标注工具汇总

    深度学习(目标检测.图像分割等)图像标注工具汇总 2018年05月31日 09:21:54 努力努力再努力tq 阅读数:3581 对于监督学习算法而言,数据决定了任务的上限,而算法只是在不断逼近这个上 ...

  5. 中科院陈智能:计算机视觉经典——深度学习与目标检测

    不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...

  6. 综述 | 基于深度学习的目标检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 导读:目标检测(Object Det ...

  7. 基于深度学习的目标检测算法综述(一)

    基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文内容原创,作者:美图云视觉技术部 检测团队,转载请注明出处 目标检测(Object ...

  8. 一种基于深度学习的目标检测提取视频图像关键帧的方法

    摘要:针对传统的关键帧提取方法误差率高.实时性差等问题,提出了一种基于深度学习的目标检测提取视频图像关键帧的方法,分类提取列车头部.尾部及车身所在关键帧.在关键帧提取过程中,重点研究了基于SIFT特征 ...

  9. PyTorch实现 | 车牌OCR识别,《PyTorch深度学习之目标检测》

    注:本文选自中国水利水电出版社出版<PyTorch深度学习之目标检测>一书,有改动 福利!免费寄送图书!! 公众号[机器学习与AI生成创作]后台回复:168.即可参与免费寄送图书活动,活动 ...

最新文章

  1. 【驱动】内核打印级别设置
  2. Netty 用起来够猛!
  3. 鸟哥的Linux私房菜(服务器)- 第二十章、WWW 伺服器
  4. 【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面
  5. 安卓系统内 的 安卓虚拟机
  6. 机器学习集成模型学习——Boosting集成学习(四)
  7. 个人计算机的缩写英语,计算机的缩写. 计算机中常见的英语缩写是什么?
  8. 结合CKFinder,给CKEditor加上上传图片功能
  9. 十、Mysql执行计划详细解析
  10. PFSense 2.1 端口映射配置
  11. BCG全球资产管理报告:行业增长的驱动力
  12. 【2022最新Java面试宝典】—— SpringBoot面试题(44道含答案)
  13. APK反编译教程新手第一课:安卓基础知识
  14. Android 各国语言缩写及简称详细介绍
  15. mysql bit类型_MySQL bit类型
  16. (40)STM32——OV2640摄像头实验
  17. 阿里云栖大会的现场,到底是个什么样?
  18. 水库大坝安全监测监控系统平台xmind分析+辽阳市水库大坝安全检测平台+志豪未来科技有限公司+陈志豪
  19. 2018年Java大企业面试问题
  20. 专利一通出案待答复和中通出案待答复

热门文章

  1. Photoshop入门课程-imooc
  2. SpringCloud微服务项目搭建
  3. Schedule | 轻量化的定时任务框架
  4. Bowtie2详细文档
  5. ZCU106 XRT环境搭建【Xilinx Vitis】
  6. jQuery基础06
  7. OpenGL(十八)——Qt OpenGL绘制一个3D世界
  8. [教程] 求生之路联机方法
  9. 【Python学习教程】Python异常处理机制
  10. udev introduction