HALCON示例程序classify_halogen_bulbs.hdev使用SVM分类器检测卤素灯泡的好坏

示例程序源码(加注释)

  • 得到halcon默认图片存储路径
    get_system (‘image_dir’, HalconImages)

  • 获得操作系统类型
    get_system (‘operating_system’, OS)

  • OS{0:2}的意思是只选取OS里边的0,1,2三个字符
    if (OS{0:2} == ‘Win’)

    • 将字符串分割为预定义分隔符之间的子字符串。如果为windows就用;如果不是win系统就用:
    • 有一字符串为theboy:themen;thechild用 ';'分割分割为theboy:themen、thechild用 ':'分割分割为theboy、themen;thechild
      tuple_split (HalconImages, ‘;’, HalconImages)
      else
      tuple_split (HalconImages, ‘:’, HalconImages)
      endif
      ReadOK := false
  • 得到系统是否禁止错误对话框显示
    dev_get_preferences (‘suppress_handled_exceptions_dlg’, SaveMode)

  • 设置禁止错误对话框显示由try、catch捕获错误
    dev_set_preferences (‘suppress_handled_exceptions_dlg’, ‘true’)

  • 按照路径读取图片,如果读取不成功catch错误,显示读取图片出错
    for k := 0 to |HalconImages| - 1 by 1
    try
    read_image (Image, HalconImages[k] + ‘/halogen_bulb/halogen_bulb_01.png’)
    ReadPath := HalconImages[k] + ‘/halogen_bulb/’
    ReadOK := true
    break
    catch (Exception)
    endtry
    endfor
    if (not ReadOK)
    disp_message (WindowHandle, ‘Could not find the images in $HALCONIMAGES’, ‘window’, -1, -1, ‘black’, ‘true’)
    stop ()
    endif

  • 再将错误对话框显示恢复为默认模式
    dev_set_preferences (‘suppress_handled_exceptions_dlg’, SaveMode)

  • 读入图片
    read_image (Image, ‘halogen_bulb/halogen_bulb_01.png’)

  • 得到指向图片第一个通道的指针get_image_pointer1 (输入图像, 指针, 图片类型, 宽, 高)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)

  • 开窗口与显示
    dev_close_window ()
    dev_open_window (0, 0, Width / 2, Height / 2, ‘black’, WindowHandle)
    set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)

  • 定义类名
    ClassNames := [‘good’,‘bad’,‘none’]

  • 定义颜色数组,用于显示不同类别
    Colors := [‘forest green’,‘red’,‘red’]
    Nu := 0.05
    KernelParam := 0.02

  • 创建一个svm分类器

  • create_class_svm (特征数,内核函数, 向量对其周围环境的影响量, 错误率,类数量, ‘模式’, ‘预处理’, 样本数量, SVM分类器句柄)
    create_class_svm (7, ‘rbf’, KernelParam, Nu, |ClassNames|, ‘one-versus-one’, ‘principal_components’, 5, SVMHandle)

  • 为SVM分类器添加样本,自定义函数
    add_samples_to_svm (ClassNames, SVMHandle, WindowHandle, ReadPath)
    for ClassNumber := 0 to |ClassNames| - 1 by 1
    list_files (ReadPath + ClassNames[ClassNumber], ‘files’, Files)
    从Files中选择图片格式为png的图片
    Selection := regexp_select(Files,’.*[.]png’)
    for Index := 0 to |Selection| - 1 by 1
    read_image (Image, Selection[Index])
    dev_display (Image)
    threshold (Image, Region, 0, 40)
    自定义函数
    calculate_features (Region, Features)

        求取region中心area_center (Region, Area, Row, Column)区域紧凑度compactness (Region, Compactness)计算区域二维不变矩moments_region_central_invar (Region, PSI1, PSI2, PSI3, PSI4)计算区域的凸度convexity (Region, Convexity)real将元组转换为浮点数的元组。Features := real([Area,Compactness,PSI1,PSI2,PSI3,PSI4,Convexity])return ()
    

    为svm分类器添加样本
    add_sample_class_svm(:: SVM句柄,特征向量,训练类别 ?
    add_sample_class_svm (SVMHandle, Features, ClassNumber)
    endfor
    endfor
    return ()

    dev_clear_window ()

  • 训练SVM分类器
    disp_message (WindowHandle, ‘Training…’, ‘window’, -1, -1, ‘black’, ‘true’)

  • 训练svn分类器train_class_svm (SVM分类器句柄, 梯度阈值, 训练模式)
    train_class_svm (SVMHandle, 0.001, ‘default’)
    disp_message (WindowHandle, ‘Training completed’, ‘window’, -1, -1, ‘black’, ‘true’)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()

  • 自定义函数使用svm分类器进行识别
    classify_regions_with_svm (SVMHandle, Colors, ClassNames, ReadPath)
    list_files (ReadPath, [‘files’,‘recursive’], Files)
    Selection := regexp_select(Files,’.*[.]png’)
    read_image (Image, Selection[0])
    dev_close_window ()
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width / 2, Height / 2, ‘black’, WindowHandle)
    set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
    for Index := 0 to |Selection| - 1 by 1
    read_image (Image, Selection[Index])
    threshold (Image, Region, 0, 40)
    自定义函数和上边做训练的是一个函数
    calculate_features (Region, Features)
    使用SVM分类器进行分类classify_class_svm(:: 分类器句柄,特征向量,最佳类数:识别结果)
    classify_class_svm (SVMHandle, Features, 1, Class)
    dev_display (Image)
    dev_set_color (Colors[Class])
    dev_display (Region)
    disp_message (WindowHandle, ‘Classified as:’ + ClassNames[Class], ‘window’, -1, -1, ‘black’, ‘true’)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
    endfor
    dev_display (Image)
    return ()

  • 清除SVM分类器,释放内存
    clear_class_svm (SVMHandle)

