序列号读取

news/2024/7/3 1:52:24

1.序列号读取

1.1 应用示例目的与思路

  1. 获取光盘的外接圆;
  2. 然后进行极坐标变换,获取字符所在的区域;
  3. 最后进行字符分割、识别及其在原图上显示。

1.2 应用示例相关算子介绍

(1) mean_image(Image : ImageMean : MaskWidth, MaskHeight : )

功能:对输入图像进行均值滤波(线性平滑)

图形输入参数:Image:输入图像;

图形输出参数:ImageMean:均值滤波后的图像;

控制输入参数:( MaskWidth, MaskHeight):滤波器的大小(宽高)。

(2) dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

功能:从输入图像中选择像素满足阈值条件的那些区域(使用局部阈值分割图像)。

图像输入参数1:OrigImage:输入图像;

图形输入参数2:ThresholdImage:包含局部阈值的图像阈值图像是原始图像的平滑版本(例如,通过应用mean_image、binomial_filter、gauss_filter等);

图形输出参数:RegionDynThresh:分割后的区域;

控制输入参数1:Offset:应用于ThresholdImage图像的偏移,选择的“偏移”越大,提取的区域就越小;

控制输入参数2:LightDark:提取的模式(明亮、黑暗和相似),List of values: 'dark', 'equal', 'light', 'not_equal'。

(3) fill_up(Region : RegionFillUp : : )

功能:填充区域中的孔洞。

图形输入参数:Region:包含孔洞的输入区域;

图像输出参数:RegionFillUp:无孔洞的输出区域。

(4) gen_contour_region_xld(Regions : Contours : Mode : )

功能:从区域中根据Mode生成相应的xld轮廓。

图形输入参数:Regions:输入的区域;

图形输出参数:Contours:输出的轮廓;

控制输入参数:Mode:生成轮廓的模式,List of values: 'border', 'border_holes', 'center'。'border':边界像素的外部边界用作轮廓点;'border_holes':除了输入区域的外部边界之外,还可以获得所有孔洞的轮廓;'center':边界像素的中心被用作轮廓点。

(5)fit_circle_contour_xld(Contours : : Algorithm, MaxNumPoints, MaxClosureDist, ClippingEndPoints, Iterations, ClippingFactor : Row, Column, Radius, StartPhi, EndPhi, PointOrder)

功能:通过圆近似XLD轮廓(拟合圆)

图形输入参数:Contours:输入的轮廓;

控制输入参数1:Algorithm:用于拟合圆的算法,可选的参数有:

'algebraic' (“代数”方法使轮廓点和生成的圆之间的代数距离最小化);

'ahuber'(类似于“代数”方法,根据Huber的方法对轮廓点进行加权,以减少异常值的影响);

'atukey'(类似于“代数”方法,根据Tukey的方法对轮廓点进行加权,并忽略异常值);

'geometric'(“几何”方法使轮廓点和生成的圆之间的几何距离最小化);

'geohuber'(类似于“几何”方法,根据Huber的方法对轮廓点进行加权,以减少异常值的影响);

'geotukey'(类似于“几何”方法,根据Tukey的方法对轮廓点进行加权,并忽略异常值);

控制输入参数2:MaxNumPoints:用于计算的最大轮廓点数(所有点为-1),Default value: -1;

控制输入参数3:MaxClosureDist:轮廓端点之间的最大距离视为“闭合”,Default value: 0.0;

控制输入参数4:ClippingEndPoints:拟合要忽略的等高线起点和终点的点数,Default value: 0;

控制输入参数5:Iterations:指定算法“algebraic”、“ahuber”和“atukey”的迭代次数,Default value: 3;

控制输入参数6:ClippingFactor:用于消除异常值的剪裁因子(典型值:Huber为1.0,Tukey为2.0),Default value: 2.0;

控制输出参数1:(Row, Column):拟合圆的中心坐标;

控制输出参数2:Radius:拟合圆半径;

控制输出参数3:(StartPhi, EndPhi):拟合圆的起始和终止角度;

控制输出参数4:PointOrder:沿着边界点的顺序。

(6) polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

功能:将图像中的环形弧转换极坐标系下为Width x Height的方形图像。

图形输入参数:Image:输入图像;

图形输出参数:PolarTransImage:输出图像;

