• 核酸管外观缺陷检测(一)


    1.1 应用示例思路

    (1) 对核酸管图像进行灰度化、阈值分割和连通域分析;

    (2) 筛选出待检测的区域,并对该区域进行变换校正;

    (3) 进一步获取待检测的ROI区域,并根据几何特征和阈值条件,来对核酸管外观进行检测;

    (4) 将检测结果写入txt文档。

    1.2 应用示例代码

    1. *统计核酸管外观正常的数组
    2. P_Tuple:=[]
    3. *统计核酸管外观缺陷的数组
    4. N_Tuple:=[]
    5. *判断文件是否存在
    6. file_path:= './核酸管外观缺陷检测统计1.txt'
    7. file_exists (file_path, file_exist)
    8. if (file_exist==1)
    9. delete_file (file_path)
    10. endif
    11. open_file (file_path, 'output', FileHandle)
    12. *获取文件路径列表
    13. list_files ('./Test_img/', ['files','follow_links'], ImageFiles)
    14. *文件筛选
    15. tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
    16. for Index := 0 to |ImageFiles| - 1 by 1
    17. img_path:=ImageFiles[Index]
    18. *img_path:='./Test_img/Image_20230420091226458.bmp'
    19. *文件名拆分
    20. parse_filename (img_path, BaseName, Extension, Directory)
    21. *读取核酸管图片
    22. read_image (Image, img_path)
    23. *灰度化
    24. rgb1_to_gray (Image, GrayImage)
    25. *阈值分割
    26. threshold (GrayImage, Region, 30, 145)
    27. *填充孔洞
    28. fill_up (Region, RegionFillUp)
    29. *连通区域分析
    30. connection (RegionFillUp, ConnectedRegions)
    31. *获取面积
    32. area_center (ConnectedRegions, Area, Row, Column)
    33. *通过面积筛选区域
    34. select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500000, 800000)
    35. *获取区域外接矩形
    36. smallest_rectangle2 (SelectedRegions, Row1, Column1, Phi, Length1, Length2)
    37. *创建变换模型
    38. vector_angle_to_rigid (Row1, Column1, abs(Phi), Row1, Column1, acos(0.0), HomMat2D)
    39. *进行区域变换
    40. affine_trans_region (SelectedRegions, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
    41. *获取区域外接矩形(平行于坐标轴)
    42. smallest_rectangle1 (RegionAffineTrans, Row11, Column11, Row12, Column12)
    43. *裁剪区域
    44. clip_region (RegionAffineTrans, RegionClipped1, Row11, Column12-200, Row12, Column12)
    45. *获取区域外接矩形(平行于坐标轴)
    46. smallest_rectangle1 (RegionClipped1, Row21, Column21, Row22, Column22)
    47. *裁剪区域
    48. clip_region (RegionClipped1, RegionClipped2, int((Row21+Row22)/2.0)-20, Column12-200, int((Row21+Row22)/2.0)+20, Column12)
    49. *获取区域外接矩形(平行于坐标轴)
    50. smallest_rectangle1 (RegionClipped2, Row31, Column31, Row32, Column32)
    51. distance:=Column32-Column31
    52. if(distance>=180)
    53. dev_clear_window ()
    54. get_image_size (Image, Width, Height)
    55. dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle)
    56. dev_display (Image)
    57. *设置颜色
    58. dev_set_color ('green')
    59. *显示字符
    60. set_tposition (WindowHandle, 10, 5) //设置文本光标1的位置
    61. write_string (WindowHandle, '核酸管外观正常!')
    62. set_tposition (WindowHandle, 50, 5) //设置文本2光标的位置
    63. write_string (WindowHandle, ['核酸管外观正常的图片名:',BaseName])
    64. dev_close_window ()
    65. P_Tuple:=[P_Tuple,1]
    66. fwrite_string(FileHandle,[Index,'核酸管外观正常的图片名:',BaseName])
    67. fnew_line(FileHandle)
    68. else
    69. dev_clear_window ()
    70. get_image_size (Image, Width, Height)
    71. dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle)
    72. dev_display (Image)
    73. *设置颜色
    74. dev_set_color ('green')
    75. *显示字符
    76. set_tposition (WindowHandle, 10, 5) //设置文本光标1的位置
    77. write_string (WindowHandle, '核酸管外观有缺陷!')
    78. set_tposition (WindowHandle, 50, 5) //设置文本2光标的位置
    79. write_string (WindowHandle, ['核酸管外观缺陷的图片名:',BaseName])
    80. dev_close_window ()
    81. N_Tuple:=[N_Tuple,0]
    82. fwrite_string(FileHandle,[Index,'核酸管外观缺陷的图片名:',BaseName])
    83. fnew_line(FileHandle)
    84. endif
    85. endfor
    86. tuple_length (P_Tuple, P_Length)
    87. tuple_length (N_Tuple, N_Length)
    88. Yield_Rate:= real(P_Length)/real(N_Length+P_Length)
    89. fwrite_string(FileHandle,['核酸管良品率:',Yield_Rate])
    90. fnew_line(FileHandle)
    91. close_file (FileHandle)

    1.3 结果展示

    (1) 单张图片检测结果:

     (2) 部分图片检测结果:

     

  • 相关阅读:
    架构设计基础设施保障 - IaaS之网络篇
    红外物理学习笔记 ——第三章
    Java毕业设计-基于springboot开发的网上租赁系统设计与实现-毕业论文(附毕设源代码)
    Python测试之Pytest详解
    差异备份详细说明(InsCode AI 创作助手)
    处理多对一映射关系的三种方法
    基于Skeleton的手势识别:SAM-SLR-v2
    2022-12-02 编译Android平台OpenCV,用到读取视频时报错:AMediaXXX
    算法学习的积累
    从概念到现实:ChatGPT 和 Midjourney 的设计之旅
  • 原文地址:https://blog.csdn.net/qq_44744164/article/details/133897935