处理思路

这个例子介绍了create_class_svm 、add_sample_class_svm、train_class_svm、classify_class_svm 的使用方法,使用SVM分类器对元素的凸度与不变的结构向量进行分类。完成了对卤素灯泡的完整性的检测。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

HALCON示例程序classify_halogen_bulbs.hdev使用SVM分类器检测卤素灯泡的好坏相关推荐

  1. HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体

    HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体 小哥哥小姐姐觉得有用点个赞呗! 示例程序源码(加注释) 蓝色字体均为算子解释链接,可以前往查看解答 关于 ...

  2. HALCON示例程序classify_image_class_svm.hdev使用SVM分类器对多通道图像进行分类

    HALCON示例程序classify_image_class_svm.hdev使用SVM分类器对多通道图像进行分类 示例程序源码(加注释) 由于关于SVM分类器的使用之前的贴子介绍过,所以关于SVM的 ...

  3. HALCON示例程序classify_image_class_knn.hdev使用KNN分类器对多通道图像进行分割

    HALCON示例程序classify_image_class_knn.hdev使用KNN分类器对多通道图像进行分割 示例程序源码(加注释) 显示相关设置 dev_update_off () dev_c ...

  4. HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片

    HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片 示例程序源码(加注释) dev_update_off () dev_close_window ...

  5. HALCON示例程序rim.hdev轮圈孔检测提取字符

    小哥哥小姐姐觉得有用点个赞呗! HALCON示例程序rim.hdev轮圈孔检测提取字符 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_close_window ...

  6. HALCON示例程序novelty_detection_dyn_threshold.hdev纱网缺陷检测

    HALCON示例程序novelty_detection_dyn_threshold.hdev纱网缺陷检测 示例程序源码(加注释) 关于显示类函数解释 dev_update_window ('off') ...

  7. HALCON示例程序measure_metal_part_id.hdev使用xld边缘拟合检测零件加工是否合格

    HALCON示例程序measure_metal_part_id.hdev使用xld边缘拟合检测零件加工是否合格 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () Imag ...

  8. HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷检测

    HALCON示例程序inspect_bottle_mouth.hdev玻璃瓶口缺陷检测 示例程序源码(加注释) 定义变量并初始化 SmoothX := 501 ThresholdOffset := 2 ...

  9. HALCON示例程序count_fish_sticks.hdev鱼棒完整性检测

    HALCON示例程序count_fish_sticks.hdev鱼棒完整性检测 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_close_window () ...

最新文章

  1. 中山学院计算机学院家长座谈会,计算机科学与技术学院举办校友座谈会
  2. java base64解码出错_Java Base64解码错误及解决方法
  3. caffe模型文件解析_Caffe ImageData神经网络基本示例无法解析模型文件
  4. 利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强
  5. 晶振波形不是正弦波_晶振的分类及其应用
  6. magento开启模板路径提示
  7. php 关闭 row,MySql php:检查Row是否存在
  8. sql 数据库检查_数据库检查点– SQL Server 2016中的增强功能
  9. 调整Linux磁盘分区大小
  10. Python 玩出花了!一文教你用 Python 制作吃豆人游戏! | 附代码
  11. c语言,指针与数组--指针与二维数组2
  12. 想知道如何批量压缩图片?来试试这几个图片压缩工具
  13. Matlab 划分网格,三维曲面,网格划分好之后还需要提取网格上的每个点的位置坐标,之后需要用这些点的坐标进行运算。望各位大佬解惑,感激不尽
  14. 北航超算运行matlab,超50万亿次!北航学子又破世界纪录,他们获得全球总决赛一等奖!...
  15. 测量计算机编程fx500,工程测量中fx-500P计算器基本程序.doc
  16. 我国数学家丁小平先生在微积分研究领域所取得的成就
  17. 透明、反光材质护肤品拍摄技巧
  18. --仿蓝色理想网站的导航菜单--
  19. 中国最美丽地方排行榜及游览最佳时间
  20. python羊车门问题的蒙特卡洛解法

热门文章

  1. 阿里云应用实时监控服务ARMS接入
  2. 机房收费系统合作版(四):一路走来感谢有你相伴
  3. BZOJ3827[Poi2014] Around the world
  4. Python调用谷歌翻译接口
  5. c# 通过反射获取类的属性和属性类型
  6. Facebook创始人:不穿袜子的亿万富翁
  7. CT值(亨氏值H) 孔隙率 像素点 灰度值 RGB
  8. google pinyin下如何输入英文
  9. CTF解题记录-Misc-当铺秘密
  10. java通讯录课程设计_java课程设计_通讯录_通讯簿.doc