勇哥的一个案子里需求如下:分割出齿轮的小齿,小齿要排列规则,图像大小固定由于齿轮数量有40多个,因此分割要求速度快分割后的图片形成磁盘文件 (图1 分割后的图片样例)(图2 要分割的齿轮和极坐标转换后的效果) 这个需求如果不考虑速度的话,是很简单的。最简单的是转动图片固定角度,然后用一个矩形ROI去切割固定位置的小齿。但是这个办法由于耗时太长,能实现功能,却达不到速度要求。还有一个办法是crop_domain算子切割小齿,然后再仿射变换
粘合度高的物体识别2020-10-20 22:43:48
首先看看要使用的图像(这是闲着无聊在halcon网上找的一张实际生产中的图):从图像中看,颗粒状物体都有不同程度的粘连在一起,这给我们在处理上带来了一定的麻烦。首先想,对于这样的图,人是怎么识别的?抽象出来就是:先记住颗粒的形状,再去里面找。因此很明显想到的是图像匹配识别,不过粘连度高的就不好使用特征模板匹配了,因为粘连的物体本身其特征就模糊了很多。这里建议使用ncc模板匹配,至于ncc与shape之间的差异,请访问:read_image (Image, 'C:/Us
关键算子: orientation_region vector_angle_to_rigid affine_trans_region 测试图片:halcon代码:*此例子将图中没有偏移的形状参照旋转的形状进行旋转
read_image (
例一:毛刺在往外凸的面上策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg')
binary_threshold (Tu, Region, 'max_separability', 'dark', UsedThres
玻璃瓶口的缺陷检测2020-10-15 21:55:43
inspect_bottle_mouth.hdev巧妙运用了极坐标变换法,细节很精细,值得学习* tuning parameters
SmoothX := 501
ThresholdOffset := 25
MinDefectSize := 50
*
* initialization
PolarResolution := 640
RingSize :=
(一) 判断对象为空对于region是否为空,用下面的算子。IsEqual1是个inter型,如果为空则为1,否则为0gen_empty_region(EmptyRegion1)
test_equal_region(EmptyRegion1,CheckARegion,IsEqual1)
if(IsEqual1==1)
return()
endif判断hobject为空则用算子test_equal_obj判断object为空,count_ob
阈值分割引言
阈值分割有非常多的算法,大体上分为全局和局部算法。
全局算法包括全局固定阈值和基于图像直方图的阈值,局部算法包括局部动态阈值分割。
基于图像直方图阈值分割的方法也有很多,比如常规的高斯滤波双峰法,OTSU大津法。
但是这类所有的法都基于一个假设:图像是有前景和背景的,待分割目标处于背景中,即图像直方图是双峰的。
如果因为非均匀光照导致待分割目标不处于背景或前景中,即图像直方图无双峰,
那么基于图像直方图的所有法都是不甚理想的
只能在此基础上进行一定的变换,例如nbl算法等,这些都属于局部算法。
任何算法,都会基于假设空间的。没有假设空间,所有算法性能一致。包括经典算法和深度学习算法。
本系列的贴子勇哥通过实验来细品它们之间的差别,以求以后可以精准应用。
原图:(图1)想求出它的黑色边界,用来判断NG的部分。如下图所示,蓝色线是勇哥想求的边界。红色箭头所指的是缺陷,它有两部分。颜色较浅的灰色带和颜色深的黑色带,它们是两种类型的NG特征,其判断阈值是不同的。(图2)勇哥想到的几个方法:(一) 通过边界xld拟合椭圆设想是通过图3的两根xld,拟合出图4的椭圆。(图3)(图4)dev_close_window()
read_image (Pic20200923105531Blockid9363, 'F:/blockI
这个问题的现象是下面这句话报错,说是参数有问题:HOperatorSet.SetFramegrabberParam(AcqHandle, "Gain", 2.0);而在halcon中,连接相机后查阅参数,其中增益参数就叫Gain,这个是绝对没有写错的。而这句话的设置时机放在了取得相机设备句柄之后。 HOperatorSet.OpenFramegrabber("HMV3rdParty", 0, 0, 0,&
(一)注意下面的img不能放在线程外面写。而是要放在lamada写法的线程里面。 public string ccdTopWork()
{
HObject&nbs