Halcon中缩放Region或XLD的方法研究
在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的方法研究的更多相关文章
- PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究
假设要获取$_GET['c']; 首先,先介绍下http_globals; 1.http_globals,定义在php_globals.h中: zval * http_globals[6]; 其中的索 ...
- Halcon中的坐标系特点及XLD的镜像转换
我们知道,Halcon中的坐标系的原点在左上角,而一般二维平面坐标系的原点在左下角.那么Halcon中坐标系和一般的二维坐标系有什么区别呢?我通过下面这个例子来分析. gen_image_const ...
- halcon学习笔记——(11)Image,region,xld初步
一 读取的3种方式: 读取单张的图片: read_image( image,'filename') //image 是输出对象,后面是输入文件的路径和名称 读取多图: 1,申明一个数组,分别保存路径 ...
- HALCON中的算子大全(中英对照)
HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...
- Photoshop和Halcon中的极坐标变换
极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...
- region、xld有对应的字符串时,将region、xld按照行或列排序的算法实现
用Halcon解码时,如果一张图里面有多个码,它通常可以把这些码都解出来,并且生成对应的解码结果字符串元组(也就是下面的DecodedDataStrings),如果有多个码,那么该元组就有多个元素. ...
- 【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)
愿意写代码的人一般都不太愿意去写文章,因为代码方面的艺术和文字中的美学往往很难兼得,两者都兼得的人通常都已经被西方极乐世界所收罗,我也是只喜欢写代码,让那些字母组成美妙的歌曲,然后自我沉浸在其中自得其 ...
- .Net中的AOP系列之《方法执行前后——边界切面》
返回<.Net中的AOP>系列学习总目录 本篇目录 边界切面 PostSharp方法边界 方法边界 VS 方法拦截 ASP.NET HttpModule边界 真实案例--检查是否为移动端用 ...
- .NET中Redis安装部署及使用方法简介附->开源Redis操作辅助类
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. Re ...
随机推荐
- tar格式 方法安装MySQL后,初次登录出现 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement
参考: https://www.cnblogs.com/kerrycode/p/4368312.html http://blog.csdn.net/u014520039/article/details ...
- 微信应用js-sdk自定义分享图文
之前写过步骤 但是代码很少 这里奉献上我自己写的代码 我是用js做的 先奉上js部分的代码 <head> <meta charset="utf-8"> &l ...
- java第十次面试题
一.给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数. public static void ...
- 7-31 The World's Richest(25 分)
Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...
- PHP连接不上MySQL解决方案总结
1. 获取当前 mysql.default_socket.mysqli.default_socket.pdo_mysql.default_socket 配置信息 建立一个 PHP 文件, 显示 php ...
- HDU 3973 AC's String 字符串哈希
HDU 3973 通过哈希函数将一个字符串转化为一个整数,通过特定的方式可以使得这个哈希值几乎没有冲突(这就是关键之处,几乎没有视为没有= =!, 其实也可以考虑实现哈希冲突时的处理,只是这道题没必要 ...
- 记 TP-Link 路由器的 WDS 设置
记 TP-Link 路由器的 WDS 设置 有一台旧的 TP-Link 路由器,是以前朋友送的,外壳看起来还不错,也挺新的. 本来已经有一台极路由了,看到信号还是不够好,所以想使用 TP-Link 的 ...
- Programming Languages: Application and Interpretation
http://cs.brown.edu/courses/cs173/2012/book/ 1 Introduction 1.1 Our Philosophy 1.2 The Structure of ...
- UEditor自定义toolbar工具条
使用ueditor的同学都知道,ueditor里有很多功能,很全面,但有时候我们的编辑器不需要太多的功能,比如前台评论或者留言,就不需要这么多功能了,那我们怎么去定制自己想要的工具呢?官方给出了两个方 ...
- linux svn soeasy
http://blog.163.com/longsu2010@yeah/blog/static/173612348201202114212933/