****************************************************************************************************
* Halcon例程学习:adaption_ocv.hev(光学字符检测)
* 光学字符检测:光照变化对OCV识别报纸字体质量的影响情况分析.
* 联系扣扣:370711753
* 创作时间:2014/11/25
* 修改时间:2014/11/25
****************************************************************************************************
read_image (Image, './images/a01.png') // 读取图像
get_image_size (Image, Width, Height) // 获得图像大小
dev_close_window () // 关闭窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle) // 创建新窗口
dev_display (Image) // 显示图像
* threshold(Image : Region : MinGray, MaxGray : )
* MinGray <= g <= MaxGray
threshold (Image, Region, 0, 100) // 固定阈值分割
* shape_trans(Region : RegionTrans : Type : )
* List of values: 'convex', 'ellipse', 'outer_circle', 'inner_circle',
* 'rectangle1', 'rectangle2', 'inner_rectangle1', 'inner_center'
shape_trans (Region, RegionTrans, 'rectangle1') // 区域形状变换
* dilation_rectangle1 — Dilate a region with a rectangular structuring element.
* dilation_rectangle1(Region : RegionDilation : Width, Height : )
dilation_rectangle1 (RegionTrans, RegionDilation, 10, 10) // 区域矩形膨胀
* reduce_domain — Reduce the domain of an image.
reduce_domain (Image, RegionDilation, ImageReduced) // 区域缩小
* create_ocv_proj — Create a new OCV tool based on gray value projections.
* 创建基于灰度值投影算法的光学字符验证(OCV)工具
create_ocv_proj ('A', OCVHandle)
* traind_ocv_proj — Training of an OCV tool.
* 注意模型训练时,不仅要包括前景像素,也要包括背景像素,因此一般采用区域最小矩形训练.
traind_ocv_proj (ImageReduced, OCVHandle, 'A', 'single')
dev_set_color ('red') // 设置显示颜色
Quality1 := []
Quality2 := []
Quality3 := []
* 1.灰度值变换对模型质量的影响
for add := -40 to 40 by 1
* scale_image — Scale the gray values of an image.
* g' := g * Mult + Add
* Mult = 255 / (GMax-GMin)
* Add = - Mult*GMin
scale_image (Image, ImageScaled, 1, add) // 图像灰度值缩放
reduce_domain (ImageScaled, RegionDilation, ImageReduced) // 区域缩小
* do_ocv_simple — Verification of a pattern using an OCV tool.
* 估算模型质量.
do_ocv_simple (ImageReduced, OCVHandle, 'A', 'true', 'true', 'true', 'true', -1, Quality)
set_tposition (WindowHandle, 24, 12) // 设置文本光标位置
write_string (WindowHandle, 'Intensity change = '+add) // 输出字符串
set_tposition (WindowHandle, 48, 12) // 设置文本光标位置
write_string (WindowHandle, 'Quality = '+Quality) // 输出字符串
Quality1 := [Quality1, Quality]
* stop ()
endfor
* 2.灰度值变换对模型质量的影响
for scale := 0.5 to 1.5 by 0.025
scale_image (Image, ImageScaled, scale, 0) // 图像灰度值缩放
reduce_domain (ImageScaled, RegionDilation, ImageReduced) // 区域缩小
do_ocv_simple (ImageReduced, OCVHandle, 'A', 'true', 'true', 'true', 'true', -1, Quality)
set_tposition (WindowHandle, 24, 12) // 设置文本光标位置
write_string (WindowHandle, 'Intensity change = '+add) // 输出字符串
set_tposition (WindowHandle, 48, 12) // 设置文本光标位置
write_string (WindowHandle, 'Quality = '+Quality) // 输出字符串
Quality2 := [Quality2, Quality]
* stop ()
endfor
* 3.区域遮挡对对模型质量的影响
for Length := 1 to 40 by 1
gen_rectangle1 (Rectangle, 150, 125, 150+5, 145+Length) // 生成矩形区域
* paint_region(Region, Image : ImageResult : Grayval, Type : )
paint_region (Rectangle, Image, ImageError, 210, 'fill') // 油漆工具填充图像
reduce_domain (ImageError, RegionDilation, ImageReduced)
do_ocv_simple (ImageReduced, OCVHandle, 'A', 'true', 'true', 'true', 'true', -1, Quality)
set_tposition (WindowHandle, 24, 12) // 设置文本光标位置
write_string (WindowHandle, 'Intensity change = '+add) // 输出字符串
set_tposition (WindowHandle, 48, 12) // 设置文本光标位置
write_string (WindowHandle, 'Quality = '+Quality) // 输出字符串
Quality3 := [Quality3, Quality]
* stop ()
endfor
write_ocv (OCVHandle, './save/ocv/OCV.ocv') // 保存OCV模型
close_ocv (OCVHandle) // 关闭OCV模型
read_ocv('./save/ocv/OCV.ocv', OCVHandle) // 读取OCV模型
close_ocv (OCVHandle) // 关闭OCV模型
* Halcon例程学习:adaption_ocv.hev(光学字符检测)
* 光学字符检测:光照变化对OCV识别报纸字体质量的影响情况分析.
* 联系扣扣:370711753
* 创作时间:2014/11/25
* 修改时间:2014/11/25
****************************************************************************************************
read_image (Image, './images/a01.png') // 读取图像
get_image_size (Image, Width, Height) // 获得图像大小
dev_close_window () // 关闭窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle) // 创建新窗口
dev_display (Image) // 显示图像
* threshold(Image : Region : MinGray, MaxGray : )
* MinGray <= g <= MaxGray
threshold (Image, Region, 0, 100) // 固定阈值分割
* shape_trans(Region : RegionTrans : Type : )
* List of values: 'convex', 'ellipse', 'outer_circle', 'inner_circle',
* 'rectangle1', 'rectangle2', 'inner_rectangle1', 'inner_center'
shape_trans (Region, RegionTrans, 'rectangle1') // 区域形状变换
* dilation_rectangle1 — Dilate a region with a rectangular structuring element.
* dilation_rectangle1(Region : RegionDilation : Width, Height : )
dilation_rectangle1 (RegionTrans, RegionDilation, 10, 10) // 区域矩形膨胀
* reduce_domain — Reduce the domain of an image.
reduce_domain (Image, RegionDilation, ImageReduced) // 区域缩小
* create_ocv_proj — Create a new OCV tool based on gray value projections.
* 创建基于灰度值投影算法的光学字符验证(OCV)工具
create_ocv_proj ('A', OCVHandle)
* traind_ocv_proj — Training of an OCV tool.
* 注意模型训练时,不仅要包括前景像素,也要包括背景像素,因此一般采用区域最小矩形训练.
traind_ocv_proj (ImageReduced, OCVHandle, 'A', 'single')
dev_set_color ('red') // 设置显示颜色
Quality1 := []
Quality2 := []
Quality3 := []
* 1.灰度值变换对模型质量的影响
for add := -40 to 40 by 1
* scale_image — Scale the gray values of an image.
* g' := g * Mult + Add
* Mult = 255 / (GMax-GMin)
* Add = - Mult*GMin
scale_image (Image, ImageScaled, 1, add) // 图像灰度值缩放
reduce_domain (ImageScaled, RegionDilation, ImageReduced) // 区域缩小
* do_ocv_simple — Verification of a pattern using an OCV tool.
* 估算模型质量.
do_ocv_simple (ImageReduced, OCVHandle, 'A', 'true', 'true', 'true', 'true', -1, Quality)
set_tposition (WindowHandle, 24, 12) // 设置文本光标位置
write_string (WindowHandle, 'Intensity change = '+add) // 输出字符串
set_tposition (WindowHandle, 48, 12) // 设置文本光标位置
write_string (WindowHandle, 'Quality = '+Quality) // 输出字符串
Quality1 := [Quality1, Quality]
* stop ()
endfor
* 2.灰度值变换对模型质量的影响
for scale := 0.5 to 1.5 by 0.025
scale_image (Image, ImageScaled, scale, 0) // 图像灰度值缩放
reduce_domain (ImageScaled, RegionDilation, ImageReduced) // 区域缩小
do_ocv_simple (ImageReduced, OCVHandle, 'A', 'true', 'true', 'true', 'true', -1, Quality)
set_tposition (WindowHandle, 24, 12) // 设置文本光标位置
write_string (WindowHandle, 'Intensity change = '+add) // 输出字符串
set_tposition (WindowHandle, 48, 12) // 设置文本光标位置
write_string (WindowHandle, 'Quality = '+Quality) // 输出字符串
Quality2 := [Quality2, Quality]
* stop ()
endfor
* 3.区域遮挡对对模型质量的影响
for Length := 1 to 40 by 1
gen_rectangle1 (Rectangle, 150, 125, 150+5, 145+Length) // 生成矩形区域
* paint_region(Region, Image : ImageResult : Grayval, Type : )
paint_region (Rectangle, Image, ImageError, 210, 'fill') // 油漆工具填充图像
reduce_domain (ImageError, RegionDilation, ImageReduced)
do_ocv_simple (ImageReduced, OCVHandle, 'A', 'true', 'true', 'true', 'true', -1, Quality)
set_tposition (WindowHandle, 24, 12) // 设置文本光标位置
write_string (WindowHandle, 'Intensity change = '+add) // 输出字符串
set_tposition (WindowHandle, 48, 12) // 设置文本光标位置
write_string (WindowHandle, 'Quality = '+Quality) // 输出字符串
Quality3 := [Quality3, Quality]
* stop ()
endfor
write_ocv (OCVHandle, './save/ocv/OCV.ocv') // 保存OCV模型
close_ocv (OCVHandle) // 关闭OCV模型
read_ocv('./save/ocv/OCV.ocv', OCVHandle) // 读取OCV模型
close_ocv (OCVHandle) // 关闭OCV模型