《HALCON机器视觉与算法原理编程实践》第12章 图像分类-学习笔记

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

12.1 分类器

分类意味着事先准备好若干个类别,然后将一个目标对象根据某种特征划到某个类别中去。以下几种情况可以考虑使用分类:
(1)图像分割
(2)目标识别
(3)良品检测
(4)缺陷检测
(5)光学字符识别(OCR)

12.1.1 分类的基础知识
  1. 分类器的意义
    分类器的作用是将目标对象指定给多个类别中的一个。
    特征参数储存在特征向量中,又称特征库空间。
    使用线或者平面进行分类的分类器称为线性分类器。
  2. 分类器的种类
    (1)基于神经网络,特别是多层感知层的MLP分类器
    (2)基于支持向量机的SVM分类器
    (3)基于高斯混合模型的GMM分类器
    (4)基于k近邻的k-NN分类器
    此外,halcon还提供了一种盒式分类器,用于二值图像的分类。
  3. 图像分类的一般流程
    (1)准备一组已知属于同一类别的样本对象,从每个样本对象中提取出一组特征,并且存储在个特征向量中
    (2)创建分类器
    条件
    (3)用样本的特征向量训练一个分类器。在训练过程中,用分类器计算出属于某个类别的边界
    (4)对目标对象进行检测,获取待检测对象的特征向量。
    (5)分类器根据训练得到的类别的边界条件判断检测对象的特征属于哪个分类。
    (6)清除分类器
    总体来说,针对特定的分类任务,需要选择一组合适的特征和合适的分类器,以及合适的训练样本
12.1.2 MLP分类器

MLP是一种基于神经网络的、动态的分类器。MLP分类器可用于通用特征的分类、图像分割、OCR等。

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图:
在这里插入图片描述

12.1.3 SVN分类器

SVM即支持向量机,用于实现数据的二分类。SVM用于二分类,即只有两种类别的分类。

SVM,英文全称为 Support Vector Machine,中文名为支持向量机,由数学家Vapnik等人早在1963年提出。在深度学习兴起之前,SVM一度风光无限,是机器学习近几十年来最为经典的,也是最受欢迎的分类方法之一。

如下图所示,有两类样本数据(橙色和蓝色的小圆点),中间的红线是分类超平面,两条虚线上的点(橙色圆点3个和蓝色圆点2个)是距离超平面最近的点,这些点即为支持向量。简单地说,作为支持向量的样本点非常非常重要,以至于其他的样本点可以视而不见。而这个分类超平面正是SVM分类器,通过这个分类超平面实现对样本数据一分为二。
在这里插入图片描述

12.1.4 GMM分类器

GMM分类器,即高斯混合模型分类器。高斯模型就是用高斯概率分布曲线,即正态分布曲线来量化概率的一种表达方式。其可以使用不止一条概率分布曲线。

GMM(Gaussian Mixture Model, 高斯混合模型)是指该算法油多个高斯模型线 性叠加混合而成。每个高斯模型称之为component。GMM算法描述的是数据的 本身存在的一种分布。
GMM算法常用于聚类应用中,component的个数就可以认为是类别的数量。
假定GMM由k个Gaussian分布线性叠加而成,那么概率密度函数如下图所示:

在这里插入图片描述

12.1.5 k-NN分类器

k-NN分类器是一个简单但是功能非常强大的分类器,能够储存所有训练集中的数据和分类,并且对新的样品也能基于其邻近的训练数据进行分类。

K-近邻( k-nearest neighbors / knn )是一类基于实例 ( instance-based ) 的非参数学习算法。在这里,输入是由数据集里的 k 个最近的训练实例组成,输出是一个类成员。一个新对象的分类原则是,它被分到离它最近的 k 个邻居中的多数所在的那个类中。特别地,k = 1 时,该对象被分到离它最近的邻居所在的类中。通常,可以赋邻居权值表示邻居对分类的贡献。例如,可以取对象到每个邻居的距离的倒数作为它的权值。knn 算法的缺点是,它对数据的局部结构敏感,容易过度拟合数据。
在这里插入图片描述

