halcon-find_shape_model形状模板匹配
形状匹配原理:模板创建后,会根据模板中的边缘等关系去图像中进行搜索,可以理解成提取模板中的灰度发生变化的那些点,然后再去图像中匹配,这样的效果是对干扰比较稳定,匹配速度快,并且即使边缘发生部分遮挡,匹配效果依旧较好
定位对象内部的灰度值可以有变化,但对象边缘轮廓必须清晰平滑的场合
在HDevelop中
dev_close_window () read_image (Image, 'D:/bb/tu/3.jpg') rgb1_to_gray (Image, GrayImage) ****截取模板图像:B字母**** gen_rectangle1 (Rectangle, 16, 120, 69, 172) reduce_domain (GrayImage, Rectangle, ImageReduced) get_image_size (ImageReduced, Width, Height) dev_open_window(10,100,Width, Height,'black',WindowHandle1) *显示模板图像 dev_display(ImageReduced) inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30) *预览金字塔 *金字塔多少层比较合适,可以通过ModelRegions观看--为后面创建模板做准备 *参数1:输入模板图像 *参数2:输出的金字塔图像 *参数3:金字塔区域 *参数4:金字塔层数 *参数5:图像中物体对比度的阈值或滞后阈值,以及可选的物体部分的最小尺寸 create_shape_model (ImageReduced, 'auto', -0.2, 0.2, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) *创建形状模板 *参数1:模板图像(reduce_domain后) *参数2:金字塔的最大层级--层级越高搜索越快 * 值列表:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto' *参数3:模板旋转的起始角度--弧度 *参数4:模板旋转的终止角度--弧度 *参数5:角度步长 * 限制:角度步长>=0和角度步长<=pi/16 *参数6:设置模板优化和模板创建方法 * 'auto' * 'no_pregeneration' * 'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium', 'pregeneration' *参数7:匹配方法设置 * 'ignore_color_polarity' 即使颜色对比度在局部发生变化,也会找到模型--可用于具有任意数量通道的图像 * 'ignore_global_polarity' 如果对比度(比如亮背景暗前景)全局反转,也会在图像中找到对象--只能应用于单通道图像 * 'ignore_local_polarity' 即使对比度在局部发生变化,也会找到模型--只能应用于单通道图像 * 'use_polarity' 则图像中的对象和模型必须具有相同的对比度。例如,如果模型是暗背景上的明亮对象,则仅当该对象也比背景亮时,才能找到该对象--只能应用于单通道图像 * 如果多通道图像用作模型图像或搜索图像,则只会使用第一个通道(并且不会返回错误消息) *参数8:设置对比度 *参数9:设置最小对比度 *参数10:模板句柄 find_shape_model (GrayImage, ModelID, -0.2, 0.2, 0.5, 6, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score) *形状模板匹配 *参数1:输入图像 *参数2:模板句柄 *参数3:搜索时的起始角度 *参数4:搜索时的终止角度,必须与创建模板时的有交集 *参数5:被找到的模板最小分数--大于等于这个值才能被匹配 * 默认值:0.5 建议值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0 * 典型值范围:0≤MinScore ≤ 1 * 最小增量:0.01 建议增量:0.05 *参数6:要找到的模板最大实例数 * 0 不限制 *参数7:要找到的模型实例的最大重叠比例 * 默认值:0.5 建议值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0 * 典型值范围:0≤ MaxOverlap≤ 1 最小增量:0.01 建议增量:0.05 * 0 表示不允许重叠 *参数8:计算精度的设置 * 'none' 不适用亚像素,最大误差为半个像素 * 'interpolation' 差值得到亚像素精度 * 'least_squares', 'least_squares_high', 'least_squares_very_high' * 'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4' * 'max_deformation 5', 'max_deformation 6' *参数9:搜索时金字塔的层级 *参数10:贪婪度,搜索启发式,一般都设为0.8,越高速度快,容易出现找不到的情况 * 0≤ Greediness ≤ 1 *最后4个:输出匹配位置的行和列坐标、角度、得分 【中心坐标】
在QtCreator中
HObject ho_Image, ho_GrayImage, ho_Rectangle;
HObject ho_ImageReduced, ho_ModelImages, ho_ModelRegions;
HTuple hv_Width, hv_Height, hv_WindowHandle1;
HTuple hv_ModelID, hv_Row, hv_Column, hv_Angle, hv_Score;
ReadImage(&ho_Image, "D:/bb/tu/3.jpg"); Rgb1ToGray(ho_Image, &ho_GrayImage); //***截取模板图像:B字母**** GenRectangle1(&ho_Rectangle, 16, 120, 69, 172); ReduceDomain(ho_GrayImage, ho_Rectangle, &ho_ImageReduced); GetImageSize(ho_ImageReduced, &hv_Width, &hv_Height); SetWindowAttr("background_color","black"); OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1); HDevWindowStack::Push(hv_WindowHandle1); //显示模板图像 if (HDevWindowStack::IsOpen()) DispObj(ho_ImageReduced, HDevWindowStack::GetActive()); InspectShapeModel(ho_ImageReduced, &ho_ModelImages, &ho_ModelRegions, 4, 30); //预览金字塔 //金字塔多少层比较合适,可以通过ModelRegions观看--为后面创建模板做准备 //参数1:输入模板图像 //参数2:输出的金字塔图像 //参数3:金字塔区域 //参数4:金字塔层数 //参数5:图像中物体对比度的阈值或滞后阈值,以及可选的物体部分的最小尺寸 CreateShapeModel(ho_ImageReduced, "auto", -0.2, 0.2, "auto", "auto", "use_polarity", "auto", "auto", &hv_ModelID); //创建形状模板 //参数1:模板图像(reduce_domain后) //参数2:金字塔的最大层级--层级越高搜索越快 // 值列表:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto' //参数3:模板旋转的起始角度--弧度 //参数4:模板旋转的终止角度--弧度 //参数5:角度步长 // 限制:角度步长>=0和角度步长<=pi/16 //参数6:设置模板优化和模板创建方法 // 'auto' // 'no_pregeneration' // 'none', 'point_reduction_high', 'point_reduction_low', 'point_reduction_medium', 'pregeneration' //参数7:匹配方法设置 // 'ignore_color_polarity' 即使颜色对比度在局部发生变化,也会找到模型--可用于具有任意数量通道的图像 // 'ignore_global_polarity' 如果对比度(比如亮背景暗前景)全局反转,也会在图像中找到对象--只能应用于单通道图像 // 'ignore_local_polarity' 即使对比度在局部发生变化,也会找到模型--只能应用于单通道图像 // 'use_polarity' 则图像中的对象和模型必须具有相同的对比度。例如,如果模型是暗背景上的明亮对象,则仅当该对象也比背景亮时,才能找到该对象--只能应用于单通道图像 // 如果多通道图像用作模型图像或搜索图像,则只会使用第一个通道(并且不会返回错误消息) //参数8:设置对比度 //参数9:设置最小对比度 //参数10:模板句柄 FindShapeModel(ho_GrayImage, hv_ModelID, -0.2, 0.2, 0.5, 6, 0.5, "least_squares", 0, 0.9, &hv_Row, &hv_Column, &hv_Angle, &hv_Score); //形状模板匹配 //参数1:输入图像 //参数2:模板句柄 //参数3:搜索时的起始角度 //参数4:搜索时的终止角度,必须与创建模板时的有交集 //参数5:被找到的模板最小分数--大于等于这个值才能被匹配 // 默认值:0.5 建议值:0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0 // 典型值范围:0≤MinScore ≤ 1 // 最小增量:0.01 建议增量:0.05 //参数6:要找到的模板最大实例数 // 0 不限制 //参数7:要找到的模型实例的最大重叠比例 // 默认值:0.5 建议值:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0 // 典型值范围:0≤ MaxOverlap≤ 1 最小增量:0.01 建议增量:0.05 // 0 表示不允许重叠 //参数8:计算精度的设置 // 'none' 不适用亚像素,最大误差为半个像素 // 'interpolation' 差值得到亚像素精度 // 'least_squares', 'least_squares_high', 'least_squares_very_high' // 'max_deformation 1', 'max_deformation 2', 'max_deformation 3', 'max_deformation 4' // 'max_deformation 5', 'max_deformation 6' //参数9:搜索时金字塔的层级 //参数10:贪婪度,搜索启发式,一般都设为0.8,越高速度快,容易出现找不到的情况 // 0≤ Greediness ≤ 1 //最后4个:输出匹配位置的行和列坐标、角度、得分 【中心坐标】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-03-26 生活技巧
2020-03-26 真假蜂蜜区别方法