1. 开发需求
- 在参考图像中定义感兴趣区域(ROI),用于形状匹配和文本识别。
- 通过形状匹配找到图像中的目标对象位置。
- 对齐多幅输入图像,使其与参考图像保持一致。
- 在对齐后的图像上进行OCR识别,提取文本和数字信息。
- 以循环方式批量处理多张图像。
2. 程序逻辑与流程
(1)程序思路流程
程序整体流程分为以下几个主要步骤:
-
初始化模块
- 关闭窗口自动刷新、加载参考图像、初始化显示环境。
- 显示交互式提示信息。
-
定义ROI模块
- 定义两个感兴趣区域:
- 模型ROI:用于裁剪图像,供形状匹配模型使用。
- 文本ROI:用于OCR识别,定位目标文本区域。
- 定义两个感兴趣区域:
-
模型创建模块
- 创建并训练形状匹配模型,用于后续的目标匹配与定位。
- 加载OCR模型,支持对文本和数字的识别。
-
形状匹配与对齐模块
- 在参考图像中,利用形状匹配找到目标位置,获取其变换矩阵。
- 在多张输入图像中重复上述过程,并对图像进行对齐。
-
OCR识别模块
- 在对齐后的图像中,裁剪文本ROI,并使用OCR模型提取文本。
-
循环处理模块
- 通过循环批量处理多张图像,逐一完成形状匹配、图像对齐和OCR识别。
-
程序结束
- 显示完成提示,并关闭窗口,释放资源。
(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_model
和 train_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
循环,实现多张图像的批量处理。每次循环中:
- 加载输入图像。
- 执行形状匹配,计算变换矩阵。
- 对齐图像,并在对齐后进行OCR识别。
- 显示识别结果。
关键代码:
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