12.1.6 选择合适的分类器

多数情况下都可以考虑以上4中分类器。它们足够灵活和高效。实际工作中,可以根据项目的需要或者硬件条件的限制选择合适的分类器。
(1)MLP分类器:分类速度快,但训练速度慢,对内存的要求低,支持多维特征空间,特别适合需要快速分类并且支持离线训练的场景,但不支持缺陷检测。
(2)SVM分类器:分类检测的速度快,当向量维度低时速度最快,但比MLP分类器慢,尽管其训练速度比MLP分类器快得多。其对内存的占用取决于样本的数量,如果有大量的样本,如字符库这样的样本需要训练,分类器会变得十分庞大。
(3)GMM分类器:训练速度和检测速度都很快,特别是类别较少时速度非常快,支持异常检测,但不适用于高维度特征检测。
(4)kNN分类器:训练速度非常快,分类速度比MLP分类器慢,适合缺陷检测和多维度特征分类,但对内存的需求较高。

除了分类器外,特征和训练样本的选择也会影响到分类结果,当分类结果不理想时,可以考虑调整这两个因素。如果训练样本中已经包含了目标对象的全部相关特征,但分类结果仍然不理想,那么可以考虑换一个分类器。

12.1.7 选择合适的特征

选择什么样的特征完全取决于检测的对象是什么,以及分类的要求是什么。

12.1.8 选择合适的训练样本

~

12.2 特征的分类

分类的步骤,首先是创建一个合适的分类器;然后考察对象的特征,将合适的特征向量添加到纹理分类器中;最后使用样本数据进行训练,使分类器学会某种分类的规则。在检测时,提取检测目标对应于分类器中的特征值,使用训练过的分类器进行分类。使用完分类器后,从内存中清除它。

12.2.1 一般步骤

(1)明确有哪些类别,并根据类别收集合适的图像作为样本数据集。
(2)创建分类器
(3)获取明确了类别的样本的特征向量
(4)将这些样本按分类序号添加到分类器中
(5)训练分类器
(6)保存分类器(供后续调用)
(7)获取未知分类的被测对象的特征向量,这些特征向量应当是之前训练分类器时使用过的特征向量
(8)对被测对象的特征向量进行分类
(9)从内存中清除分类器

12.2.2 MLP分类器

在这里插入图片描述

*关闭当前窗口
dev_close_window ()
*创建新窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*设置绘制形状的方式
dev_set_draw ('margin')
dev_set_line_width (3)
*创建mlp分类器,特征数为1,输出类为2个,输出方法选择‘softmax’用于分类
create_class_mlp (1, 1, 2, 'softmax', 'normalization', 3, 42, MLPHandle)
*创建训练样本图像与其分类的对应关系
*图像和分类名称一一对应
FileNames := ['m1','m2','m3','m4']
Classes := [0,0,1,1]
for J := 0 to |FileNames| - 1 by 1
	*读取训练图像
	read_image (Image, 'data/' + FileNames[J])
	dev_display (Image)
	*对图像进行分割
    rgb1_to_gray (Image, GrayImage)
    threshold (GrayImage, darkRegion, 0, 105)
    connection (darkRegion, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 2000, 99999)
	fill_up (SelectedRegions, Objects)
	dev_display (Objects)
	disp_message (WindowHandle, 'Add Sample ' + J + ', Class Index ' + Classes[J], 'window', 10, 10, 'black', 'true')
	*将分割后的对象objects添加进分类器对应的分类Classes[J]中
	count_obj (Objects, Number)
    *提取特征(圆度)
    for N := 1 to Number by 1
      select_obj (Objects, Region, N)
      circularity (Region, Circularity)
      add_sample_class_mlp (MLPHandle, Circularity,Classes[J])
    endfor
    stop()
	disp_continue_message (WindowHandle, 'black', 'true')
