👈👈👈 欢迎点赞收藏关注哟
首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164...
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca...
前言
最近在研究 Python 的一些东西 ,也在逐步深入的过程中,接触到了计算机视觉的一些概念。
在此期间陆陆续续也学了一些东西,总结下来分享给大家,或多或少对入门者有些帮助。
在之前我们从应用的角度学习了基础的使用 :
那么 ,图像处理到底涉及到哪些概念呢?
一. 宏观图
起初只是想简单的做一下图像去重这些小功能 ,没想到在逐步的了解中,发现图像处理是一个很庞大的领域。
从基础的(绿色)的图像技术 ,到高级的应用(紫色),再到未来可能深度的发展(红色)。用上面一张图来说是远远不够的。
但是隐隐有种感觉,这些前沿的技术,让我感觉到太陌生了,像被时代抛弃了似的。
也许是时候了解一下这些东西了 ,免得以后变成被科技抛弃的老爹爹。
二. 阶梯入门
2.1 图像操作
图像操作有很多工具 ,例如 scikit-image 的, SimpleCV ,OpenCV 等 ,包括 Matlab 这种商业数学软件也能实现图像处理。
但是从资料和使用难度来说 ,OpenCV 是入门的推荐选择
。
上图 图像技术
的绿色方块的技术 ,在 OpenCV 里面都能找到对应的接口。一般使用流程是 :
- 选择对应的语言 (Python / Java / C++)
- 基于操作系统安装 OpenCV
- 通过客户端调用 OpenCV 的相关功能
python
// 以 Python 为例
import cv2
image = cv2.imread(image_path)
# 灰度化图片
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 对图片进行缩放
image_big = cv2.resize(gray_image, dsize=(None, None), fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
# 降噪图片
denoised_image = cv2.GaussianBlur(image_big, (5, 5), 0)
有关 OpenCV 的其他功能,会在另外一篇单独说。
2.2 操作语言的选择
以 OpenCV 为例 ,使用比较多的语言就是 Python ,C++ , Java.
C++ 和 Java 主要是作为服务端和桌面端的语言,C++ 体现的是性能高 ,比较 OpenCV 本质上是 C++ 实现的。
Java 就体现在稳定,如果简单的功能,又恰好服务端是Java ,确实可以选择使用。
以上两种都是基于不同的业务场景可以适当的选择,但是如果想要深入更高级的用法,就得了解 Python了。
上述 3 种语言都有深度学习的能力
,但是从生态和上手难度来说 ,Python 应该是最轻松的
。
2.3 高级用法
基础的图像处理
- 👉 掩模 : 用选定的图像、图形或物体遮挡待处理的图像(全部或局部),从而控制图像处理的区域
- 用法 :
ROI的提取
,屏蔽
,结构特征提取
- 用法 :
- 👉 色彩处理 : 通常是针对
色彩空间
进行处理- 色彩空间 :用来描述颜色的数学模型。它定义了如何用一组数值来表示一个颜色
- 常见的包括 : RGB(红蓝绿) , HSV(色相、饱和度和明度) , CMYK等
- 用法 :
色彩空间转换
,将人从图像背景中分离
- 👉 滤波处理 : 尽量保留图像原有信息的情况下,过滤掉图像内部的噪声的过程
- 用法 : 均值滤波 ,高斯滤波 ,中值滤波
- 👉 形态学 : 从图像内提取分量信息,该分量信息通常是图像理解时所使用的最本质的形状特征
- 腐蚀 : 能够消除图像的边界点,使图像沿着边界向内收缩
- 膨胀 : 对图像的边界进行扩张
一些商业性质操作的实现方案 :
- ❓ 车牌识别 : 车牌识别主要包括3个模块
- 提取车牌 : 首先从一个复杂的图片里面把车牌读取出来
- S1 : 通过滤波去除图像的噪声信息 ,在通过灰度去除多余的色彩
- S2 : 提取图片的边缘 ,主要是提取到车牌中字符的边缘
- S3 :
二值化 + 闭运算 + 开运算 + 多次滤波
让复杂的图形变得更加抽象 - S4 : 轮廓处理让这些简单的图形分割成一个个单元
- S5 :
定位到车牌
(也就是先对图片处理后,更好的知道车牌在哪)
- 分割车牌 :将车牌中的各字符提取出来,以便进行后续识别
- 流程大概一致 ,都是通过去噪 ,灰度等方式让车牌数字被分割成一个个整体
- 识别车牌 : 图生字的用法,这一块组件很多 ,各有不同
- 提取车牌 : 首先从一个复杂的图片里面把车牌读取出来
图片来源 @ 计算机视觉40例:从入门到深度学习
- ❓ 指纹识别 :特性工程的主要体现
- 流程步骤 :
- S1 : 拿到指纹的特征 ,然后存储在模板库中
- S2 : 当读取到新指纹的时候,拿到新指纹的特征和模板库 信息进行比对
- 实现关键 :
- 首先需要对图形进行增强 ,细化等
- 然后提取其中的关键点 ,例如分叉 ,向量 ,终点等
- 流程步骤 :
2.4 阶段总结
在这一阶段还停留在图片信息采集后的商业用法, 并没有涉及到机器学习等场景。
这些案例也不需要太大的投入,都可以应用在生产中,至于卖不卖的出去就看实现的方案了。
但是整体来说,技术门槛不会太高。
三. 高级场景了解
高级场景我本身也没有涉及,单看案例也难以说出其中的技术方法。
就像上面宏观图里面的 ,像自动驾驶 ,虚拟现实
往往不是一个技术域能实现的,这些通常都是多个领域共同作用的成果
。
而组成这些的 ,其底层还是一些相对简单的实现 ,例如行人检测 ,机器学习,深度学习
这种。
不过好在生态能帮助我们解决大部分问题 ,大部分我们需要的功能都已经有完善的算法和组件,可以直接使用。
这里列举一些场景的算法 ,虽然我并不是十分了解他们 :
- 卷积神经网络 (CNN):CNN 是用于图像分类的标准方法。它们使用称为卷积层的特殊层来提取图像中的特征
- 变分自编码器 (VAE):VAE 是一种可以用于图像分类的生成模型 ,可以用来训练数据相似的图形
- 区域建议网络 (RPN):RPN 用于生成候选目标框,然后由其他算法进一步分类和定位对象
- 生成对抗网络 (GAN):GAN 由两个神经网络组成:生成器和判别器。生成器尝试生成逼真的图像,而判别器尝试区分真实图像和生成的图像
当然这些东西不是一蹴而就的,后续有机会再深入。
结语
我只是一个蹒跚学步的新人 ,这段时间了解这一块陆陆续续看了一些东西,整个记了下来。
有些资料里面很细节的东西在文中并没有呈现,文章的目的还是围绕对这个领域有个初步的了解。
参考文档
《计算机视觉40例:从入门到深度学习
》