完成机器视觉系统的搭建、校准并且确认其可以采集检测目标的图像后,就可以集中精力开发各种图像分析、处理以及模式识别算法。算法是机器视觉系统完成各种任务的核心。
为了设计准确性和鲁棒性都较高的算法,并提高其执行速度,一般需要事先对整幅图像或部分像素进行操作,使图像尺寸或形状更适合计算机处理。某些时候还要对图像进行算术和逻辑运算,以消除噪声或提高图像的对比度。这些前期的图像操作或运算不仅会在空间域增强图像,还能极大地提高后续算法的执行速度及其有效性。
本文主要涉及到的知识点有:
- 介绍灰度分析与变换
- 介绍空间域图像增强
- 特征分析
1. 实验环境的安装
Anaconda 是开发 Python 最常用的开源平台之一,已经为你安装了 Python 中最常用的工具库(NumPy、Matplotlib、SciPy、IPython 等),使用起来非常方便。
1.1 Ubuntu 下安装 Anaconda
1. 下载一个 Anaconda
我们可以从官网下载:
image.png
我们若在 Ubuntu 中下载,那么文件默认保存在 Download 文件夹下。
2. 执行脚本
我们进入下载路径 ~/Downloads 或者我们也可以进入到图形化界面的 download 文件夹。右键 Open In Terminal,然后就会打开终端,并进入当前文件夹。
然后执行脚本:
cbash Anaconda3-5.0.1-Linux-x86_64.sh
然后就会自动安装前期你要同意一些协议,键盘输入 yes,翻阅协议使用 Enter 键。
3. 修改环境变量
进入到用户主目录,使用 gedit 对 .bashrc 进行编辑,添加系统环境变量 PATH。在文件末尾添加一行:
export PATH=/home/fange/anaconda3/bin:$PATH
刷新一下 source:
source .bashrc
4. 测试安装 Anaconda 的安装
终端输入 python
:
如果显示如下,就说明你安装成功了。
1.2 利用 Anaconda 安装 pythone-opencv
1. 使用命令行 conda 搜包
我们进入 conda 的官方文档:
查询一下如何搜索包,我们想搜索 OpenCV 相关的包。
在这里插入图片描述图 5 conda 软件图
查阅文档我们得知,conda 搜索 OpenCV 相关包的指令是:
conda search opencv
在这里插入图片描述
我们可以看到 conda 支持的一堆 OpenCV 的版本。
2. 进入 Anaconda Cloud 检索包
我们需要到 Anaconda Cloud 的 https://anaconda.org/ 上检索包。
在这里插入图片描述这里我们选择这个来自 conda-forge Channel 的 OpenCV 的包,可以看到它支持的最新的 OpenCV 的版本号是 3.3.0。
在这里插入图片描述我们点进第一个 opencv 4.11:
在这里插入图片描述3. 添加 channel
接下来进入到 conda-forge 的官网上,发现,如果我们想用 conda 安装它们打的包,就需要另外添加一个 channel:
conda config --add channels conda-forge
否则 conda 检索不到这个包。
在这里插入图片描述4. 安装 opencv-python
接下来我们就安装 conda-forge 这个 channel 下的 opencv3 的包。
conda install -c conda-forge opencv=3.3.0
其中 -c
代表 channels。
2. 灰度分析与变换
图像灰度分析是图像分析中最基本的内容,它使用各种图像灰度分析工具,提取图像或 ROI 区域内的灰度特征信息。基于对图像灰度的分析测量,可以实现最基本的机器视觉检测系统,如目标存在性检测系统等。
2.1 直方图介绍
直方图(histogram)是最基本的图像灰度分析工具。使用它不仅可以判断图像中是否包含可从背景中分割出的区域、图像的饱和度和对比度是否适合检测任务,还能确定应该如何对图像采集系统进行调整以获得较高质量的图像。
图像的直方图包含了丰富的图像信息,描述了图像的灰度级内容,反映了图像的灰度分布情况。图像的灰度直方图以图表的方式显示了图像中每个灰度级与其所对应像素数量的关系。图表的横坐标为灰度级,纵坐标是各个灰度级在图像中出现的频率。直方图是图像最基本的统计特征,其中像素数量可被看作灰度级的函数。从概率论的角度来看,灰度出现的频率可被看作其出现的概率,这样直方图就对应于概率密度函数(Probability Density Function,PDF),而概率分布函数就是直方图的累计和,即概率密度函数的积分。
要深刻理解直方图我们可以使用 Ubuntu 上的 Shotwell viewer 软件中 adjust 的可以先直观的的查看图片的直方图并可以调试相关参数。
在这里插入图片描述- 第一行为曝光(Exposure)
- 第二行为饱和度(Saturation)
- 第三行为色度(Tint)
- 第四行为温度(Temperature)
- 第五行为阴影度(shadows)
- 第六行为亮度(Highlights)
我们可以调节这六个参数去观察直方图的变化去理解直方图的意义,例如我将亮度调节到最低此时直方图末尾将被抑制下去。
在这里插入图片描述2.2 直方图绘制
OpenCV 提供了函数 cv2.calcHist() 用来计算图像的统计直方图,该函数能统计各个灰度级的像素点个数。利用 matplotlib.pyplot 模块中的 plot() 函数,可以将函数 cv2.calcHist() 的统计结果绘制成直方图。
函数原型:
cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
- 第一个参数 image 为原始图像,该图像需要使用必须用方括号括起来。
- 第二个参数 channels 为指定通道编号。通道编号需要用方括号括起来,如果输入图像是单通道灰度图像,该参数的值就是 [0]。对于彩色图像,它的值可以是 [0]、[1]、[2],分别对应通道 B、G、R。
- 第三个参数 Mask 为掩模图像,当统计整幅图像的直方图时,将这个值设为 None。当统计图像某一部分的直方图时,需要用到掩模图像。
- 第四个参数 histSize 表示这个直方图分成多少份(即多少个直方柱),BINS 的值是 256,需要使用“[256]” 作为此参数值。
- 第五个参数 ranges 表示直方图中各个像素的值,8 位灰度图像的像素值范围是 [0,255]。
- 第六个参数 accumulate 表示为累计(累积、叠加)标识,默认值为 False。如果被设置为 True,则直方图在开始计算时不会被清零,计算的是多个直方图的累积结果,用于对一组图像计算直方图。
网友评论