控制输入参数1:(Row, Column):输入图像中环形弧中心的行列坐标;

控制输入参数2:(AngleStart, AngleEnd):输入图像中环形弧的起始和终止角度;

控制输入参数3:( RadiusStart, RadiusEnd):输入图像中环形弧的起始和终止半径;

控制输入参数4:(Width, Height):输出图像的宽和高;

控制输入参数5:Interpolation:变换中使用的插值方法。

(7) polar_trans_region_inv(PolarRegion : XYTransRegion : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WidthIn, HeightIn, Width, Height, Interpolation : )

功能:将极坐标中的区域变换回笛卡尔坐标系下的环形区域。

图形输入参数:PolarRegion:输入区域;

图形输出参数:XYTransRegion:输出区域;

控制输入参数1:(Row, Column):输出区域中环形弧中心的行列坐标;

控制输入参数2:(AngleStart, AngleEnd):输出区域中环形弧的起始和终止角度;

控制输入参数3:( RadiusStart, RadiusEnd):输出区域中环形弧的起始和终止半径;

控制输入参数4:(WidthIn, HeightIn):变换区域XYTransRegion的虚拟输入图像尺寸;

控制输入参数4:(Width, Height):变换区域XYTransRegion的虚拟输出图像尺寸;

控制输入参数5:Interpolation:变换中使用的插值方法。

(8) connection(Region : ConnectedRegions : : )

功能:计算输入区域的连接组件(连通区域)。

图形输入参数:Region:输入区域;

图形输出参数:ConnectedRegions:输出的连通区域;

(9) sort_region(Regions : SortedRegions : SortMode, Order, RowOrCol : )

功能:根据区域的相对位置对区域进行排序。

图形输入参数:Regions:输入区域;

图形输出参数:SortedRegions:排完序的输出区域;

控制输入参数1:SortMode:排序的种类;

控制输入参数2:Order:升序排列或降序排列;

控制输入参数3:RowOrCol:按行或按列进行排序。

(10) read_ocr_class_mlp( : : FileName : OCRHandle)

功能:从文件中读取OCR分类器模型。

控制输入参数:FileName:文件路径+文件名;

控制输出参数:OCRHandl:OCR分类器句柄。

(11) do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence)

功能:使用OCR分类器对多个字符进行分类。

使用OCR分类器对多个字符进行分类。

图形输入参数1:Character:待识别的字符区域;

图形输入参数2:Image:待识别字符的灰度图像;

控制输入参数:OCRHandle:OCR分类器句柄;

控制输出参数1:Class:字符的分类结果;

控制输出参数2:Confidence:字符类别的置信度。

1.3 应用示例示例代码

*读取图片
read_image (CD_Image, './cd_print.png')
*获取图像的宽高
get_image_size (CD_Image, Width, Height)
*均值滤波
mean_image (CD_Image, ImageMean, 51, 51)
*动态阈值分割
dyn_threshold (CD_Image, ImageMean, RegionDynThresh, 15, 'dark')
*填充孔洞
fill_up (RegionDynThresh, RegionFillUp)
*获取区域圆的外轮廓
gen_contour_region_xld (RegionFillUp, ContourBorder, 'border')
*获取拟合圆的圆心和半径
fit_circle_contour_xld (ContourBorder, 'algebraic', -1, 0, 0, 3, 2, CenterRow, CenterColumn, Radius, StartPhi, EndPhi, PointOrder)
*环面的内径与外边界半径之比
AnnulusInner:=0.90
*环面的外径与外边界半径之比
AnnulusOuter:=0.99
*圆周率Pi
Pi := acos(0.0) * 2
*待变换图像的宽度
WithPolar:= 2*Pi*Radius*AnnulusInner
*待变换图像的高度
HeightPolar:= Radius*(AnnulusOuter-AnnulusInner)
RadiusStart:= Radius*AnnulusOuter
RadiusEnd:= Radius*AnnulusInner
AngleStart:= 2*Pi-2*Pi/WithPolar
AngleEnd:= 0
*极坐标变换
polar_trans_image_ext (CD_Image, PolarTransImage, CenterRow, CenterColumn, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WithPolar, HeightPolar, 'bilinear')
*字符宽度与WithPolar之比
CharWidthFraction:=0.01
*字符宽度
CharWidth:=WithPolar*CharWidthFraction
*字符高度
CharHeight:=CharWidth
*均值滤波
mean_image (PolarTransImage, ImageMean1, 2*CharWidth, 2*CharHeight)
*动态阈值分割
dyn_threshold (PolarTransImage, ImageMean1, RegionDynThresh1, 10, 'dark')
*连通区域分析
connection (RegionDynThresh1, ConnectedRegions)
*区域筛选
select_shape (ConnectedRegions, RegionChar, ['height','width','row'], 'and', [CharHeight*0.1,CharWidth*0.3,HeightPolar*0.25], [CharHeight*1.1,CharWidth*1.1,HeightPolar*0.75])
*区域分类
sort_region (RegionChar, RegionCharSort, 'character', 'true', 'row')
read_ocr_class_mlp ('./Industrial_Rej.omc', OCRHandle)
do_ocr_multi_class_mlp (RegionCharSort, PolarTransImage, OCRHandle, Class,Confidence)
SNString:=sum(Class)
polar_trans_region_inv (RegionCharSort, XYTransRegion, CenterRow, CenterColumn, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WithPolar, HeightPolar,Width,Height, 'nearest_neighbor')
dev_close_window ()
dev_open_window (0, 0, Width,Height, 'black', WindowID)
set_display_font (WindowID, 16, 'mono', 'true', 'false')
dev_display (CD_Image)
dev_display (XYTransRegion)
disp_message (WindowID, SNString, 'image', 80, 80, 'green', 'false')

