CV学习:传统(机器学习)图像识别(分类) 您所在的位置:网站首页 字符识别特征有哪些 CV学习:传统(机器学习)图像识别(分类)

CV学习:传统(机器学习)图像识别(分类)

2024-07-06 14:24| 来源: 网络整理| 查看: 265

本文代码全部可运行,笔者运行环境:python3.7+pycharm+opencv4.6。此文是学习记录,记录实现图像识别所需知识,对各知识点并不做深入探究,但笔者提供了相关链接以便读者进行深入学习。文章较长,建议收藏;若本文对您有所帮助,希望能够点赞、收藏哦!十分感谢!!!

传统图像识别技术是指利用机器学习进行特征提取与图像分类。图像识别的过程包括信息获取、预处理、特征提取、图像分类。

目录

1. 图像信息获取

2. 图像预处理

2.1. 灰度化

2.1.1. 分量法

2.1.2. 最大值法

2.1.3. 平均值法

2.1.4. 加权平均法

2.1.5. opencv中自带函数

2.2. 几何变换

2.3. 图像增强

2.3.1. 频率域法

2.3.2. 空间域法

3. 图像特征提取

3.1. 图像具有哪些特征呢?

3.2. 常用的传统特征提取算法有哪些?

3.3. 方向梯度直方图算法(HOG)

3.3.1. 特征描述符

3.3.2. HOG

3.3.3. 代码实现

3.4. opencv中的HOG

3.4.1. 定义一个HOG特征符检测器

3.4.2. 代码复现

4. 图像分类

4.1. 常见的分类算法

4.2. 支持向量机算法(SVM)

4.3. opencv中的SVM

4.3.1. 创建模型

4.3.2. 配置参数

4.3.3. 预测结果

4.3.4. 误差分析

4.3.5. 保存模型

4.3.6. 加载模型

4.4. 自定义坐标点的分类

5. 项目实战

5.1. 识别手写数字

6. 参考内容

1. 图像信息获取

简单理解就是把一幅图像转换成适合输入计算机和数字设备的数字信号。这需要要两个部件以获取数字图像:

物理设备,该设备对我们希望成像的物体发射的能量很敏感。 数字化设备,是一种把物理感知装置的输出转化为数字形式的设备。

常见的图像输入设备有:扫描仪、摄像机、数码相机、图像采集卡等。

2. 图像预处理

图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。

图像预处理的一般步骤为:灰度化-->几何变换-->图像增强,在具体项目中根据需要进行灵活运用。

2.1. 灰度化

灰度化是将图像转变成灰度图像,一般有分量法、最大值法、平均值法、加权平均法等。

2.1.1. 分量法

表述:图像的灰度值可以是RGB三通道中的任意一通道的亮度值,也就是说可以将图像的R通道值作为灰度值,也可以是G通道或B通道。

数学表达:F(x, y) = R(x, y)或F(x, y) = G(x, y)或F(x, y) = B(x, y)

OpenCv中复现:

def image_gray1(img): # 分量法灰度化图像 # 判断输入图像是否为灰度图 if len(img.shape) > 2: b, g, r = img[:, :, 0], img[:, :, 1], img[:, :, 2] gray = b # B通道值作为灰度值 gray = g # G通道值作为灰度值 gray = r # R通道值作为灰度值 return gray else: return img 2.1.2. 最大值法

表述:取图像中(x, y)位置像素的RGB通道中的最大值为灰度值。

数学表达:F(x, y) = max(R(x, y), G(x, y), B(x, y))

OpenCv中复现:

def image_gray2(img): # 最大值法灰度化图像 grayimg = np.zeros(shape=(img.shape[0],img.shape[1])) if len(img.shape) > 2: for i in range(img.shape[0]): for j in range(img.shape[1]): grayimg[i,j] = max(img[i,j][0], img[i,j][1], img[i,j][2]) return grayimg else: return img 2.1.3. 平均值法

表述:图像中每个像素的灰度值是其原图像三通道值得平均值。

数学表达:F(x, y) = (R(x, y) + G(x, y) + B(x, y)) / 3

OpenCv中复现:

def image_gray3(img): # 平均值法灰度化图像 grayimg = np.zeros(shape=(img.shape[0], img.shape[1])) if len(img.shape) > 2: for i in range(img.shape[0]): for j in range(img.shape[1]): grayimg[i, j] = (int(img[i, j][0])+int(img[i, j][1])+int(img[i, j][2]))/3 return grayimg else: return img 2.1.4. 加权平均法

表述:每个通道都有加权系数,根据系数计算其加权平均值。

数学表达:F(x, y) = 0.2989R(x, y)+0.5870G(x, y)+0.1140B(x, y)

OpenCv中复现:

def convert2gray(img): # 加权平均分灰度化图像 if len(img.shape) > 2: r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2] gray = 0.2989 * r + 0.5870 * g + 0.1140 * b return gray else: return img 2.1.5. opencv中自带函数

opencv中内置了两个函数对图像灰度化,即cv2.imread(filaname, cv2.IMREAD_GRAYSCALE)和cv2.cvColor(src, code[, dst[, dstCn]])(转换为灰度图时code = cv2.COLOR_BGR2GRAY)。

2.2. 几何变换

