【Halcon】例程讲解:基于形状匹配与OCR的多图像处理(附图像、程序下载链接)

server/2024/12/29 6:01:31/
1. 开发需求
  • 在参考图像中定义感兴趣区域(ROI),用于形状匹配和文本识别。
  • 通过形状匹配找到图像中的目标对象位置。
  • 对齐多幅输入图像,使其与参考图像保持一致。
  • 在对齐后的图像上进行OCR识别,提取文本和数字信息。
  • 以循环方式批量处理多张图像。

2. 程序逻辑与流程
(1)程序思路流程

程序整体流程分为以下几个主要步骤:

  1. 初始化模块

    • 关闭窗口自动刷新、加载参考图像、初始化显示环境。
    • 显示交互式提示信息。
  2. 定义ROI模块

    • 定义两个感兴趣区域:
      • 模型ROI:用于裁剪图像,供形状匹配模型使用。
      • 文本ROI:用于OCR识别,定位目标文本区域。
  3. 模型创建模块

    • 创建并训练形状匹配模型,用于后续的目标匹配与定位。
    • 加载OCR模型,支持对文本和数字的识别。
  4. 形状匹配与对齐模块

    • 在参考图像中,利用形状匹配找到目标位置,获取其变换矩阵。
    • 在多张输入图像中重复上述过程,并对图像进行对齐。
  5. OCR识别模块

    • 在对齐后的图像中,裁剪文本ROI,并使用OCR模型提取文本。
  6. 循环处理模块

    • 通过循环批量处理多张图像,逐一完成形状匹配、图像对齐和OCR识别。
  7. 程序结束

    • 显示完成提示,并关闭窗口,释放资源。
(2)流程图

以下是程序的流程图,展示了程序的逻辑和模块的操作步骤:

+-------------------------+
|    初始化与加载图像     |
+-----------+-------------++--------------------------+
|     定义模型与文本ROI    |
+-----------+-------------++--------------------------+
|     创建并训练形状模型    |
|     加载OCR识别模型      |
+-----------+-------------++--------------------------+
| 在参考图像中匹配目标并获取 |
|     变换矩阵 (HomMat2D)   |
+-----------+-------------++--------------------------+
|   循环处理多张图像       |
| 1. 加载图像              |
| 2. 形状匹配,计算变换矩阵 |
| 3. 图像对齐              |
| 4. OCR文本识别           |
| 5. 显示匹配与识别结果     |
+-----------+-------------++--------------------------+
|       显示完成提示       |
|        结束程序          |
+--------------------------+

3. 程序功能实现与代码讲解
模块划分与关键代码
(1)初始化模块

在程序的开头,我们需要完成以下工作:

  • 关闭窗口自动刷新和已有窗口资源。
  • 加载参考图像并获取其尺寸,用于初始化显示窗口。
  • 显示操作提示信息,为用户提供交互式说明。

关键代码:

dev_update_window ('off')   
dev_close_window ()         
read_image (ReferenceImage, 'board/board_01')  
get_image_size (ReferenceImage, Width, Height)  
initialize_visualization (Width / 2, Height / 2, WindowHandle, WindowHandleText)  
disp_continue_message (WindowHandle, 'black', 'true')  
disp_description_text (WindowHandleText)  

(2)定义ROI模块

ROI(Region of Interest,感兴趣区域)分为两部分:

  • 模型ROI: 用于裁剪参考图像,提取目标对象的形状信息,供形状匹配模型使用。
  • 文本ROI: 用于OCR识别,定位目标文本区域。

关键代码:

gen_rectangle1 (ROIModel, 60, 535, 185, 900)  
* 定义模型区域ROI,用于形状匹配gen_rectangle1 (ROIText, 445, 585, 590, 765)  
* 定义文本识别区域ROI,用于OCR

(3)模型创建模块

在参考图像中,我们基于模型ROI裁剪图像,提取目标区域的形状信息。之后,通过 create_generic_shape_modeltrain_generic_shape_model 创建并训练形状模型。

同时,加载OCR模型,后续将用于文本识别。

关键代码:

reduce_domain (ReferenceImage, ROIModel, ModelImage)  
create_generic_shape_model (ModelHandle)  
train_generic_shape_model (ModelImage, ModelHandle)  create_text_model_reader ('auto', 'Industrial_0-9A-Z_Rej.omc', TextModel)  
* 加载工业字体OCR模型

(4)形状匹配与对齐模块
  • 在参考图像中,通过形状匹配找到目标对象,获取其位置信息和变换矩阵。
  • 在输入图像中重复形状匹配,并结合参考图像的变换矩阵对图像进行对齐。

对齐操作的核心是变换矩阵的计算与应用。通过矩阵反转和组合,完成从输入图像到参考图像的对齐。

关键代码:

find_generic_shape_model (ReferenceImage, ModelHandle, MatchResultID, Matches)  
get_generic_shape_model_result (MatchResultID, 'all', 'hom_mat_2d', HomMat2DModel)  
* 获取参考图像中目标的位置和变换矩阵find_generic_shape_model (SearchImage, ModelHandle, MatchResultID, Matches)  
get_generic_shape_model_result (MatchResultID, 'all', 'hom_mat_2d', HomMat2DMatch)  hom_mat2d_invert (HomMat2DMatch, HomMat2DMatchInvert)  
* 计算逆变换矩阵hom_mat2d_compose (HomMat2DModel, HomMat2DMatchInvert, TransformationMatrix)  
affine_trans_image (SearchImage, ImageAffineTrans, TransformationMatrix, 'constant', 'false')  
* 对当前图像进行对齐

(5)OCR识别模块

在对齐后的图像上,使用OCR模型提取文本信息:

  • 裁剪对齐图像到文本ROI。
  • 使用 find_text 查找文本对象,并获取识别结果。
  • 显示识别的字符区域和对应的文本。

关键代码:

reduce_domain (ImageAffineTrans, ROIText, ImageOCR)  
find_text (ImageOCR, TextModel, TextResultID)  
* 使用OCR识别对齐图像中的文本get_text_object (Characters, TextResultID, 'all_lines')  
get_text_result (TextResultID, 'class', RecognizedText)  disp_finding_text (Characters, WindowHandle, WindowHandleText, RecognizedText)  
* 显示识别的文本结果

(6)循环处理模块

利用 for 循环,实现多张图像的批量处理。每次循环中:

  1. 加载输入图像。
  2. 执行形状匹配,计算变换矩阵。
  3. 对齐图像,并在对齐后进行OCR识别。
  4. 显示识别结果。

关键代码:

for i := 1 to 9 by 1  read_image (SearchImage, 'board/board_' + i$'02')  * 读取序列图像find_generic_shape_model (SearchImage, ModelHandle, MatchResultID, Matches)  affine_trans_image (SearchImage, ImageAffineTrans, TransformationMatrix, 'constant', 'false')  reduce_domain (ImageAffineTrans, ROIText, ImageOCR)  find_text (ImageOCR, TextModel, TextResultID)  disp_finding_text (Characters, WindowHandle, WindowHandleText, RecognizedText)  * 显示识别的文本结果
endfor  

4. 总结

本程序通过模块化设计,实现了从形状匹配到OCR文本识别的完整流程:

  • 利用形状匹配技术,完成图像的精确对齐。
  • 结合OCR模型,提取对齐图像中的文本信息。
  • 支持批量图像处理,适合工业检测和自动化识别场景。
5. 下载链接
通过网盘分享的文件:主板文本检测(模板匹配+OCR)
链接: https://pan.baidu.com/s/16bGZs9B9xLrdW64jHvTqEg?pwd=jkcf 提取码: jkcf

http://www.ppmy.cn/server/154114.html

相关文章

AIGC实践|AI/AR助力文旅沉浸式互动体验探索

前言: 本篇文章的创作灵感来源于近期热门话题——让文物“动起来”,各大博物馆成为新进潮流打卡地。结合之前创作的AI文旅宣传片良好的流量和反馈,外加最近比较感兴趣的AR互动探索,想尝试看看自己能不能把这些零碎的内容整合起来…

Jenkins 持续集成部署

Jenkins的安装与部署 前言 当我们在实施一个项目时,从新代码中获得反馈的速度越快,问题越早得到解决,获得反馈的一种常见方法是在新代码之后运行测试,但这就导致了当代码正在编译并且正在运行测试时,开发人员无法在测…

王佩丰24节Excel学习笔记——第二十一讲:经典Excel动态图表实现原理

【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 使用公式记得要绝对引用;定义好的名称,引用时要使用文件名!定义名,不能写错,否则无结果;利用offset 函数解决数据透视表做好…

HTML 标签页(Tabs)详细讲解

HTML 标签页(Tabs)详细讲解 标签页(Tabs)是一种用户界面控件,允许用户在同一页面上切换不同的内容区域。它们通过将相关内容分组并在用户交互时动态显示,提供了一种直观的导航方式。 1. 标签页的结构 标…

【超简单】Python入门实用教程

Python 入门教程 1 ---- Python Syntax Python是一个高效的语言,读和写的操作都是很简单的,就像普通的英语一样 Python是一个解释执行的语言,我们不需要去编译,我们只要写出代码即可运行 Python是一个面向对象的语言,…

Visual Studio 2022 QT5.14.2 环境下缺少pro文件以及QT库或模块的引用问题

一、缺少.pro项目管理文件1.在Visual Studio2022中选择扩展-管理扩展,弹出框中搜索qt,选择Qt Visual Studio Tools进行安装,按提示操作 2.选择扩展-Qt VS Tools-Create Basic .pro File... 如果安装Qt Visual Studio Tools依然没有Create Bas…

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型,它是 Pythia Scaling Suite 系列中参数量最小的模型,拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究; Pythia Scaling Suite是为促进可解释性…

VS2022+QT6.7 窗口置灰(遮罩)

本文章使用QWidget来使窗口置灰,使用按钮控制置灰功能的开启和关闭,同时被置灰的控件自动禁用交互功能。 connect(ui.pushButton_open, &QPushButton::clicked, this, []() { //创建无边框窗口,大小是父的大小QWidget* parentWidget new QWidget…