http://www.bubuko.com/infodetail-2274185.html

http://www.bubuko.com/infodetail-2274185.html



在Halcon中,Region和XLD之间可以彼此转换。但这种转换并不是“无损”的,XLD可以是不闭合的,但是Region一定是闭合的。因此,如果将不闭合的XLD转为Region,然后再转回XLD,那么转换后的XLD和原先的XLD就有了一定的区别。

 

言归正传,先说说Region的缩放。

 

一、Region的缩放

Region的缩放很简单,有zoom_region算子,其签名如下,其中ScaleWidth, ScaleHeight是宽、高的缩放比例因子:

zoom_region(Region : RegionZoom : ScaleWidth, ScaleHeight : )

 

缩放的时候,Row和Column都根据缩放比例因子来放大或缩小。因此缩放后,Region的位置会移位,如果不想让缩放后的Region移位,可以这样:

set_system (‘clip_region‘, ‘false‘)
zoom_region (Region, RegionZoom, 0.5, 0.5)

area_center (Region, Area, Row, Column)
area_center (RegionZoom, Area1, Row1, Column1)
move_region (RegionZoom, RegionMoved, Row - Row1, Column - Column1)

需要注意的是,Region缩放后,经常会有一部分跑到画布外面,Halcon默认是将画布外部的Region进行裁切的,如果不想裁切,可以在程序开始加上set_system (‘clip_region‘, ‘false‘),即不裁切画布外面的部分。

 

 

二、XLD的缩放

本文开头分析过,“XLD——Region——XLD”的转换不是无损的,但是如果不介意这一点(或者说影响不大),XLD的缩放就可以通过Region的缩放为中介。

 

1、使用Region为中介缩放XLD

1 gen_image_const (Image, byte, 8200, 4200)
2 set_system (clip_region, false)
3 read_contour_xld_dxf (Contours,01.dxf, [], [], DxfStatus)
4 *转为region
5 gen_region_contour_xld (Contours, Region, ‘margin‘)
6 *缩放region
7 zoom_region (Region, RegionZoom, 0.2, 0.2)
8 *转回XLD
9 gen_contour_region_xld (RegionZoom, Contours2, ‘border‘)

技术分享

 

如果是下面这样的XLD呢?

技术分享

用上面的方法的话,发现结果完全不对,如下图:

技术分享

 

那么应该怎么弄呢?

 

2、通过缩放XLD中每个点的坐标值来缩放XLD

 

 1 gen_image_const (Image, byte, 8200, 4200)
 2 set_system (clip_region, false)
 3 read_contour_xld_dxf (Contours,02.dxf, [], [], DxfStatus)
 4 count_obj (Contours, Num)
 5 
 6 *XLD上点的采样间隔(为了缩短处理时间)
 7 Step := 10
 8 *缩放比例
 9 Scale := 0.3
10 gen_empty_obj (Contour2)
11 for i := 1 to Num by 1
12     select_obj (Contours, Contour, i)
13     get_contour_xld (Contour, Row, Col)
14     Row1 := []
15     Col1 := []
16     for j := 0 to |Row|-1 by Step
17         
18         Row1:=[Row1,Row[j] * Scale]
19         Col1:=[Col1,Col[j] * Scale]
20         
21     endfor
22     
23     *判断轮廓是不是闭合,如果是闭合的,那么使最后一个点与第一个点重合(即让缩放后的XLD也闭合)
24     test_closed_xld (Contour, IsClosed)
25     if (IsClosed == 1)
26         Row1:=[Row1,Row[0] * Scale]
27         Col1:=[Col1,Col[0] * Scale]
28     endif
29     
30     gen_contour_polygon_xld (Contour1, Row1, Col1)
31     smooth_contours_xld (Contour1, SmoothedContours, 5)
32     concat_obj (Contour2, SmoothedContours, Contour2)
33 endfor

 其中:

get_contour_xld (Contour, Row, Col)是得到XLD中的一系列点;

gen_contour_polygon_xld (Contour1, Row1, Col1)是通过一系列点重建XLD。

 

结果如下:

技术分享

 


Halcon中缩放Region或XLD的方法研究



( 0)
( 1)
   
举报
评论 一句话评论(0
0条  

© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

000002号





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值