halcon,blob,roi,形状匹配

这篇博客详细介绍了图像处理中的关键步骤,包括阈值分割、局部处理、形态学操作如膨胀和腐蚀,以及开闭运算在消除噪声和平滑边界上的应用。此外,还探讨了形状匹配过程,涉及ROI创建、模板模型构建和模板匹配算法。内容适合于计算机视觉和图像分析领域的学习者。
摘要由CSDN通过智能技术生成

BLOB分析

在这里插入图片描述

分割图像

threshold(Image : Region : MinGray, MaxGray :)
最简单,最快,使用频率最高的方法。
如果目标与背景之间存在灰度差,则threshold首先被使用

binary_threshold(Image : Region : Method, LightDark : UsedThreshold)

黑白对比度足够,可直接使用。

/*自动全局分割*/
auto_threshold(Image : Regions : Sigma : )
dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
mean_image(Image : ImageMean : MaskWidth, MaskHeight : )

局部分割,通常和均值滤波一起使用。一般由于背景不一,目标表现为比背景局部亮或者暗,使用局部分割。

形态学处理

膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程。

腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉.

膨胀与腐蚀的主要作用:

(1)消除噪声

(2)分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素

(3)寻找图像中明显的极大值或极小值区域

(4)求出图像的梯度

开运算:先腐蚀后膨胀的过程称为开运算,

作用:去除孤立的小点,毛刺,消除小物体,平滑较大物体边界,同时不改变其面积.(此处的不改变其面积是有条件的,即结构元素设置的必须要合理)

闭运算:先膨胀后腐蚀的过程是闭运算。

作用:填充物体内细小的空洞,连接临近物体,平滑边界,同时不改变其面积。(此处的不改变其面积是有条件的,即结构元素设置的必须要合理)

膨胀

structelemnt:结构元素(gen_circle,gen_rectangle1,gen_rectangle2,gen_ellipse这些生产的区域)、

dilation_circle(Region : RegionDilation : Radius : )
/*对一个圆形区域膨胀region::要进行膨胀操作的区域。RegionDilation—膨胀获得区域。Radius—圆形结构半径*/
dilation_golay(Region:RegionDilation : GolayElement, Iterations, Rotation:)
dilation_rectangle1(Region : RegionDilation : Width, Height :/*矩形结构元素的宽高*///矩形
dilation_seq(Region : RegionDilation : GolayElement, Iterations : )
dilation1(region,structelemnt:regiondilation:iterations迭代次数)
dilation2(region,structelement生成的结构元素:regiondilation:row,column设置参考点位置,一般为原点,iterations迭代次数即膨胀次数)

腐蚀

erosion1(Region, StructElement : RegionErosion : Iterations : )
/*
StructElement :生成结构元素
Iterations :迭代次数,腐蚀次数
*/
erosion2(Region, StructElement : RegionErosion : Row, Column, Iterations : )
/*
 Row, Column, :设置参考点位置,原点位置。
*/
erosion_circle(Region : RegionErosion : Radius : )
//对一个圆形区域进行腐蚀
erosion_rectangle1(Region : RegionErosion : Width, Height : )
//矩形

开闭运算

opening(region要进行开运算操作的区域,structelement生成的结构元素:regionopening开运算后获得的区域::)
opening_rectangle1(Region : RegionOpening : Width, Height : )
opening_circle(region要进行开运算的区域:regionopening开运算后的区域:radius圆形结构元素的半径)

//开运算
closing(region要进行闭运算操作的区域,structelement生成的结构元素:regionclosing闭运算后的区域::)
closing_rectangle1(Region : RegionClosing : Width, Height : )
closing_circle(region:regionclosing:radius)

参考代码

dev_close_window ()
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
connection (Region, ConnectedRegions)
dev_set_color ('black')
*使用半径为1的圆形结构腐蚀得到区域
erosion_circle (ConnectedRegions, RegionErosion, 1)
*使用长宽均为1的矩形结构元素腐蚀得到区域
erosion_rectangle1 (ConnectedRegions, RegionErosion1,1, 1)
gen_circle (Circle,50, 50, 1)
*使用生成的圆形结构元素腐蚀得到区域
erosion1 (ConnectedRegions, Circle, RegionErosion2, 1)
erosion2 (ConnectedRegions, Circle, RegionErosion3, 0, 0, 1)

形状匹配

  1. 创建ROI
    `
    //任意形状
    draw_region()
    draw_polygon()

//标准形状
draw_rectangle1/2()
draw_circle()
draw_ellipse()
draw_line()

//生成标准ROI
gen_rectangle1/2()
gen_circle()
gen_ellipse()
gen_region_line()

//通过XLD创建AOI
gen_region_contour_xld()
gen_region_polygon_xld()`

ROI修正

//修正函数
erosion()		//减小ROI
dilation()		//扩大ROI
shape_trans()	//形状转换
boundary()		//像素级边界
move_region()	//移动到新位置

//组合
intersection()		//交集
difference()		//差集
union1/2()			//并集函数分1.2

直接创建模板

create_shape_model(
        Template ,	 	// 模板图像
        NumLevels, 		// 图像金字塔
        AngleStart, 	// 起始角度
        AngleExtent,	// 角度范围
        AngleStep, 		// 角度步长:无特殊要求auto,要求精确,步长小,占用内存多	   		 	       // 速度慢。
        Optimization, 	// 优化算法
        Metric, 		// 极性
        Contrast, 		// 对比度:测量目标与背景灰度值差异
        MinContrast, 	/*最小对比度:减少噪声,纹理。可以通过助手,或这两个函数							estimate_noise(),inspect_shape_model()获得*/
        ModelID 		// 模板ID
) 
create_scaled_shape_model()
create_aniso_shape_model()

获得模型轮廓

get_shape_model_contours (ModelContours, ModelID, 1)

模板匹配

让halcon自己填写参数吧,tab tab

find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)

测试代码

dev_close_window ()

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Testlm, 'C:/Users/vmyf35/Pictures/testlm.jpg')

disp_message (WindowHandle,'灿坤找螺母', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
gen_circle (ROI_0, 179.875, 393.387, 27.9687)

* gen_circle (ROI_0, 329.587, 423.467, 53.6764)
reduce_domain (Testlm, ROI_0, ImageReduced)
create_shape_model (ImageReduced, 'auto', rad(0), rad(1), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)

for Index := 1 to 4 by 1
    read_image (Image, 'C:/Users/vmyf35/Pictures/testlm.jpg')
    count_seconds (Seconds)
    find_shape_model (Image, ModelID, rad(0), rad(1), 0.5, 0, 0.5, 'least_squares', 2, 0.5, Row, Column, Angle, Score)
    count_seconds (Seconds1)
    Runtime := (Seconds1-Seconds)*1000
    gen_cross_contour_xld (Cross, Row, Column, 6, Angle)
    dev_display (Image)
    dev_display_shape_matching_results (ModelID, 'red', Row, Column, Angle, 1, 1, 0)
    dev_set_color ('blue')
    disp_message (WindowHandle, Runtime$'.1f'+'ms', 'window', 12, 12, 'black', 'true')
    if(Index != 4)
        disp_continue_message (WindowHandle, 'black', 'true')
        stop()
    endif
endfor

clear_shape_model (ModelID)

测试图片
在这里插入图片描述

写的差,能看就看吧…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值