结果展示:


http://lihuaxi.xjx100.cn/news/1529979.html

相关文章

科研笔记:TPAMI submission guideline

1 author information Author Information - IEEE Transactions on Pattern Analysis and Machine Intelligence | IEEE Computer Society Digital Library 1.1 会议期刊extension 当一个TPAMI的提交基于之前的会议论文时,IEEE要求期刊论文是之前出版物的“实质…

Vue 前端项目使用alibaba矢量库svg图标

Vue 前端项目使用alibaba矢量库svg图标 这里主要是记录 vue项目中使用阿里矢量库图标的操作流程,方便以后查阅!!! 一、简介 iconfont 是由阿里巴巴体验团队打造的,一款设计和前端开发的便捷工具.拥有着很强大且图标内…

python selenium 爬虫教程

Python和Selenium是很强大的爬虫工具,可以用于自动化地模拟浏览器行为,从网页中提取数据。下面是一个简单的使用Python和Selenium进行爬虫的案例。 入门: 1. 安装和配置: 首先,你需要安装Python和Selenium。可以使用…

PHP 实现 RESTFULL API 方法

现在,RESTful是目前最流行的接口设计规范,在很多公司有着广泛的应用,目前大部分公司都是前后端分离的方式进行软件系统开发,后端只需要提供接口,但接口的形式每个公司可能不一样,但大部分公司经常都会用到r…

springboot和vue的药品管理系统

摘 要 随着生活水平的提高,人们对自己的健康变得重视起来,对医疗服务的要求也变得越来越高,加速了药品管理行业的发展,同时对药品库存管理也提出了更高的要求,以往的库存管理系统更新不及时,导致了库存管理…

12分钟从Executor自顶向下彻底搞懂线程池

通读本篇文章前先来看看几个问题,看看你是否已经理解线程池 什么是池化技术?它有什么特点,哪些场景使用?Executor是什么?它的设计思想是什么样的?工作任务有几种?有什么特点?如何适…

滑动谜题 -- BFS

滑动谜题 输入:board [[4,1,2],[5,0,3]] 输出:5 解释: 最少完成谜板的最少移动次数是 5 , 一种移动路径: 尚未移动: [[4,1,2],[5,0,3]] 移动 1 次: [[4,1,2],[0,5,3]] 移动 2 次: [[0,1,2],[4,5,3]] 移动 3 次: [[1,0,2],[4,5,3]…

获取随机id的api接口

随机id的API接口 一、获取随机id接口二、使用步骤1、接口2、请求参数 三、 案例和demo 一、获取随机id接口 一款免费的帮助你获取随机id字符串的接口,支持自定义长度,长度最少8位,最大100位 二、使用步骤 1、接口 重要提示:建议使用https协议,当https协议无法使用时再尝试使…