endfor
dev_clear_window ()
disp_message (WindowHandle, 'Training...', 'window', 10, 10, 'black', 'true')
*训练mlp分类器
train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
clear_samples_class_mlp (MLPHandle)

*读取输入的待检测图像
read_image (testImage, 'data/m5')
rgb1_to_gray (testImage, GrayTestImage)
*将图像进行分割
threshold (GrayTestImage, darkTestRegion, 0, 105)
connection (darkTestRegion, ConnectedTestRegions)
select_shape (ConnectedTestRegions, SelectedTestRegions, 'area', 'and', 1500, 99999)
fill_up (SelectedTestRegions, testObjects)
*将分割后的对象objects进行分类
count_obj (testObjects, Number)
Classes := []
Colors := ['yellow','magenta']
dev_set_colored (6)
dev_display (testImage)
*提取特征(圆度)
for J := 1 to Number by 1
    select_obj (testObjects, singleRegion, J)
    circularity (singleRegion, Circularity)
    classify_class_mlp (MLPHandle, Circularity, 1, Class, Confidence)
    Classes := [Classes,Class]
    dev_set_color (Colors[Classes[J-1]])
    dev_display (singleRegion)
endfor

*清除MLP分类器,释放内存
clear_class_mlp (MLPHandle)
12.2.3 SVM分类器

应注意调整相应的参数

12.2.4 GMM分类器

应注意调整相应的参数

12.2.5 k-NN分类器

应注意调整相应的参数

12.3 光学字符识别

OCR(光学字符识别)是一种更进一步的分类方法,用于识别字符。识别的第一步,是将独立的字符区域从图像中提取出来,然后将其指定给某个字符的种类。MLP、SVM和k-NN分类器都可以用于OCR。

12.3.1 一般步骤

OCR的检测分为离线训练和在线检测两部分。

  1. 离线训练
    离线部分一般指的是字符的训练过程,包括如下几个步骤。
    (1)读取样本图像,并对样本中的已知字符进行区域分割,分割的单位是单个字符的包围区域
    (2)将分割出的区域和对应的字符名称存储在训练文件中
    (3)检查训练文件中的对应关系,即图像与字符的名称应一一对应
    (4)训练分类器
    (5)保存分类器
    (6)清除分类器
  2. 在线检测
    在线部分的OCR指的是对字符进行检测,即分类,一般流程如下。
    (1)读取分类器。
    (2)对待检测的字符进行区域分割,提取出独立的字符区域。
    (3)使用分类器对字符区域进行分类。
    (4)清除分类器。
12.3.2 OCR实例

在这里插入图片描述

dev_close_window()
read_image (Image, 'data/modelWords')
get_image_size(Image,width,height)
dev_open_window (0, 0, width, height, 'black', WindowHandle)
rgb1_to_gray (Image, GrayImage)  
gen_empty_obj (EmptyObject)
for Index := 1 to 4 by 1
	disp_message (WindowHandle, '请框选单个汉字区域,右键确认:','window', 12, 12, 'yellow', 'false')
	draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
	 **根据画的矩形生成对应的矩形
	gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
	reduce_domain (GrayImage, Rectangle, ImageReduced1)
	 *阈值处理
	threshold (ImageReduced1, Region1, 128, 255)
	 *准备接收所有提取的字符区域
	concat_obj (EmptyObject, Region1, EmptyObject)
