掘金 后端 ( ) • 2024-04-21 22:01

theme: awesome-green highlight: a11y-dark

👈👈👈 欢迎点赞收藏关注哟

首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 https://juejin.cn/post/6941642435189538824
Github : 👉 https://github.com/black-ant
CASE 备份 : 👉 https://gitee.com/antblack/case

前言

最近在研究 Python 的一些东西 ,也在逐步深入的过程中,接触到了计算机视觉的一些概念。

在此期间陆陆续续也学了一些东西,总结下来分享给大家,或多或少对入门者有些帮助。

在之前我们从应用的角度学习了基础的使用 :

# 五分钟,零基础也能入门 Python 图像文字识别

那么 ,图像处理到底涉及到哪些概念呢?

一. 宏观图

image.png

起初只是想简单的做一下图像去重这些小功能 ,没想到在逐步的了解中,发现图像处理是一个很庞大的领域。

从基础的(绿色)的图像技术 ,到高级的应用(紫色),再到未来可能深度的发展(红色)。用上面一张图来说是远远不够的。

但是隐隐有种感觉,这些前沿的技术,让我感觉到太陌生了,像被时代抛弃了似的。

也许是时候了解一下这些东西了 ,免得以后变成被科技抛弃的老爹爹。

二. 阶梯入门

2.1 图像操作

图像操作有很多工具 ,例如 scikit-image 的, SimpleCV ,OpenCV 等 ,包括 Matlab 这种商业数学软件也能实现图像处理。

但是从资料和使用难度来说 ,OpenCV 是入门的推荐选择

上图 图像技术 的绿色方块的技术 ,在 OpenCV 里面都能找到对应的接口。一般使用流程是 :

  • 选择对应的语言 (Python / Java / C++)
  • 基于操作系统安装 OpenCV
  • 通过客户端调用 OpenCV 的相关功能
// 以 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例:从入门到深度学习

image.png


  • ❓ 指纹识别 :特性工程的主要体现
    • 流程步骤 :
      • S1 : 拿到指纹的特征 ,然后存储在模板库中
      • S2 : 当读取到新指纹的时候,拿到新指纹的特征和模板库信息进行比对
    • 实现关键 :
      • 首先需要对图形进行增强 ,细化等
      • 然后提取其中的关键点 ,例如分叉 ,向量 ,终点等

2.4 阶段总结

在这一阶段还停留在图片信息采集后的商业用法, 并没有涉及到机器学习等场景。

这些案例也不需要太大的投入,都可以应用在生产中,至于卖不卖的出去就看实现的方案了。

但是整体来说,技术门槛不会太高。

三. 高级场景了解

高级场景我本身也没有涉及,单看案例也难以说出其中的技术方法。

就像上面宏观图里面的 ,像自动驾驶 ,虚拟现实往往不是一个技术域能实现的,这些通常都是多个领域共同作用的成果

而组成这些的 ,其底层还是一些相对简单的实现 ,例如行人检测 ,机器学习,深度学习这种。

不过好在生态能帮助我们解决大部分问题 ,大部分我们需要的功能都已经有完善的算法和组件,可以直接使用。

这里列举一些场景的算法 ,虽然我并不是十分了解他们 :

  • 卷积神经网络 (CNN):CNN 是用于图像分类的标准方法。它们使用称为卷积层的特殊层来提取图像中的特征
  • 变分自编码器 (VAE):VAE 是一种可以用于图像分类的生成模型 ,可以用来训练数据相似的图形
  • 区域建议网络 (RPN):RPN 用于生成候选目标框,然后由其他算法进一步分类和定位对象
  • 生成对抗网络 (GAN):GAN 由两个神经网络组成:生成器和判别器。生成器尝试生成逼真的图像,而判别器尝试区分真实图像和生成的图像

当然这些东西不是一蹴而就的,后续有机会再深入。

结语

我只是一个蹒跚学步的新人 ,这段时间了解这一块陆陆续续看了一些东西,整个记了下来。

有些资料里面很细节的东西在文中并没有呈现,文章的目的还是围绕对这个领域有个初步的了解。

参考文档

计算机视觉40例:从入门到深度学习