这篇文章主要是介绍下我经历的一些比较难已提取OCR部分的图片,从而介绍下一些特别的处理方式。
第一种:差分高斯diff_of_gauss(近似拉普拉斯高斯)
原图如下:一般的方法基本提取不出来相应的字符。

那我们可以通过差分高斯这个算子直接得出很好的效果图,代码以及效果图如下:

read_image (Image, 'C:/Users/Administrator/Desktop/3.bmp')
rgb1_to_gray (Image, GrayImage)
*差分高斯
diff_of_gauss (GrayImage, DiffOfGauss, 3, 1.6)
threshold (DiffOfGauss, Regions, 2, 12)


这个效果可以直接进行处理,参照我之前的处理OCR的程序,直接就可以得出结果了,这里我就不再写了。

第二种:环形的字符,主要的思路就是通过极坐标转换,将环形部分拉直,剩下的就是正常的字符读取了。
原图:

read_image (Image, 'C:/Users/Administrator/Desktop/环形字符.png')
rgb1_to_gray (Image, GrayImage)
get_image_size (GrayImage, Width, Height)
emphasize (GrayImage, ImageEmphasize, Width, Height, 1)
threshold (ImageEmphasize, Regions, 0, 21)
connection (Regions, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
fill_up (SelectedRegions, RegionFillUp)
*分别两次膨胀
dilation_circle (RegionFillUp, RegionDilation, 20)
dilation_circle (RegionFillUp, RegionDilation1, 70)
*这里是求出两个膨胀区域的最小外接圆的圆心和半径,为之后的极坐标转换做准备
smallest_circle (RegionDilation, InnerRow, InnerCol, InnerRadius)
smallest_circle (RegionDilation1, OuterRow, OuterCol, OuterRadius)
*求出两个膨胀区域的差异部分,就是求出一个字体圆环部分
difference (RegionDilation1, RegionDilation, RegionDifference)
reduce_domain (ImageEmphasize, RegionDifference, ImageReduced)
*这里就是极坐标转换的算子了,就是将环形部分拉直,方便读取OCR
polar_trans_image_ext (ImageReduced, PolarTransImage, OuterRow, OuterCol, rad(-30), rad(-120), InnerRadius+16, OuterRadius, Width, Height/8, 'nearest_neighbor')
mirror_image (PolarTransImage, ImageMirror, 'row')
gray_range_rect (ImageMirror, ImageResult, 7, 7)
binary_threshold (ImageResult, Region, 'max_separability', 'light', UsedThreshold)
connection (Region, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, ['height','area'], 'and', [54.14,912.03], [100,10000])
partition_rectangle (SelectedRegions1, Partitioned, 40, 70)
sort_region (Partitioned, SortedRegions, 'character', 'true', 'row')
invert_image (ImageResult, ImageInvert)
read_ocr_class_mlp ('Industrial_0-9A-Z_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class, Confidence)
dev_display (Image)
set_tposition (3600, 61, 63)
write_string (3600, Class)

字体圆环部分效果图:

环形字体拉直效果图:

最终结果图:

一般字体所处的圆环部分,两次形态学处理再加一次difference,可以直接得出来,这种套路方法一般也应在找边缘的地方。正常的处理这种圆环中读取OCR,主要就是polar_trans_image_ext这个算子,其他的都是一些预处理手段。

第三种斜体字处理
原图:

代码如下:

read_image (Image, 'C:/Users/Administrator/Desktop/斜体字练习.png')
dev_close_window()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
fast_threshold (Image, Region, 0, 128, 20)
*获取字体区域偏转的角度
text_line_slant (Region, Image, 45, -0.523599, 0.523599, SlantAngle)
*生成矩阵
hom_mat2d_identity (HomMat2DIdentity)
*这里是获取字体转正的矩阵,SlantAngle这个只是之前获取的字体斜了多少度,那么要转正的话就是纠正
*这个偏转角度,所以就要向相反方向偏正
hom_mat2d_slant (HomMat2DIdentity, -SlantAngle, 'x', 0, 0, HomMat2DSlant)
affine_trans_image (Image, ImageAffinTrans, HomMat2DSlant, 'nearest_neighbor', 'false')
fast_threshold (ImageAffinTrans, Region1, 0, 90, 20)
connection (Region1, ConnectedRegions1)read_ocr_class_mlp ('DotPrint_0-9A-Z.omc', OCRHandle)dilation_rectangle1 (Region1, RegionDilation, 2, 5)
connection (RegionDilation, ConnectedRegions)
partition_rectangle (ConnectedRegions, Partitioned, 32, 45)
intersection (Partitioned, ConnectedRegions1, RegionIntersection)
sort_region (RegionIntersection, SortedRegions, 'character', 'true', 'row')
do_ocr_multi_class_mlp (SortedRegions, ImageAffinTrans, OCRHandle, Class, Confidence)

转正后的图片:

处理得到的结果:

以上就是一些需要经过特殊处理之后才能够正常读取OCR的三种常见方法。当然还有一些更为难得项目,就比如那种刻字和本体颜色无差异的,而且字体是下沉或者凸起的,遇到这种的话首先先考虑通过低距离低角度打光突出边缘,如果光源搭设被限制住,那么就可以考虑光度立体这种方法来解决了(diff_of_gauss效果不行的情况下)。

Halcon学习笔记之OCR系列-环形字符,斜体字相关推荐

  1. Halcon学习笔记之测量系列-卡尺测量

    介绍完简单的一维测量之后,下面我们来介绍下常用的卡尺测量.Halcon中的Metrology方法即为卡尺工具,可用来拟合线,圆,这种方法对于目标比背景很明显的图像尺寸测量是很方便的,不需要用blob进 ...

  2. Halcon 学习笔记五:几何定位+仿射变换+测量

    Halcon 学习笔记五:几何定位+仿射变换+测量 定位流程 例子一 例子二(药片的定位) 例子三(充电宝定位) 例子四(车牌定位) 其他 定位流程 blob分析 模板匹配 (仿射变换成标准的形状) ...

  3. Halcon学习笔记(五)几何定位+仿射+车牌识别

    定位 Blob分析 模板匹配 仿射 使用单位矩阵求仿射矩阵 示例:affine_trans_region.hdev 单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ...

  4. Sharepoint学习笔记—Site Definition系列-- 2、创建Content Type

    Sharepoint本身就是一个丰富的大容器,里面存储的所有信息我们可以称其为"内容(Content)",为了便于管理这些Conent,按照人类的正常逻辑就必然想到的是对此进行&q ...

  5. Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例

    Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例 一.基本概念 基本流程为: 获取图像 对图像进行灰度值标定 (针对相机获取的图像灰度和输入能量之间的非线性关系, ...

  6. 一、HALCON学习笔记(容器液位缺陷检测)

    一.HALCON学习笔记(容器液位缺陷检测) * In this example a fill level check for the * pharmaceutical industry is dem ...

  7. Halcon学习笔记(三)---数据类型

    Halcon学习笔记(三)---数据类型 halcon只能在单独行进行注释,不能在语句后面进行注释. 1.tuple(元组,重数) 赋值符号":=" tuple算子: (1)变量定 ...

  8. Halcon学习笔记:select_points_object_model_3d(3D对象模型阀值分割)

    Halcon学习笔记:select_points_object_model_3d 3D对象模型阀值分割 This example program shows how to use the operat ...

  9. Halcon学习笔记:xyz_attrib_to_object_model_3d示例

    Halcon学习笔记:xyz_attrib_to_object_model_3d--从X.Y和Z图像中创建3D对象模型同时附加属性 xyz_attrib_to_object_model_3d.hdev ...

最新文章

  1. 10Prototype(原型)模式
  2. 【新浪上海】上海信息化建设进入新阶段 首席信息官联盟发挥重要作用
  3. MR21批量修改价格
  4. MySQL使用Amoeba作为Proxy时的注意事项
  5. 牛客多校三 B Black and white
  6. [译]Front-end-Developer-Interview-Questions
  7. Iterator和ListIterator接口的使用和区别
  8. P2922-[USACO08DEC]秘密消息Secret Message【Trie,字符串】
  9. 个人学习机器学习笔记--
  10. RabbitMQ中basicConsume、basicCancel、basicPublish方法
  11. win10恢复经典开始菜单_window10开始菜单经典怎么设置
  12. php 页面上显示xls文档,phpExcel输出xls文档显示乱码的解决方法
  13. Mongo 常用操作
  14. c#中的ref、out、params参数
  15. java十次方项目链接 视频+资料+讲义
  16. PCB正片和负片的个人理解
  17. cad2006计算机丢失,win10系统无法打开CAD2006提示“计算机中丢失ac1st16.dll”的解决方法...
  18. EOJ 2月月赛补题
  19. carbon安装win7 thinkpad x1_ThinkPad X1 carbon笔记本Win7重装系统步骤详细教程。 重装系统...
  20. Android studio中的警告Hardcoded text

热门文章

  1. Python3-正则表达式~pattern.sub
  2. 六轴机械手程序 用信捷XD5和威纶触摸屏编写。
  3. Python三目运算符(三元运算符)用法详解
  4. educoder头歌实训 web课——JavaScript语言基础:JS循环语句
  5. 2019湖北大学计算机专业排名,湖北省大学排名一览表2019 最新排名汇总
  6. 使用dom4j工具:设置输出两种xml格式-紧密型和美观型
  7. 在西湖泛舟,差点被坑
  8. 数字电子技术实验作业(4)
  9. mapbox热力图属性
  10. tinyproxy配置文件_使用tinyproxy进行ip代理