endfor
words:=['艺','术','中','心']
*排序
sort_region (EmptyObject, SortedRegions1, 'character', 'true', 'row')
for Index1:=1 to 4 by 1
select_obj (SortedRegions1, ObjectSelected1, Index1)
append_ocr_trainf (ObjectSelected1, Image, words[Index1-1], 'data/yszx.trf')
endfor
read_ocr_trainf_names ('data/yszx.trf', CharacterNames, CharacterCount)
create_ocr_class_mlp (50, 60, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
trainf_ocr_class_mlp (OCRHandle, 'data/yszx.trf', 200, 1, 0.01, Error, ErrorLog)
write_ocr_class_mlp (OCRHandle, 'data/yszx.omc')
*导入另一张做测试的图
read_image (ImageTest, 'data/testWords.jpg')
rgb1_to_gray (ImageTest, Image1)
threshold (Image1, testwordregion, 125, 255)
*对符合条件的字符区域进行分割
connection (testwordregion, ConnectedwordRegions)
*筛选符合条件的字符形状区域
select_shape (ConnectedwordRegions, SelectedwordRegions, 'area', 'and', 700, 2500)
*从左到右,排序
sort_region (SelectedwordRegions, SortedRegions2, 'upper_left', 'true', 'column')
count_obj(SortedRegions2, Number)
*开始字符识别
read_ocr_class_mlp ('data/yszx.omc', OCRHandle1)
do_ocr_multi_class_mlp (SortedRegions2, Image1, OCRHandle1, Class, Confidence)
*显示结果
disp_message(WindowHandle, '识别结果:', 'image', 10, 10, 'white', 'false')
for i:=1 to 4 by 1
	disp_message(WindowHandle, Class[i-1], 'image', 90, 60*i, 'yellow', 'false')
endfor
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《halcon机器视觉算法原理编程实战.pdf》是一本介绍Halcon机器视觉算法原理编程实践的书籍。Halcon是一种功能强大的机器视觉软件库,广泛应用于工业自动化、医疗影像、质量检测等领域。 该书首先介绍了机器视觉算法的基本原理,包括图像预处理、特征提取、模式匹配等常用技术。然后扩展到更高级的视觉算法,如3D视觉建模、图像分割、深度学习等。书中不仅介绍了算法原理,还提供了大量的代码实例和详细的算法流程,帮助读者理解和掌握Halcon编程。 此外,该书还重点介绍了Halcon软件的特点和应用案例。Halcon具有丰富的图像处理函数和工具,支持多种编程语言和平台,使得开发者可以根据实际需求进行开发和集成。书中通过实例演示了工业自动化、医疗影像等领域的应用案例,指导读者如何使用Halcon实现实际的项目。 总之,《halcon机器视觉算法原理编程实战.pdf》通过结合理论和实践,详细介绍了Halcon机器视觉算法原理编程技巧。读者可以通过学习该书,了解Halcon的功能和应用场景,掌握机器视觉算法的基本原理和实现方法,从而应用于实际项目中。 ### 回答2: 《halcon机器视觉算法原理编程实战.pdf》是一本介绍Halcon机器视觉算法原理以及编程实践的书籍。Halcon是一款功能强大的机器视觉开发工具,可用于图像处理、模式识别、测量等领域。 该书首先介绍了Halcon机器视觉的基本原理,包括图像采集与处理、特征提取与匹配、几何变换等内容。通过理解这些基本原理,读者可以建立起对Halcon机器视觉工具的理论框架。 其次,该书还深入探讨了Halcon机器视觉编程实践。通过具体的案例分析,读者可以学习如何使用Halcon编程接口进行图像处理与分析。书中的案例包括图像的预处理、目标的检测与定位、物体的测量与识别等,涵盖了Halcon机器视觉算法的各个方面。 此外,该书还介绍了Halcon机器视觉应用的一些相关技术和工具,如图像采集与处理设备、视觉传感器、光源控制等。这些内容有助于读者更好地理解和应用Halcon机器视觉算法。 总体而言,《halcon机器视觉算法原理编程实战.pdf》是一本适合机器视觉从业者和学习者的实用参考书籍。通过学习该书,读者可以深入了解Halcon机器视觉算法原理,并学会如何使用Halcon进行编程实践,从而提高机器视觉算法在实际应用中的能力和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值