• 序列号读取


    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 应用示例示例代码

    1. *读取图片
    2. read_image (CD_Image, './cd_print.png')
    3. *获取图像的宽高
    4. get_image_size (CD_Image, Width, Height)
    5. *均值滤波
    6. mean_image (CD_Image, ImageMean, 51, 51)
    7. *动态阈值分割
    8. dyn_threshold (CD_Image, ImageMean, RegionDynThresh, 15, 'dark')
    9. *填充孔洞
    10. fill_up (RegionDynThresh, RegionFillUp)
    11. *获取区域圆的外轮廓
    12. gen_contour_region_xld (RegionFillUp, ContourBorder, 'border')
    13. *获取拟合圆的圆心和半径
    14. fit_circle_contour_xld (ContourBorder, 'algebraic', -1, 0, 0, 3, 2, CenterRow, CenterColumn, Radius, StartPhi, EndPhi, PointOrder)
    15. *环面的内径与外边界半径之比
    16. AnnulusInner:=0.90
    17. *环面的外径与外边界半径之比
    18. AnnulusOuter:=0.99
    19. *圆周率Pi
    20. Pi := acos(0.0) * 2
    21. *待变换图像的宽度
    22. WithPolar:= 2*Pi*Radius*AnnulusInner
    23. *待变换图像的高度
    24. HeightPolar:= Radius*(AnnulusOuter-AnnulusInner)
    25. RadiusStart:= Radius*AnnulusOuter
    26. RadiusEnd:= Radius*AnnulusInner
    27. AngleStart:= 2*Pi-2*Pi/WithPolar
    28. AngleEnd:= 0
    29. *极坐标变换
    30. polar_trans_image_ext (CD_Image, PolarTransImage, CenterRow, CenterColumn, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WithPolar, HeightPolar, 'bilinear')
    31. *字符宽度与WithPolar之比
    32. CharWidthFraction:=0.01
    33. *字符宽度
    34. CharWidth:=WithPolar*CharWidthFraction
    35. *字符高度
    36. CharHeight:=CharWidth
    37. *均值滤波
    38. mean_image (PolarTransImage, ImageMean1, 2*CharWidth, 2*CharHeight)
    39. *动态阈值分割
    40. dyn_threshold (PolarTransImage, ImageMean1, RegionDynThresh1, 10, 'dark')
    41. *连通区域分析
    42. connection (RegionDynThresh1, ConnectedRegions)
    43. *区域筛选
    44. 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])
    45. *区域分类
    46. sort_region (RegionChar, RegionCharSort, 'character', 'true', 'row')
    47. read_ocr_class_mlp ('./Industrial_Rej.omc', OCRHandle)
    48. do_ocr_multi_class_mlp (RegionCharSort, PolarTransImage, OCRHandle, Class,Confidence)
    49. SNString:=sum(Class)
    50. polar_trans_region_inv (RegionCharSort, XYTransRegion, CenterRow, CenterColumn, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WithPolar, HeightPolar,Width,Height, 'nearest_neighbor')
    51. dev_close_window ()
    52. dev_open_window (0, 0, Width,Height, 'black', WindowID)
    53. set_display_font (WindowID, 16, 'mono', 'true', 'false')
    54. dev_display (CD_Image)
    55. dev_display (XYTransRegion)
    56. disp_message (WindowID, SNString, 'image', 80, 80, 'green', 'false')

    结果展示:

  • 相关阅读:
    pytorch实现图像的腐蚀和膨胀
    Sqli-labs靶场第17关详解[Sqli-labs-less-17]自动化注入-SQLmap工具注入
    java乡镇卫生院信息管理计算机毕业设计源码
    13-JVM调优实战-3
    Ceph RGW对象存储
    三车道交通流元胞自动机研究(matlab代码实现)
    kkViewFile在线文件部署及使用(局域网部署)
    20. 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务
    【Java面试】谈谈你对HashMap的理解(Map接口)
    【SpringBoot项目】SpringBoot+MyBatis+MySQL电脑商城
  • 原文地址:https://blog.csdn.net/qq_44744164/article/details/132752067