图像处理笔记(二十):LAWS纹理滤波应用于缺陷检测

LAWS纹理滤波

texture_laws(Image, 原图像
ImageTexture, 输出值,滤波后图像
FilterType, 过滤器类型
Shift, 灰度值转换,滤波后的灰度值可能会比较大,转换后的灰度值Gray=Gray/(Shift2),要根据滤波器选择合适的灰度值转换
FilterSize) 过滤器大小,3, 7, 5可选
过滤器类型帮助文档中有详细列举,
各种大小的过滤器都是由leswruo这几个向量构成,文档中单个向量都有原型,对于组合出来的滤波器矩阵,就是两个向量的点积,例如5
5大小的le滤波器:
l = [1 4 6 4 1],
e = [-1 -2 0 2 1]
那么le就是:

[le = egin{bmatrix} 1 \ 4 \ 6 \4 \1 end{bmatrix} egin{bmatrix} -1 & -2 & 0 & 2 & 1end{bmatrix} ]

5*5的filter,记录一下,稍后研究一下每一种filter的作用。Filter
使用LAWS做缺陷检测的步骤:

  1. 收集几张没有缺陷的图片,使用多种laws滤波作为特征,组合成多通道图片,作为训练样本;
  2. 创建高斯混合分类器,使用样本进行训练;
  3. 将测试图片与样本做相同处理后,使用高斯混合分类器做分类;
  4. 将分类后的区域与原区域做减法,减出来的部分就是不能被分类的部分,也就是有问题的部分;
  5. 筛选出面积较大的区域,可以适当选择开闭运算将区域修整一下。

这里使用到的图像预处理:
使用zoom_image_factor将图像的尺寸减小,可以降低运算时间;
使用smooth_image对混合后的五通道图片做光滑处理

模型的保存与读取:
write_class_gmm
read_class_gmm

# 应用 
## 字符分割识别
halcon中有一些已经训练好的ocr模板可供直接使用。
使用已有模板做字符识别的主要步骤:
1. 找出图像区域,将字符串做分割,分割成单个的字符;
2. 读取已经训练好的模板'read_ocr_class_' ,这里有多个分类器可选;
3. 使用 ‘do_ocr_multi_class_’ 对分割后的区域做字符识别或使用`do_ocr_single_class_` 对分割后的单个区域做字符识别。

使用这种方式的局限性:必须找到字符区域并对字符做好分割,只能用于事先已经很了解测试图片的情况。已经定义好的模板不一定好用,自己训练可能更适合。
测试的时候还发现一个特点,对于图像上字母是亮的,背景是暗的情况,识别到的结果一般都是错的,只有在__背景是亮的,字母是暗的__ 情况下,是被才是有效的。

其实我们可以自己训练,怎么训练呢?
[这是网上找到的一个例子](https://blog.csdn.net/ZHANG2012LIANG/article/details/50993173)
由于一时半会儿弄不到那么多字母图片,所以没有尝试。待实现。
原文地址:https://www.cnblogs.com/yutou2016/p/11193147.html