Halcon极坐标变换检测缺陷

2023-11-16

一、原图

 

二、通过极性变换拉直

三、检测缺陷

 

 

* This example checks bottle necks for defects.
* First, the bottle is detected with basic morphology,
* edge detection and circle fitting.
* Then, the neck area is transformed with a polar transformation.
* After that, in the transformed image a dynamic threshold is used
* to detect defects. Finally, the results are displayed.
* 
* 
* tuning parameters
SmoothX := 501
ThresholdOffset := 25
MinDefectSize := 50
* 
* initialization
PolarResolution := 640
RingSize := 70
get_system ('store_empty_region', StoreEmptyRegion)
set_system ('store_empty_region', 'false')
read_image (Image, 'bottles/bottle_mouth_01')
dev_update_off ()
dev_close_window ()
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, 640, 512, WindowHandle1)
set_display_font (WindowHandle1, 16, 'mono', 'true', 'false')
dev_display (Image)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_open_window_fit_size (0, 648, RingSize, PolarResolution, 150, 512, WindowHandle)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
* 
* Main loop
* 
* Detect defects in bottle necks
for Index := 1 to 16 by 1
    read_image (Image, 'bottles/bottle_mouth_' + Index$'.02')
    * 
    * Part 1: Use basic morphology to detect bottle
    auto_threshold (Image, Regions, 2)
    select_obj (Regions, DarkRegion, 1)
    opening_circle (DarkRegion, RegionOpening, 3.5)
    closing_circle (RegionOpening, RegionClosing, 25.5)
    fill_up (RegionClosing, RegionFillUp)
    boundary (RegionFillUp, RegionBorder, 'outer')
    dilation_circle (RegionBorder, RegionDilation, 3.5)
    reduce_domain (Image, RegionDilation, ImageReduced)
    * 
    * Find the bottle center by fitting a circle to extracted edges
    edges_sub_pix (ImageReduced, Edges, 'canny', 0.5, 20, 40)
    segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2)
    union_cocircular_contours_xld (ContoursSplit, UnionContours, 0.9, 0.5, 0.5, 200, 50, 50, 'true', 1)
    length_xld (UnionContours, Length)
    select_obj (UnionContours, LongestContour, sort_index(Length)[|Length| - 1] + 1)
    fit_circle_contour_xld (LongestContour, 'ahuber', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
    * 
    * Part 2: Transform the ring-shaped bottle neck region to a rectangle
    gen_circle (Circle, Row, Column, Radius)
    dilation_circle (Circle, RegionDilation, 5)
    erosion_circle (Circle, RegionErosion, RingSize - 5)
    difference (RegionDilation, RegionErosion, RegionDifference)
    reduce_domain (Image, RegionDifference, ImageReduced)
    polar_trans_image_ext (ImageReduced, ImagePolar, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 'nearest_neighbor')
    * 
    * Part 3: Find defects with a dynamic threshold
    * Note the strong smoothing in x-direction in the transformed image.
    scale_image_max (ImagePolar, ImageScaleMax)
    mean_image (ImageScaleMax, ImageMean, SmoothX, 3)
    dyn_threshold (ImageScaleMax, ImageMean, Regions1, 55, 'not_equal')
    connection (Regions1, Connection)
    select_shape (Connection, SelectedRegions, 'height', 'and', 9, 99999)
    * ignore noise regions
    closing_rectangle1 (SelectedRegions, RegionClosing1, 10, 20)
    union1 (RegionClosing1, RegionUnion)
    * re-transform defect regions for visualization
    polar_trans_region_inv (RegionUnion, XYTransRegion, Row, Column, 0, rad(360), Radius - RingSize, Radius, PolarResolution, RingSize, 1280, 1024, 'nearest_neighbor')
    * 
    * Part 4: Display results
    * display original image with results
    dev_set_window (WindowHandle1)
    dev_display (Image)
    dev_set_color ('blue')
    dev_display (RegionDifference)
    dev_set_color ('red')
    dev_display (XYTransRegion)
    * display polar transformed inspected region with results
    * The image and resulting region are rotated by 90 degrees
    * only for visualization purposes! (I.e. to fit better on the screen)
    * The rotation is NOT necessary for the detection algorithm.
    dev_set_window (WindowHandle)
    rotate_image (ImagePolar, ImageRotate, 90, 'constant')
    dev_display (ImageRotate)
    count_obj (RegionUnion, Number)
    if (Number > 0)
        mirror_region (RegionUnion, RegionMirror, 'diagonal', PolarResolution)
        mirror_region (RegionMirror, RegionMirror, 'row', PolarResolution)
        dev_display (RegionMirror)
        disp_message (WindowHandle1, 'Not OK', 'window', -1, -1, 'red', 'false')
    else
        disp_message (WindowHandle1, 'OK', 'window', -1, -1, 'forest green', 'false')
    endif
    if (Index < 16)
        disp_continue_message (WindowHandle1, 'black', 'true')
        stop ()
    endif
endfor
* Reset system parameters
set_system ('store_empty_region', StoreEmptyRegion)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Halcon极坐标变换检测缺陷 的相关文章

  • Halcon无图像旋转时的图像拼接

    为了将尺寸较大的产品拍完 xff0c 可采用分区拍摄再拼图的方式 那么 xff0c 如何使用Halcon中的算子进行图像拼接呢 xff1f 本文介绍一种在相机无旋转的情况下使用tile images offset进行图像拼接的方法 该方法计
  • Qt与halcon联合开发实现基于形状的模板匹配

    目录 前言 一 基于形状的模板匹配是什么 xff1f 二 具体实现 1 算子介绍 2 关键代码实现 总结 前言 第一次在CSDN写博客 xff0c 准备写一个简单的形状匹配算子的用法及实现的介绍 一 基于形状的模板匹配是什么 xff1f 基
  • Halcon齿轮测量

    Halcon齿轮测量 xff08 Halcon学习笔记 xff09 齿轮灰度图像如下 xff1a Halcon齿轮测量设计流程 首先进行阈值分割并利用面积特征选取出齿轮部分 xff1a 创建圆的XLD轮廓 xff1a 进行尺寸测量 xff1
  • halcon中阈值分割算子用法

    1 threshold Image Region MinGray MaxGray xff1a 通过给定的阈值区间对图像进行分割 效果图 xff1a read image Audi2 39 audi2 39 fill interlace Au
  • halcon边缘检测

    边缘检测 Ronny丶 博客园 寻找边缘的传统方法 xff0c 即图像中的暗 光转换 xff0c 是应用边缘滤波器 这些滤光器可以在光和暗区域的边界找到像素 从数学术语中来说 xff0c 这意味着这些滤波器决定了图像的梯度 此图像渐变通常作
  • halcon计算仿射矩阵的函数参数中的x和y

    最近opencv和halcon混用 Row Column x y显然已经快乱套了 正常来说 x对应Column y对应Row 是符合自然规律的 但在halcon计算仿射矩阵的函数中参数含义是如下的 hom mat2d translate T
  • C# 联合Halcon开发的完整项目案例(三套完整源码)附下载连接

    C 联合Halcon开发的完整项目案例 三套完整源码 点我下载三套项目源码 1 C 联合Halcon开发的程序 一整套源码 相机点胶定位 图像采集 数据查询相机间通讯具体情况如下图所示 案例注释详细 方便二次开发 2 C Halcon Vi
  • Halcon仿射变换图片(旋转、缩放、平移)

    一 实验要求 把图片中的书摆正 二 实现代码 仅旋转 旋转变换 read image Image C Users 86159 Pictures Saved Pictures 1作业图片 5 2 1 jpg dev close window
  • Halcon Qt 环境一次性配置

    新建 halcon pri文件 halcon pri 内容 INCLUDEPATH C Program Files MVTec HALCON 20 11 Steady include INCLUDEPATH C Program Files
  • Winform控件

    Winform控件 button 单选框 多选框 文本框 标签 显示图片控件 进度条属性 Halcon图片在PictureBox控件中显示 添加Halcon的引用 编写的代码如下 在PictureBox中显示图像变量HObject 先将之前
  • Halcon--灰度腐蚀、二维码识别、图像增强

    二维码识别 create find 识别不到一般对调整识别模型参数 或者对图像进行处理 常用灰度增强或者对比度增强 read image Image datacode ecc200 ecc200 to preprocess 003 gray
  • Halcon: (示例 1)OCR 字符识别

    目录 示例 涉及算子描述 text line orientation hom mat2d identity hom mat2d rotate affine trans image dots image reduce domain vecto
  • Halcon-表面检测-----裂纹检测

    对应示例程序 detect mura defects blur hdev 目标 实例实现LCD上有很多污点干扰下 检测LCD的印痕检测 思路为 对LCD图像进行拆分 提取RGB三个分量 对B分量进行处理 将其转换为频域内图像 并对其进行高斯
  • halcon识别斜着的车牌

    对于倾斜的车牌 我们必须用仿射变换 将车牌弄正 再进行识别 如图 halcon代码 read image Image666 C Users Administrator Desktop 666 jpg decompose3 Image666
  • halcon颜色识别

    halcon颜色识别 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 使用灰度平均值 循环读图进行处理 HSV模型区分颜色 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 dev cl
  • Halcon 拟合直线

    本文用 Halcon 的矩阵操作实现最小二乘拟合直线 首先随机生成一组数据 Mx 100 10 500 tuple length Mx len tuple gen const len 5 r Ma 2 Mb 40 tuple rand le
  • QT6+Halcon

    2020年12月8日 Qt公司正式发布了Qt 6 0 这一软件开发平台全新的主要版本 Qt 6 0 已被重新设计为面向未来 以生产力为重点的基础平台 QT迎来一个新时代 Qt Halcon这种组合在机器视觉方面应用非常广泛 一 Qt6全新理
  • halcon起步

    halcon起步 安装 软件介绍 安装 下载地址 管理员方式运行 选择安装 否 复制dll文件 D Program Files MVTec HALCON 12 0 bin x64 win64 重启计算机 软件介绍 打开药品识别例程 导出为c
  • 调用halcon函数时的错误处理

    注 以下材料来自halcon帮助文档 因水平有限 难免有误 欢迎指正 0 概述 在遇到一个运行时错误时 HALCON C 会以默认的方式给出错误信息 并终止程序 然而 在某些情况下 我们并不希望按照这样的规则来处理错误 例如 当一个程序允许
  • Halcon模板匹配

    Halcon模板匹配 Halcon模板匹配的方法 模板匹配的流程 基于形状的模板匹配的思路 原理 Halcon模板匹配的方法 模板匹配的流程 基于形状的模板匹配的思路 读取图像 转灰度图 dev close window dev open

随机推荐

  • 视频格式无损/快速转换——ffmpeg(mkv等转mp4)

    非商业用途转载请务必注明出处 https blog csdn net qq 40491305 article details 103272651 最近用PR发现不支持mkv格式 需要转化为mp4 考虑到快速 无损以及我仅仅需要转码 懒得使用
  • java.lang.ArrayIndexOutOfBoundsException(数组越界)处理方法

    转发自https blog csdn net qq 34646449 article details 76146659 当你使用不合法的索引访问数组时会报数组越界这种错误 数组arr的合法错误范围是 0 arr length 1 当你访问这
  • 使用反射动态校验后台配置某字段是否允许为空

    背景 使用easyExcel读取数据 title不固定 后台可以配置title必填项 title顺序可改变 用户可以自定义title 不存储自定义信息即可 不报错 思路 不能使用easyExcel使用index的方式读取数据 改成value
  • 文件在使用FileChannel.map后不能被删除(Windows上)

    同事发现在Windows上使用FileChannel的map方法之后 不能够删除掉文件 我在Linux上试了一下 发现没这个问题 做个笔记 记录一下 import java io File import java io RandomAcce
  • Unity笔记之获取鼠标停留的UI和删除按键触发后引用、判断鼠标是否在UI上

    需求 鼠标放在UI上 需要获取这个UI物体 以方便进行其他操作 百度学习了半天 最终拿了一个大哥 添加链接描述 的内容 本文仅作为个人笔记 建议大家直接去这大哥的博客看 不过我记得好像也可以通过继承unity内部的鼠标事件接口获取到物体 但
  • java.io.StreamCorruptedException: invalid type code: AC错误解决

    最近做IO时 出现了一个我百思不得其解的错误 虽然经过一番 解决的bug 但是对于这一方面的底层知识还是有待去深入了解 借这个机会 好好学习一下 一般 可以使用ObjectInputStream把对象写出到文件 再使用ObjectOutpu
  • 五分钟告诉你什么是爬虫?

    1 什么是爬虫 把互联网比喻成一张网 那么爬虫就是网上爬行的蜘蛛 把网的节点比喻成一个个网页 爬虫爬取到就相当于访问了该页面 获取了其信息 爬虫可以通过一个节点之后 顺着节点连线 链接 继续爬行到下一个节点 即通过一个网页继续获取后续的网页
  • 直播 RTM 推流在抖音的应用与优化

    动手点关注 干货不迷路 背景 随着互联网技术以及网络基建的快速发展和普及 视频直播已经成为了一种越来越普遍的娱乐和社交方式 无论是个人还是企业 都可以通过视频直播平台进行直播活动 向观众展示自己的生活 工作或者产品 同时 视频直播也成为了一
  • sqlmap自动注入1(Target完整的超级详细 如有错误望指出)

    SQLmap的自动注入学习之路 1 是通过五种sql注入漏洞的检测技术 and select from select sleep 20 a 这是基于时间的盲注检测 看他返回的时间 可以在DVWA试试 sqlmap支持非常全面的 数据库管理系
  • 咬了一口苹果死去的计算机之父——图灵

    艾伦 麦席森 图灵 Alan Mathison Turing 1912年6月23日 1954年6月7日 英国数学家 逻辑学家 被称为计算机科学之父 人工智能之父 1910年左右的伦敦 1912年生于英国伦敦帕丁顿 家族成员里有三位当选过英国
  • 星网宇达-组合导航在ros系统中的使用方法

    1 安装差分天线 两个 组合导航主机 DTU模块 不使用基站GPS的定位精度是米级的 园区里面自己搭建基站用DTU进行数据传输精度可达到厘米级 也可以利用千寻基站进行定位 效果不清楚 2 根据 杆臂以及天线安装说明文档 进行天线安装和杆臂配
  • 数据分析03——矩阵常用计算方法和函数

    0 前言 数组 计算机领域的概念 矩阵 数学领域的概念 对于Numpy而言 矩阵是数组的分支 1 创建矩阵 字符串创建矩阵 mat1 np matrix 1 2 3 4 列表形式创建矩阵 mat2 np matrix 5 6 7 8 通过数
  • QTextDocument和QTextBlock

    QTextDocument QTextDocument是用于结构化富文本文档的容器 为样式文本和各种类型的文档元素 如列表 表格 框架和图像 提供支持 可以创建它们以在QTextEdit中使用 也可以独立使用 每个文档元素均由关联的格式对象
  • 可视化工具Netron介绍

    Netron是一种用于神经网络 深度学习和机器学习模型的可视化工具 它可以为模型的架构生成具有描述性的可视化 descriptive visualization 源码在 https github com lutzroeder netron
  • Taro安装、启动命令、创建项目、修改端口号以及如何在微信开发者工具内运行

    1 安装Taro开发工具 npm install g tarojs cli 或者yarn global add tarojs cli 使用npm可能会有一些报错的信息 建议使用cnpm安装 2 使用命令创建模板 taro init myAp
  • 教你如何基于Redis来实现高性能延时消息队列!

    最近在倒腾自建博客后端系统 需要用到延时任务的功能 但手头只有一套MySQL和Redis 如果搞一套MQ成本有点大 于是想着用redis实现延时消息队列 有些场景用数据库的定时扫表也能简单实现延时消息的功能 不过对于我这边的实际场景 比如计
  • C#学习笔记 任务操作

    利用线程 可以方便地进行异步操作 但是线程模型有一个缺点 就是无法处理返回值 要在不同线程之间传递数据比较麻烦 任务则解决了这个问题 完整代码在这里 https github com techstay csharp learning not
  • 流程控制和数组(下)

    文章目录 Java 类 Arrays Java 类 Arrays Java提供的Arrays类里包含的一些statics修饰的方法可以直接操作数组 这个Arrays类里包含了如下的几个static修饰的方法 static修饰的方法可以直接通
  • 【数据挖掘】数据清洗

    数据挖掘 数据清洗 数据挖掘一般流程 数据挖掘一般流程 需求分析 数据挖掘任务分类 1 预测 分类 回归 2 聚类 文档归类 3 关联性分析 购物篮分析 4 异常检测 信用卡欺诈 获取数据 sql linux 爬虫 数据清洗 主要 去重 缺
  • Halcon极坐标变换检测缺陷

    一 原图 二 通过极性变换拉直 三 检测缺陷 This example checks bottle necks for defects First the bottle is detected with basic morphology e