halcon车片识别和二维码识别大作业

更新时间:2024-05-16 06:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字图像处理

学 院:信息工程学院 专 业:软件工程 姓 名:谢磊金 学 号:2014124089 指导教师:丁爱玲

2014年12月3日

目录

前言 ........................................................................................................................................... 3

第一部分 基于halcon与VS2010的焊点图像处理实验 .................................................. 4 1.1实验概括 ......................................................................................................................... 4 1.2 halcon的实现过程(附代码附图介绍): ................................................................. 4 1.3 halcon与VS2010的结合 ............................................................................................. 13 附源代码(halcon代码请看上文,VS端代码太多请参考源程序): ........................ 15 第二部分 基于VC++的路面裂缝检测实验 .......................................... 错误!未定义书签。 1 总体方案设计 ................................................................................. 错误!未定义书签。 2 裂缝图像的预处理 ......................................................................... 错误!未定义书签。 3 算法总体测试结果与分析 ............................................................. 错误!未定义书签。 4 路面破损识别系统软件的使用 ..................................................... 错误!未定义书签。 第三部分 基于MATLAB的路面裂缝检测 ......................................... 错误!未定义书签。 1解题思路: ......................................................................................... 错误!未定义书签。 2算法设计: ......................................................................................... 错误!未定义书签。 3实验结果及分析: ............................................................................. 错误!未定义书签。 3.1 路面裂缝图像滤波技术 .............................................................. 错误!未定义书签。 3.1.1 均值滤波法 ............................................................................... 错误!未定义书签。 3.1.2中值滤波法 ................................................................................ 错误!未定义书签。 3.1.3 数学形态学滤波技术 ............................................................... 错误!未定义书签。 腐蚀原理 ............................................................................................. 错误!未定义书签。 3.2路面裂缝图像增强 ....................................................................... 错误!未定义书签。 3.2.1同态滤波路面裂缝图像增强 .................................................... 错误!未定义书签。 3.2.2小波变换路面裂缝图像增强 .................................................... 错误!未定义书签。 连续小波变换 ..................................................................................... 错误!未定义书签。 离散小波变换 ..................................................................................... 错误!未定义书签。 3.3路面裂缝图像分割 ....................................................................... 错误!未定义书签。 3.3.1 .迭代法阈值分割 ....................................................................... 错误!未定义书签。 3.3.2 最大类间方差(Otsu)法阈值分割 ....................................... 错误!未定义书签。 总结: ..................................................................................................... 错误!未定义书签。

前言

在本学期的数字图像处理这门课程的学习中我学到了很多图像处理方面的知识。懂得了图像处理领域的相关算法及研究。

期末之际,为了将学到的知识应用与实践。我分别使用了visual studio 2010、VC++6.0以及MATLAB软件分别进行了数字图像处理实验,巩固了所学知识,收获颇多。

本次实验主要分为三部分:

第一部分,在visual studio 2010 和halcon环境下编程,主要功能:车牌识别和二维码检测

第二部分,使用VC++6.0进行了程序开发进行了路面裂缝的检测实验,并开发了相关裂缝检测软件,得到了很好的实验效果。

第三部分,也是本实验的主要部分,综合分析了图像处理的经典算法,并使用多种算法基于MATLAB软件进行了路面裂缝的检测实验,取得了理想的实验效果,加深了我对数字图像处理理论的理解。

感谢丁爱玲老师的悉心指导,帮助我完成了数字图像处理的学习,为我以后的研究生生涯打下了基础。

第一部分 基于halcon与VS2010的图像处理实验

1.1实验概括

本部分在MVTec HALCON 10.0 环境下采用halcon语言编程对图像进行处理获取想要的数据,并结合VS2010实现更加的效果。主要功能:车牌识别和二维码识别。

1.2 halcon的实现过程(附代码附图介绍):

接下来就halcon代码对图像的处理部分作介绍。 1.2.1 车牌识别:

dev_update_window ('off')

dev_open_window (0, 0,600, 512, 'black', WindowID) set_display_font (WindowID, 14, 'mono', 'true', 'false')

read_image (Image, 'E:/Personal/Desktop/焊点检查1/图片/6.jpg') *读图片

get_image_size (Image, Width, Height) *获得图片尺寸

dev_close_window () *关闭激活的图形窗口

dev_open_window (0, 0, Width/4, Height/4, 'black', WindowHandle) *打开一个新的图形窗口,它可以被用来显示图像

set_display_font (WindowHandle, 20, 'mono', 'true', 'false') *置显示字体

dev_display (Image)

