2、halcon的仿射变换与区域跟随

一、实际需求:

在产品的固定区域内判断有没有缺失结构,黑色物体就是结构
在这里插入图片描述
在这里插入图片描述

二、解决思路:

1、先读取一张图片作为标准图像,再对整个产品进行定位(获取中心坐标Row1, Column1,Phi1);
2、然后在标准图像的产品的固定区域内绘制矩形区域(gen_rectangle1())。
3、最后 读取一张测试图片,再对整个产品进行定位(获取中心坐标Row3, Column3,Phi3);
4、将步骤1、3得到的坐标进行仿射变换:
vector_angle_to_rigid (Row1, Column1, Phi1, Row3, Column3, Phi3, HomMat2D2)
再将得到的句柄HomMat2D2用于仿射步骤2绘制的矩形区域:
affine_trans_region (TMP_Region0, RegionAffineTrans, HomMat2D2, ‘nearest_neighbor’)

三、代码实现:

1、代码实现步骤1,2

dev_set_draw ('margin')
read_image (B70, './标准图像_缺结构.jpg')
dev_get_window (WindowHandle)
rgb1_to_gray (B70, GrayImage)

*** 1、定位产品位置
threshold (GrayImage, Region, 50, 255)
connection (Region, ConnectedRegions)
closing_rectangle1 (ConnectedRegions, RegionClosing, 10, 10)
fill_up (RegionClosing, RegionFillUp)
opening_rectangle1 (RegionFillUp, RegionOpening, 100, 100)
select_shape (RegionOpening, SelectedRegions, 'height', 'and', 9000, 99999)

area_center (SelectedRegions, Area, Row, Column)
orientation_region (SelectedRegions, PhiRef)
gen_cross_contour_xld (Cross, Row, Column, 66, 0.785398)

* 仿射变换,矫正产品位置
vector_angle_to_rigid (Column, Row, PhiRef, Column, Row, rad(90), HomMat2D)
affine_trans_image (GrayImage, ImageAffineTrans, HomMat2D, 'constant', 'false')
stop ()

*** 2、获取区域位置的相对矩阵

* 绘制标准固定区域
gen_rectangle1 (TMP_Region0, 6965.41, 3539.2, 8192.68, 5675.49)
gen_rectangle1 (TMP_Region1, 8965.41, 3675.56, 10738.1, 4402.81)

* 获取校正后的产品区域
threshold (ImageAffineTrans, Region1, 50, 255)
connection (Region1, ConnectedRegions1)
closing_rectangle1 (ConnectedRegions1, RegionClosing1, 10, 10)
fill_up (RegionClosing1, RegionFillUp1)
opening_rectangle1 (RegionFillUp1, RegionOpening1, 100, 100)
select_shape (RegionOpening1, SelectedRegions1, 'height', 'and', 9000, 99999)

area_center (SelectedRegions1, Area1, Row1, Column1)
orientation_region (SelectedRegions1, Phi1)

***得到了标准图像的产品的坐标:Row1, Column1, Phi1
***得到了标准固定区域:TMP_Region0, TMP_Region1
stop ()

在这里插入图片描述

2、代码实现步骤3,4

***
*** 3、读取新的测试图片 ***
***
read_image (B71, './测试图片_缺结构.jpg')
rgb1_to_gray (B71, GrayImage1)

* 获取整个产品的位置
threshold (GrayImage1, Region2, 50, 255)
connection (Region2, ConnectedRegions2)
closing_rectangle1 (ConnectedRegions2, RegionClosing2, 10, 10)
fill_up (RegionClosing2, RegionFillUp2)
opening_rectangle1 (RegionFillUp2, RegionOpening2, 100, 100)
select_shape (RegionOpening2, SelectedRegions2, 'height', 'and', 9000, 99999)
area_center (SelectedRegions2, Area3, Row3, Column3)
orientation_region (SelectedRegions2, Phi3)

* 仿射变换标准目标区域到测试图像
vector_angle_to_rigid (Row1, Column1, Phi1, Row3, Column3, Phi3, HomMat2D2)

affine_trans_region (TMP_Region0, RegionAffineTrans, HomMat2D2, 'nearest_neighbor')
affine_trans_region (TMP_Region1, RegionAffineTrans1, HomMat2D2, 'nearest_neighbor')


*** 4、缺陷检测
reduce_domain (GrayImage1, RegionAffineTrans, ImageReduced)
reduce_domain (GrayImage1, RegionAffineTrans1, ImageReduced1)


dev_display (GrayImage1)
* 获取平均灰度值,平均灰度值mean大于60就是缺结构
get_domain (ImageReduced, Domain)
area_center (Domain, Area2, Row2, Column2)
gen_circle (Circle, Row2-60, Column2, 200)
intensity (Circle, ImageReduced, Mean1, Deviation)


get_domain (ImageReduced1, Domain1)
area_center (Domain1, Area4, Row4, Column4)
gen_circle (Circle1, Row4, Column4, 200)
intensity (Circle1, ImageReduced1, Mean2, Deviation1)

在这里插入图片描述

四、参考说明

本文参考了该篇文章的思想,并根据自己的实际需求进行实现
halcon 仿射变换和区域跟随

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值