③、I 表示的搜索图像中的和模板一样大的一个子块,很明显这个累加有多重方法可以快速的实现,比如比较原始的积分图技术,或者我的BoxBlur里的那种更为快速的实现,这一项也是和参数无关的。...X/Y值乘以2,那么为了保证在下一层中的精度,此时的搜索区域需要适当的增大,比如选择匹配点周围5*5或者7*7的一个区域,然后在这感兴趣的区域中再进行一个局部的匹配计算,此时只需要计算25或者49次小匹配的计算...在单目标时,我们对最高层金字塔进行了全图匹配后,只需要取最大的匹配值作为候选点,这也是理所当然的,当问题来到多目标时,一个自然的想法就是对匹配值进行排序,然后取前N个最大值作为候选点。...,比如我从一个未旋转图像中扣一个矩形出来作为模板, 然后把图像旋转各10度,用halcon对模板进行匹配,得到的结果哪怕选择亚像素也不会是精确的10度。...在上面边缘处局部的方法图中,我们可以看到,由于插值的特性,边缘处未能在原始图像中采集到足够的采样点,因此,选择了红色背景色作为融合的基色,此时的结果像素就不完全是属于原始图像了,怎么办?
本文将详细讲解如何利用 Halcon的HWindowControl控件 和 WinForm事件机制,实现流畅的图像缩放、平移、框选等交互功能,并提供完整的代码示例与优化技巧。...4.7.2 或 .NET 6.0+ WinForm项目 1.2 Halcon控件集成 添加Halcon的HWindowControl到工具箱: 右键工具箱 → 选择项 → 浏览并添加 halcondotnet.dll...- dragStartPos.Y; // 获取当前窗口可见区域 hWindowControl1.HalconWindow.GetPart(outint...1.05 : 1.1; 七、总结与扩展 通过 WinForm + Halcon 的组合,开发者可以快速构建高性能图像交互系统。...:GitHub链接 Halcon官方文档:Halcon/.NET接口指南 通过合理利用Halcon的算子和WinForm的事件机制,开发者能够轻松实现专业级图像交互界面。
,如果是,则这个点是合格的,不是,则这个像素点就是不合格的区域。 ...Mode参数有3个选择,: 'standard', 'robust', 'direct',这也是这个算子的灵魂所在,具体的做法后续再说,在创建时只是保存了他们的值,并没有做什么。 ...',训练结果的 ideal image 值应该是(实际还需要四舍五入求整): 当选择模式为 'robust',训练结果的 ideal image 值应该是: 当选择'standard...选择'robust'模式时, ideal image好说,就是取中间值,但是对于variation image,并不是普通的方差图像,在halcon中时这样描述的:The corresponding variation...Halcon内部的计算公式为: i(x,y)是前面得到的Ideal Image, v(x,y)为variation image, au/al/bu/bl即为算子的输入参数。
对于工业应用来说,往往需要用到形状匹配来达到定位功能,VisionPro的PatMax算法,Halcon的形状匹配算法都是基于边缘的模版匹配。...(2).提取模板的边缘。依据Canny算法的原理,提取边缘点。 (3).计算边缘点在的x,y方向的梯度值以及总的梯度值。...(4).保存边缘点对应的x,y梯度,并将梯度强度归一化处理以消除光照不均的影响(1除以该点梯度强度,这样得到的值都是[0,1]区间内的值)并将边缘点坐标转换为相对于重心的相对坐标 经过以上操作,我们便建立好了一系列旋转...找到评分最高的点就是匹配到形状的重心。所用模板的旋转和缩放系数,就对应搜索图像中目标的旋转和缩放。其中金字塔用来对算法进行加速。...先在顶层金字塔进行快速搜索匹配得到一个匹配位置,然后在下一层金字塔进行匹配的时候就能在该区域的roi内进行搜索,以此类推,直到最底层。通过金字塔可以大大加快匹配速度。
本期文章继续介绍缺陷检测专题的第六个案例,用OpenCV实现Halcon中一个瓶口缺陷检测的实例,前面案例链接如上↑↑↑。...Halcon中对应的例子为inspect_bottle_mouth.hdev,用于检测酒瓶瓶口是否出现破损等缺陷情形,检测效果如下: (1) 正常情瓶口完整,无破损 ?...Halcon实例主要步骤包含五步,分别是: 使用阈值处理和形态学粗定位品口位置; XLD轮廓拟合最近似的圆形区域作为瓶口的轮廓; 极坐标变换,转换到水平或垂直方向进行处理; 均值滤波图与原图做差分,根据阈值提取...---- 具体的实现代码大家有兴趣看下Halcon的实例代码,这里有几个重要步骤需要对比说明: (1) 瓶口轮廓粗定位,OpenCV实现是根据瓶口部分区域为黑色且明显易于提取所以选择了HSV...(3) 均值滤波做差分,注意这里的均值滤波核大小,一般我们都是设置(3,3)或(5,5)等,这里物体垂直方向较长,参考Halcon例子中设置为(3, 501),看效果: blur = cv2.blur(
Halcon是一款先进的机器视觉软件,主要用于工业自动化、机器人视觉等领域。它拥有强大的计算能力、丰富的图像处理库和友好的界面,可以帮助用户快速、高效地进行图像处理和分析。...同时,Halcon还支持自定义算法,用户可以根据自己的需求编写自己的处理函数。在图像处理过程中,Halcon还提供了丰富的图像分析工具,可以帮助用户对图像进行分析和识别。...2、进入halcon-21.11.0.0-x64-win64文件夹,右键点击【som.exe】文件,选择以【管理员身份运行】。3、点Welcome页面左上角的【x】关闭欢迎说明。...threshold:对图像进行二值化处理,将灰度图像转换为黑白图像dev_display:在屏幕上显示图像reduce_domain:将图像对象限制在指定的区域内crop_domain:裁剪图像对象的指定区域...:对图像进行闭运算,填补空洞gen_circle:生成圆形区域对象gen_rectangle1:生成矩形区域对象affine_trans_image:对图像进行仿射变换,如旋转、平移、缩放等这些函数可以帮助用户进行图像处理
Halcon 定义了自己独有的数据结构,本文记录相关内容。 简介 HALCON 数据参数主要有图形参数和控制参数。其中,图形参数包括图像、区域、亚像素轮廓,控制参数包括数组和字典。...该图像由很多个方格组成,每个方格称为像素,每一个方格用一个数值来表示,像素点的灰度值可取很多个数值,8 位图像取值范围为 0~255 HALCON 的图像数据类型有 10 种: 类型 描述 byte 即...为了更好地描述边缘亚像素轮席,HALCON 规定了两种不同的亚像素轮廓:一种是插值计算的亚像素轮廓;另一种通过多边形通近方式得到的亚像素轮廓。...Tuple是一个用于数据存储的数据结构,一般情况下黑白图像 lmage区域 Region和像素轮(XLD)称为 HALCON 的对象,也就是 HObject。...在 HALCON 中字典的值可以是 HObjet,即图像、区域、亚像素轮;也可以是数组。键的值可以是数字和字符中,HALCON 中的字典还有一个句柄(Handle)作为这个字舞的标识。
取值列表:x,y Px (输入参数):变换的固定点x坐标 Py (输入参数):变换的固定点y坐标 HomMat2DSlant (...坐标 Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数)输出仿射变换矩阵...坐标 Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:(输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数)输出仿射变换矩阵 dev_clear_window...坐标 Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:(输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数)输出仿射变换矩阵...(如果从图像空间变换到物理空间,就是x方向的像素单量) Sy (输出参数):y方向的缩放因子(如果从图像空间变换到物理空间,就是y方向的像素单量) Phi
前面有两篇文章谈到了模板匹配算法,分别是【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)...选择水平方向实现最为简单和高效。...,而第二个图,扩展后的图进行检测,会看到在无效区域有一些额外的边缘出现,但是经过蒙版裁剪这些区域就消失了。...扩展: 整个表达式是一个归一化的式子,因为模板进行了Canny筛选,但是原图对应的位置是动态的,如果在原图中遇到那种比较光滑的地方(梯度值很小),比如GxS = 1, GyS = 2,这样的值,无论模板对应处的梯度如何...10、halcon有基于形状的多目标、多角度、多缩放尺度的模板检测,这个现在也在想,如何减少计算量,有点麻烦。
德国的SICK、AT相机是工业检测应用中用的比较多的两款3D相机了,最高行频都可以做到几十KHZ,以AT相机为例,具体参数如下: ?...相机选择 需要选择的像素点数不低于80/0.1=800;对应的行频不低于2000/0.1=20KHZ。 相机能达到的最大行频,取决于ROI有效区域的大小、曝光时间和轮廓提取算法等。...而ROI有效区域的大小又取决于材料的厚度范围,曝光时间一部分取决于材料的材质(有的材料比如橡胶轮胎为黑色吸光的材质,在同等光源亮度情况下,需要的曝光时间要高一些) 2)镜头选择 这个跟2D一致。...(即高度越高的物体,对应的灰度值越亮还是越暗)。...简单总结:相机自身安装是有方向的,若激光在相机的正方向的上面,则高度越高的物体,对应的灰度值越低;否则对应的灰度值越高。
本文记录 Halcon 中的基础语法。...变量的创建与赋值 在HALCON中可以创建变量并为变量赋值: Image变量的赋值 read_image(Image,'test.jpg') 区域的赋值 gen_rectanglel(Rectangle...:= Contours Tuple的创建赋值 EmptyTuple := [] Value := 1 ValueArray := [2, 10] 创建相同值的数组 tuple_gen_const(10,5...,Newtuple) if 语句 if 语句用于条件选择,即根据不同条件选择执行不同的主体语句 语法: if(条件) 主体语句 elseif(条件) 主体语句 else 主体语句 endif for...循环语句 介绍 HALCON的 for 循环语句。
19. plane_deviation 功能:从近似像平面计算灰度值的偏差。 20. select_gray 功能:选择基于灰度值特征的区域。...29. runlength_features 功能:区域扫描宽度编码的特征值。 30. select_region_point 功能:选择包括给定像素在内的所有区域。...3. create_funct_1d_array 功能:从Y值的序列中创建一个函数。 4. create_funct_1d_pairs 功能:从(X,Y)集合中创建一个函数。...9. get_y_value_funct_1d 功能:返回任意位置函数的值。 10. integrate_funct_1d 功能:计算一个函数的正区域和负区域。...23. x_range_funct_1d 功能:函数的最小和最大X值。 24. y_range_funct_1d 功能:函数的最小和最大Y值。
使用普通面阵相机,需要自己提取轮廓线,并通过标定来重建深度图像,Halcon里面有现成的例程进行实现。如果对行频要求不高、Z向精度要求不高的场合,完全可以使用高速面阵相机来实现。...相机选择 需要选择的像素点数不低于80/0.1=800;对应的行频不低于2000/0.1=20KHZ。 相机能达到的最大行频,取决于ROI有效区域的大小、曝光时间和轮廓提取算法等。...而ROI有效区域的大小又取决于材料的厚度范围,曝光时间一部分取决于材料的材质(有的材料比如橡胶轮胎为黑色吸光的材质,在同等光源亮度情况下,需要的曝光时间要高一些) 2)镜头选择 这个跟2D一致。...(即高度越高的物体,对应的灰度值越亮还是越暗)。...简单总结:相机自身安装是有方向的,若激光在相机的正方向的上面,则高度越高的物体,对应的灰度值越低;否则对应的灰度值越高。
至于是选择列方向的分块矩形还是行方向的,则和算法本身的优化有一定的关系,比如在本例中,由于SIMD的特性,我们在计算腐蚀或者膨胀的时候,利用的有关的G值和H值在垂直方向计算时可方便的使用SIMD指令进行比较...,因此,选择列方向的分块则更为有利。 ...那么对于二值图像的腐蚀和膨胀,我们在超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码) 一文中有提高一种更为特别的优化手段。那么这个手段但让也可以用到本例中来。...接下来的每一行数据, 都必然是3个数字,每个数字之间用空格隔开, 第一个数据是指这个行所在的行号(以0为下标起点),第二个数据只区域的起点, 第三个数据只区域的 终点。 ...接下来的数据就是Halcon独有的了,我的和CV的都不具有这个功能,他还能指定structuring element 每个位置对应的偏移量值,就在对应位置的元素值加上这个偏移量值作为计算腐蚀和膨胀的依据
右键解决方案的依赖项,选择“添加引用”; ? c. 点击浏览,找到halcon安装目录下的halcondonet.dll, 添加-》确定; ? d....右键项目“CountObjTool”,点击“添加” -》“现有项”,选择刚才导出的程序文件; ? f....选择项目CountObj,右键"引用" - 》"添加引用"; b. 选择"项目" -》"CountObjTool"; ? c.选择"浏览" -》"halcondotnet.dll"; ?...勾选中下图加深的两个halcon组件,并点击确定; ? f.工具会更新如下halcon显示控件; ? ? Step 7 : 软件界面设计 a.添加如下窗体控件; ?...; 右键项目”CountObj“,选择“设为启动项目”; 右键项目”CountObj“,选择”属性“,取消勾选”首选32位“;(64位halcon) ?
Halcon中的threshold函数定义如下,提取低阈值和高阈值之间的灰度值 ?...简单来说,Halcon的threshold函数是获取区间[a, b]之间的灰度值,OpenCV的threshold只能针对大于或者小于a或者b的灰度值处理,一个是双阈值,一个是单阈值。...比如下面这张图,我通过Halcon先转为灰度图,然后用Ctrl + 鼠标可以获取每个区块的灰度值,如下下图(灰度值用黄色标出) ? ?...那么,如果我想获取灰色的矩形区域,只要设置低阈值小于127且大于90,高阈值大于127且小于137即可,当然,用Halcon的灰度直方图助手更快捷方便 ? ?...---- Halcon提供了这样的方法,可以简单实现,那么OpenCV怎么实现呢?
注意,这里的旋转获得不仅仅是旋转后特征的坐标位置(可能需要取整),而且特征的本质属性(对于linemod,是量化到0和8之间的角度值,对于我们标准的基于梯度的计算式,则是归一化后的X和Y方向的梯度值)也同步予以获取...,但是确实可以识别到,就是因为在模版图的特征提取中,边缘那些纯色的部分不含有有效边缘,在处理时把这部分的区域就去除了,给了这些位于边缘之外的目标可被找到的概率。...这个东西我们也是借用了halcon一篇专利里的算法,其大概意思如下图所示: 他首先计算所有特征点的X和Y方向的重心(X和Y方向坐标相加求平均值),然后再计算每个特征点和这个重心的距离(绝对值...五、Halcon里的计算相似度的公式和linemod计算式的关系 实际上,linemod里用到的夹角余弦的计算公式和halcon利用的梯度算式的实质是一样的,借用一个网友的贴图: 夹角余弦...七、最顶层候选点的选择策略 这个是个很重要的过程,他不仅影响到了算法的速度,而且对结果的准确性也会有直接的关联。
导读 本文主要介绍基于基于距离变换+分水岭算法实现粘连物体的分割与计数方法,并对比Halcon与OpenCV实现差异。...实现结果: OpenCV实现结果: 对比与总结 【1】适用情形:距离变换 + 分水岭算法适用于一些粘连并不严重或粘连区域远比物体本身小的情况(粘连严重或重叠部分过多则不适用); 【2】Halcon...OpenCV中的距离变换特别要注意二值化图像中物体部分中间不要有孔洞,如果有需要填充后再做距离变换,否则会影响距离变换的效果。...分水岭算法需要自己做预处理,设置markers告诉分水岭算法哪里是前景物体,哪里是未知区域,哪里是背景,使用相对麻烦,有时候还可能出现难以分割的情况,比如下图: Halcon分割结果: OpenCV...,方便阈值处理和距离变换时得到更好的结果,以硬币分割为例: 【4】实际应用中没有万能的方法,具体情况具体分析,选择合适的方法使用。
在形状匹配中,我们提取了很多特征点,然后需要使用这些特征点对图像中有效区域范围的目标进行得分统计,也就是说任何一个位置,都要计算所有特征点的得分,并计总和,一个简单的表示为: for (int Y =...2、计算原图每层金字塔图像的角度量化值时,对这个量化值进行扩展,扩展的部分的量化值填充前面说的那个不在[0,15]之间的无效值,比如这里是255,这样,这些区域的得分就是0。 ...五、其他的一些我未公开的讨论的课题 1、16角度SimilarityLut的值如何设计,其实在halcon里有个metric参数,他有三种选择,使用极性、忽略全局极性、忽略局部极性。...5、还是候选点的选择问题,在最顶层,目前我还是用的某个角度下的二维得分结果中选择得分大于最小得分要求,同时是5*5领域的最大值作为候选点,这种方式留下的候选点还是有很多的,对于只有旋转的匹配,是否可以考虑在...3D(X方向、Y方向以及角度方向)的空间里,选得分大于最小得分要求且是5*5*5领域的最大值呢,这样候选点肯定会少很多,但是代码的编写似乎变得困难了很多,还有占用内存问题。
基于C#和Halcon实现的鼠标控制图片缩放、拖动以及ROI绘制1. 环境准备确保你已经安装了Halcon开发环境,并在C#项目中引用了Halcon的DLL文件。2....创建WinForm项目打开Visual Studio,创建一个新的WinForm项目。在项目中添加Halcon的控件HWindowControl。3....e.Button == MouseButtons.Left) { isDragging = true; dragStartPos = new Point(e.X, e.Y)...- dragStartPos.Y; hWindowControl1.HalconWindow.GetPart(out int row1, out int col1, out int row2...运行程序运行程序后,你可以通过鼠标滚轮实现图片的缩放,按住鼠标左键拖动图片,以及通过按钮绘制ROI区域。