*显示在当前图形窗口中的图像对象 decompose3 (Image, Red, Green, Blue)

*一个三通道图像转换成三幅图像(红、绿、蓝)

trans_from_rgb (Red, Green, Blue, ImageResult1, ImageResult2, ImageResult3, 'hsv') *从RGB颜色空间的任意颜色空间改造图像

threshold (ImageResult2, Region, 100, 255)

*使用全局阈值分割图像

remove_noise_region (Region, OutputRegion, 'n_48') *从区域去除噪声

connection (OutputRegion, ConnectedRegions) *计算一个地区的连接组件

closing_rectangle1 (ConnectedRegions, RegionClosing, 10, 10) *关闭一个地区,一个长方形的结构元素

select_shape (RegionClosing, SelectedRegions, 'area', 'and', 20000, 999999) *选择区域的形状特征与援助 dev_clear_window()

*清除激活的图形窗口的内容

dev_display (SelectedRegions)

*显示在当前图形窗口中的图像对象

reduce_domain (ImageResult2, SelectedRegions, ImageReduced) *减少域的图像 dev_clear_window()

*清除激活的图形窗口的内容 dev_display (ImageReduced)

*显示在当前图形窗口中的图像对象

closing_rectangle1 (SelectedRegions, RegionClosing1, 500, 500) *关闭一个地区,一个长方形的结构元素 dev_clear_window()

*清除激活的图形窗口的内容 dev_display (RegionClosing1)

*显示在当前图形窗口中的图像对象 dev_clear_window ()

*清除激活的图形窗口的内容 dev_display (Image)

*显示在当前图形窗口中的图像对象 dev_set_color ('green')

*设置一个或多个的输出颜色 dev_set_line_width (3)

*定义输出区域轮廓线的宽度 dev_set_shape ('rectangle1') * 定义该地区输出的形状 dev_set_draw ('margin')

*定义区域的填充模式

dev_display (RegionClosing1)

*显示在当前图形窗口中的图像对象

reduce_domain (Image, RegionClosing1, ImageReduced1) *减少域的图像 dev_clear_window()

*清除激活的图形窗口的内容 dev_display (ImageReduced1)

*显示在当前图形窗口中的图像对象

get_image_size (ImageReduced1, Width1, Height1) *返回的图像的大小 dev_set_colored (12) *多输出的颜色 dev_set_draw ('fill') *定义区域的填充模式 dev_set_shape ('original') *定义该地区输出的形状

segment_characters (RegionClosing1, ImageReduced1, ImageForeground, RegionForeground, 'local_auto_shape', 'false', 'false', 'medium', Width1/9, Height1*0.8, 0, 10, UsedThreshold) *在一个区域的图像中分类字符

fill_up_shape (RegionForeground, RegionFillUp, 'area', 1, 800) *在给定的形状特征的区域,填充孔

symm_difference (RegionClosing1, RegionFillUp, RegionDifference) *计算两个区域的对称差 //dev_display (Image)

dev_display (RegionDifference)

*显示在当前图形窗口中的图像对象

//select_characters (RegionDifference, RegionCharacters, 'false', 'medium', Width1/9, Height1*0.8, 'false', 'false', 'none', 'false', 'medium', 'false', 0, 'completion') closing_rectangle1 (RegionDifference, RegionClosing2, 3, 3) *关闭一个地区,一个长方形的结构元素

connection (RegionClosing2, ConnectedRegions1) *计算一个地区的连接组件

select_shape (ConnectedRegions1, SelectedRegions2, 'area', 'and', 2000, 99999) *选择区域的形状特征与援助

sort_region (SelectedRegions2, SortedRegions, 'first_point', 'true', 'row') *分拣区域的相对位置

read_ocr_class_mlp OCRHandle)

