在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

 gen_image_const (Image, 'byte', , )
set_system ('clip_region', 'false')
read_contour_xld_dxf (Contours,'01.dxf', [], [], DxfStatus)
*转为region
gen_region_contour_xld (Contours, Region, 'margin')
*缩放region
zoom_region (Region, RegionZoom, 0.2, 0.2)
*转回XLD
gen_contour_region_xld (RegionZoom, Contours2, 'border')

如果是下面这样的XLD呢?

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

那么应该怎么弄呢?

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

 gen_image_const (Image, 'byte', , )
set_system ('clip_region', 'false')
read_contour_xld_dxf (Contours,'02.dxf', [], [], DxfStatus)
count_obj (Contours, Num) *XLD上点的采样间隔(为了缩短处理时间)
Step := 10
*缩放比例
Scale := 0.3
gen_empty_obj (Contour2)
for i := to Num by
select_obj (Contours, Contour, i)
get_contour_xld (Contour, Row, Col)
Row1 := []
Col1 := []
for j := to |Row|- by Step Row1:=[Row1,Row[j] * Scale]
Col1:=[Col1,Col[j] * Scale]

endfor *判断轮廓是不是闭合,如果是闭合的,那么使最后一个点与第一个点重合(即让缩放后的XLD也闭合)
test_closed_xld (Contour, IsClosed)
if (IsClosed == 1)
Row1:=[Row1,Row[0] * Scale]
Col1:=[Col1,Col[0] * Scale]
endif

gen_contour_polygon_xld (Contour1, Row1, Col1)
smooth_contours_xld (Contour1, SmoothedContours, )
concat_obj (Contour2, SmoothedContours, Contour2)
endfor

其中:

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

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

结果如下:

(读者朋友们如果有不理解的地方或者发现有错误,欢迎跟帖回复。2017年8月22日  深夜)

Halcon中缩放Region或XLD的方法研究的更多相关文章

  1. PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究

    假设要获取$_GET['c']; 首先,先介绍下http_globals; 1.http_globals,定义在php_globals.h中: zval * http_globals[6]; 其中的索 ...

  2. Halcon中的坐标系特点及XLD的镜像转换

    我们知道,Halcon中的坐标系的原点在左上角,而一般二维平面坐标系的原点在左下角.那么Halcon中坐标系和一般的二维坐标系有什么区别呢?我通过下面这个例子来分析. gen_image_const ...

  3. halcon学习笔记——(11)Image,region,xld初步

    一 读取的3种方式: 读取单张的图片: read_image( image,'filename') //image 是输出对象,后面是输入文件的路径和名称 读取多图: 1,申明一个数组,分别保存路径 ...

  4. HALCON中的算子大全(中英对照)

    HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...

  5. Photoshop和Halcon中的极坐标变换

    极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...

  6. region、xld有对应的字符串时,将region、xld按照行或列排序的算法实现

    用Halcon解码时,如果一张图里面有多个码,它通常可以把这些码都解出来,并且生成对应的解码结果字符串元组(也就是下面的DecodedDataStrings),如果有多个码,那么该元组就有多个元素. ...

  7. 【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)

    愿意写代码的人一般都不太愿意去写文章,因为代码方面的艺术和文字中的美学往往很难兼得,两者都兼得的人通常都已经被西方极乐世界所收罗,我也是只喜欢写代码,让那些字母组成美妙的歌曲,然后自我沉浸在其中自得其 ...

  8. .Net中的AOP系列之《方法执行前后——边界切面》

    返回<.Net中的AOP>系列学习总目录 本篇目录 边界切面 PostSharp方法边界 方法边界 VS 方法拦截 ASP.NET HttpModule边界 真实案例--检查是否为移动端用 ...

  9. .NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类

    Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. Re ...

随机推荐

  1. HDU 3986

    http://acm.hdu.edu.cn/showproblem.php?pid=3986 从开始的最短路里依次删一条边,求新的最短路,求最长的最短路 删边操作要标记节点以及节点对应的边 #incl ...

  2. Python ---- list和dict遍历

    refer to: http://www.cnblogs.com/icejoywoo/p/3531869.html 对于python3, 可能有不一样之处,   refer to: http://do ...

  3. chaos-engineering 的一些开源工具

    Chaos Monkey - A resiliency tool that helps applications tolerate random instance failures. The Simi ...

  4. PDO exec 执行时出错后如果修改数据会被还原?

    PDO exec 执行时出错后如果修改数据会被还原? 现象 FastAdmin 更新了 1127 版本,但是使用在线安装方式出现无法修改管理员密码的问题. 一直是默认的 admin 123456 密码 ...

  5. 【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

    原文网址:http://www.cnblogs.com/jostree/p/4137402.html 作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree ...

  6. hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...

  7. 洛谷3343(ZJOI2015)地震后的幻想乡

    题目:https://www.luogu.org/problemnew/show/P3343 1.那个时间与边的大小排名有关,所以需要求一下最大边的期望排名就行. 2.期望排名是这样算的:(排名为1的 ...

  8. java之Jsch实现Linux的文件上传与下载

    一.JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功 ...

  9. 第1课 GUI程序原理分析

    1. 命令行应用程序 (1)命令行应用程序的特点 ①是一种基于顺序执行结构的可执行程序 ②程序执行过程中不需要与用户产生交互 ③程序执行后给出最终的运行结果 (2)命令行应用程序的运行模式——程序运行 ...

  10. MySQL 存储配置