图像几何变换又称为图像空间变换,通过平移、转置、镜像、旋转、缩放等几何变换对采集的图像进行处理,用于改正图像采集系统的系统误差和仪器位置(成像角度、透视关系乃至镜头自身原因)的随机误差。此外,还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。通常采用的方法有最近邻插值、双线性插值和双三次插值。

opencv中的几何变换可见,CV学习:OpenCv快速入门(python版)_水果好好吃哦的博客-CSDN博客

2.3. 图像增强

增强图像中的有用信息,它可以是一个失真的过程,其目的是要改善图像的视觉效果,针对给定图像的应用场合,有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。

图像增强可分成两大类:频率域法和空间域法。

2.3.1. 频率域法

频率域法把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。

高频图像是指强度变化很多的图像,亮度水平从一个像素到另一个像素变化很快。低频图像可能是亮度比较均匀或变化很慢的图像。

频率域法是一种间接图像增强算法,把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。

opencv中频率域图像滤波的有关算法见:

【youcans的OpenCV例程300篇】总目录_youcans_的博客-CSDN博客

2.3.2. 空间域法

空间域图像增强技术指在空间域中,通过线性和非线性变换来增强构成图像的像素 增强的方法主要分为点运算算法、形态学运算法、邻域增强算法。

点运算法

点运算算法即灰度级校正、灰度变换(伽马变换、对数增强)和直方图修正等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。

opencv中灰度变换与直方图见:

【youcans的OpenCV例程300篇】总目录_youcans_的博客-CSDN博客

形态学运算法

图像处理中的形态学是指基于形状的图像处理操作,以数学形态学为工具从图像中提取表达和描绘区域形状的图像结构信息,还包括用于预处理或后处理的形态学过滤、细化和修剪等。

opencv中形态学图像处理见:

【youcans的OpenCV例程300篇】总目录_youcans_的博客-CSDN博客

邻域增强算法

邻域增强算法分为图像平滑和锐化两种。平滑一般用于消除图像噪声,但是也容易引起边缘的模糊。常用算法有均值滤波、中值滤波。锐化的目的在于突出物体的边缘轮廓,便于目标识别。锐化常用算法有梯度法(如Roberts梯度法)、算子法(Sobel算子和拉普拉斯算子等)、掩模匹配法、统计差值法等常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等。

opencv中空间域图像滤波见:

【youcans的OpenCV例程300篇】总目录_youcans_的博客-CSDN博客

3. 图像特征提取

特征提取的英文叫做feature extractor,它是将一些原始的输入的数据维度减少或者将原始的特征进行重新组合以便于后续的使用。简单来说有两个作用:减少数据维度,整理已有的数据特征。

3.1. 图像具有哪些特征呢? 几何特征。包括位置与方向、周长、面积、轴长、距离(例如欧式距离、曼哈顿距离、切比雪夫距离、余弦距离)。 形状特征。圆度、矩形度、惯性比、偏心率等。 幅值特征。 颜色特征(颜色直方图、颜色矩)。 直方图特征(统计特征):均值、方差、能量、熵、L1范数、L2范数等;直方图特征方法计算简单、具有平移和旋转不变性、对颜色像素的精确空间分布不敏感等,在表面检测、缺陷识别有不少应用。 局部二值模式( LBP)特征:LBP对诸如光照变化等造成的图像灰度变化具有较强的鲁棒性,在表面缺陷检测、指纹识别、光学字符识别、人脸识别及车牌识别等领域有所应用。由于LBP 计算简单,也可以用于实时检测。 3.2. 常用的传统特征提取算法有哪些?

Haar、Gabor、LBP、SIFI、HOG、SURF等算法。

Haar

Gabor

LBP

概述

Haar特征通常被用来检测图像中的局部特征,如边缘、线和角等。Haar特征是通过在图像中滑动一个固定大小的窗口,并计算窗口内像素的灰度差异来确定的。这些特征通常由矩形区域的亮度差异组成,其中矩形区域可以是水平、竖直或对角线方向的。

在计算机视觉中,Gabor滤波器通常被用来检测图像中的纹理和边缘等特征。它可以通过在图像上滑动一个Gabor核来提取特定方向、尺度和频率的特征,从而生成滤波响应图像。Gabor滤波器的参数包括中心频率、方向、尺度和带宽等。

LBP(Local Binary Pattern,局部二值模式)是一种用于图像分析和计算机视觉的特征描述符。它可以对图像中的纹理和结构进行描述,并且非常适合于目标检测、人脸识别、纹理分类等应用。

优点

简单有效、不受光照影响、不受目标大小变化影响、鲁棒性好、可以结合其他方法使用

较好的方向选择性、尺度不变性、可以提取细节信息、可以结合其他方法使用

计算简单、不受光照变化影响、可以处理局部纹理特征、可以与其他方法结合

缺点

对目标旋转敏感、计算复杂度高、只适用于灰度图像、对目标变形敏感

计算复杂度高、对图像噪声敏感、对光照变化敏感、参数选择困难

对噪声敏感、不具备旋转不变性、不能描述全局纹理信息

应用场景

人脸、人眼检测,车牌检测

纹理分析、人脸识别、指纹识别、目标检测

图形分类目标检测、人脸识别

SIFT

HOG

SURF

概述

SIFT(Scale-Invariant Feature Transform:尺度不变特性变换)是一种在计算机视觉领域



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有