('C:/Program

Files/MVTec/HALCON-10.0/ocr/Industrial_0-9A-Z.omc',

*从一个文件中读取OCR分类

do_ocr_multi_class_mlp (SelectedRegions2, ImageResult2, OCRHandle, Class, Confidence) *在一个分类器中分类多种字符

area_center (SortedRegions, Area, Row, Column) *计算的面积和的输入区域的中心

set_display_font (WindowHandle, 27, 'mono', 'true', 'false')

*设置字体独立的OS,这个程序设置文字的字体在当前窗口的指定属性的大小,加粗,倾斜的字体

dev_clear_window() *关闭激活的图形窗口 dev_display (Image)

*显示在当前图形窗口中的图像对象 dev_display (SelectedRegions2)

*显示在当前图形窗口中的图像对象

for i := 0 to 5 by 1

*计次循环语句,0-5,6次循环,步长为1

select_obj (SortedRegions, ObjectSelected, 1) set_tposition (WindowID, Row[i]+100, Column[i])

/ disp_message (3600, Class[i], 'image', Row[i]+80, Column[i]-12, 'black', 'false') write_string (WindowID, Class[i])

//disp_message (WindowHandle, Class[i], 'image', Row[i]+400, Column[i]-3, 'green', 'false') *这个程序写入一个文本消息 endfor

*ENDFOR是一个for循环的最后一条语句。 clear_ocr_class_mlp (OCRHandle) *清除的OCR分级

dev_update_window ('on')

*标志性的输出对象 - 开关自动输出到图形窗口中程序的执行过程中打开或关闭。

1.2.2 二维码识别:

dev_open_window (0, 0,600, 512, 'black', WindowID) set_display_font (WindowID, 14, 'mono', 'true', 'false')

create_data_code_2d_model('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandleECC200)

create_data_code_2d_model('PDF417', 'default_parameters', 'maximum_recognition', DataCodeHandlePDF417)

create_data_code_2d_model('QR Code', 'default_parameters', 'maximum_recognition', DataCodeHandleQR)

*二维码的创建开头的算子,clear为结束清除的算子 list_files ('.', ['files','follow_links'], ImageFiles) tuple_regexp_select (ImageFiles, ['\\\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)$','ignore_case'], ImageFiles) for Index := 0 to |ImageFiles| - 1 by 1 read_image (Image, ImageFiles[Index]) *遍历文件读取所要是别的图像

//read_image (Image, 'E:/Personal/Desktop/二维码/二维码/ecc200_cpu_003.png')

find_data_code_2d(Image, SymbolXLDs, DataCodeHandleECC200, [], [], ResultHandles, DecodedDataStrings)

* 检测和读取二维代码符号,也支持读取二维数据模型的序列

count_obj(SymbolXLDs, Number) if (Number>0)

for i:=1 to 1 by 1

tuple_select ('发现ECC200码:'+DecodedDataStrings, i-1, Selected) set_tposition (WindowID, 100+i, 100+i) write_string (WindowID, Selected) endfor

*输出ECC200码二维码的信息 stop() else

find_data_code_2d(Image, SymbolXLDs, DataCodeHandlePDF417, ResultHandles1, DecodedDataStrings)

* 检测和读取二维代码符号,也支持读取二维数据模型的序列 count_obj(SymbolXLDs, Number) if (Number>0)

for i:=1 to 1 by 1

tuple_select ('发现PDF417码:'+DecodedDataStrings, i-1, Selected) set_tposition (WindowID, 100+i, 100+i) write_string (WindowID, Selected) endfor

*输出PDF417码二维码的信息 stop() else

find_data_code_2d(Image, SymbolXLDs, DataCodeHandleQR, ResultHandles1, DecodedDataStrings)

* 检测和读取二维代码符号,也支持读取二维数据模型的序列 count_obj(SymbolXLDs, Number) if (Number>0) for i:=1 to 1 by 1

tuple_select ('发现QR码:'+DecodedDataStrings, i-1, Selected) set_tposition (WindowID, 100+i, 100+i) write_string (WindowID, Selected) endfor

*输出QR码二维码的信息 stop() else

for i:=1 to 1 by 1

tuple_select ('发现QR码:'+DecodedDataStrings, i-1, Selected) set_tposition (WindowID, 100+i, 100+i) write_string (WindowID, Selected) endfor

stop() endif endif endif

[], [],

[], [],

endfor

clear_data_code_2d_model(DataCodeHandleQR)

clear_data_code_2d_model(DataCodeHandleECC200) clear_data_code_2d_model(DataCodeHandlePDF417) *对应create_data_code_2d_model进行结束清算

1.3 halcon与VS2010的结合

将halcon与VS2010进行结合对用户开放简洁可操作化界面,让用户方便对图像进行相应处理。

1.3.1 导入图片:

如果你想进行车牌识别,请导入车牌图片:

1.3.2 点击处理选择按钮选取车牌识别状态,接着点击分析图片按钮:

结果:把车牌牌号在下面显示出来,由于在halcon中定义字体大小适宜halcon窗口,所以对应到VS端字体会比较小。

1.3.3 点击清除按钮清空窗口,在读取二维码图识别:

1.3.4 点击分析按钮读取二维码:

附源代码(halcon代码请看上文,VS端代码请参考源程序):

本文来源:https://www.bwwdw.com/article/lwk7.html

Top