halcon 匹配加测量

转载于:链接

*采图
list_files ('E:/Halcon/Halcon练习/Week 03/day 04/作业/board', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
read_image (Image, ImageFiles[0])
get_image_pointer1 (Image, Pointer, Type, Width, Height)
*获取模板
gen_rectangle1 (ROI_0, 196.724, 187.256, 290.883, 404.241)
area_center (ROI_0, Area, Row, Column) //获取中心的行列坐标
reduce_domain (Image, ROI_0, ImageReduced)//单区域抠图
*add_channels (ROI_0, ImageReduced, GrayRegions)//多区域抠图
*生成模板
*inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, [25,40])//查看模板
create_shape_model (ImageReduced, 4, 0, 6.29, 'auto', 'none', 'use_polarity', [25,40], 10, ModelID)
get_shape_model_contours (ModelContours, ModelID, 1) //获取模板
hom_mat2d_identity (HomMat2DIdentity)//单位矩阵
gen_rectangle2 (ROI_000, 160, 302, 0, 163, 7) //区域跟随
gen_rectangle2_contour_xld (Rectangle, 140, 302, 0, 163, 7) //XLD跟随
dev_get_window (WindowHandle)
dev_set_line_width (2)
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.7, Row1, Column1, Angle, Score)
*模板仿射变换
hom_mat2d_translate (HomMat2DIdentity,Row1, Column1, HomMat2DTranslate)//平移矩阵
hom_mat2d_rotate (HomMat2DTranslate, Angle, Row1, Column1, HomMat2DRotate)//旋转矩阵
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DRotate)
*跟随1,使用vector_angle_to_rigid算子 刚体变换
vector_angle_to_rigid ( Row, Column, 0, Row1, Column1, Angle, HomMat2D)
* affine_trans_region (ROI_000, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
affine_trans_contour_xld (Rectangle, ContoursAffineTrans1, HomMat2D)
* area_center (RegionAffineTrans, Area1, Row2, Column2)
area_center_xld (ContoursAffineTrans1, Area1, Row2, Column2, PointOrder)
dev_display (Image)
dev_display (ContoursAffineTrans)
* dev_display (RegionAffineTrans) //区域 
dev_display (ContoursAffineTrans1)
*测量1
gen_measure_rectangle2 (Row2, Column2,Angle, 162, 7, Width, Height, 'nearest_neighbor', MeasureHandle)
measure_pairs (Image, MeasureHandle, 3, 50, 'all', 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
*显示 
disp_line (WindowHandle, RowEdgeFirst-8*cos(Angle), ColumnEdgeFirst-8*sin(Angle), RowEdgeFirst+8*cos(Angle), ColumnEdgeFirst+8*sin(Angle))
disp_line (WindowHandle, RowEdgeSecond-8*cos(Angle), ColumnEdgeSecond-8*sin(Angle), RowEdgeSecond+8*cos(Angle), ColumnEdgeSecond+8*sin(Angle))


*下引角
*仿射变换跟随2,使用hom_mat2d_translate,hom_mat2d_rotate,affine_trans_pixel
*先平移矩阵,再旋转矩阵.基于0,0点
hom_mat2d_translate (HomMat2DIdentity, Row1+104, Column1+6, HomMat2DTranslate1)
hom_mat2d_rotate (HomMat2DTranslate1, Angle, Row1, Column1, HomMat2DRotate1)
affine_trans_pixel (HomMat2DRotate1, 0, 0, RowTrans, ColTrans)
gen_rectangle2_contour_xld (Rectangle1, RowTrans, ColTrans, Angle,162, 7)
*测量2
gen_measure_rectangle2 ( RowTrans, ColTrans, Angle, 162, 7, Width, Height, 'nearest_neighbor', MeasureHandle1)
measure_pairs (Image, MeasureHandle1, 3, 50, 'all', 'all', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, IntraDistance1, InterDistance1)
disp_line (WindowHandle, RowEdgeFirst1-8*cos(Angle), ColumnEdgeFirst1-8*sin(Angle), RowEdgeFirst1+8*cos(Angle), ColumnEdgeFirst1+8*sin(Angle))
disp_line (WindowHandle, RowEdgeSecond1-8*cos(Angle), ColumnEdgeSecond1-8*sin(Angle), RowEdgeSecond1+8*cos(Angle), ColumnEdgeSecond1+8*sin(Angle))
distancel:=mean([IntraDistance,IntraDistance1])
distancelMin:=min([IntraDistance,IntraDistance1])
dev_disp_text ('引角间隔平均值为:'+distancel$'0.4'+'px', 'window', 12, 12, 'black', [], [])
dev_disp_text ('引角间隔最小为:'+distancelMin$'0.4'+'px', 'window', 42, 12, 'black', [], [])
dev_disp_text ('引角总数为'+|[IntraDistance,IntraDistance1]|, 'window', 72, 12, 'black', [], [])

*仿射变换3.区域基原位置变换,相对的平移矩阵,再旋转矩阵.
hom_mat2d_translate (HomMat2DIdentity, Row1-Row, Column1-Column, HomMat2DTranslate2)
hom_mat2d_rotate (HomMat2DTranslate2, Angle, Row1, Column1, HomMat2DRotate2)
affine_trans_region (ROI_000, ROI_001, HomMat2DRotate2, 'nearest_neighbor')
*及时释放句柄空间
close_measure (MeasureHandle)
close_measure (MeasureHandle1)
dev_display (ROI_001)
stop ()
endfor
clear_shape_model (ModelID)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值