0、region 和 image的区别

Halcon中的区域region:只有区域坐标信息,region的宽度、高度、中心点坐标、倾斜角度等,这个区域内没有图像灰度值。

图像image:既有每个像素位置的坐标信息(y,x),又有图像区域内的像素灰度值。

1、不能将union1/union2和concat_obj混淆。

union1/2是针区域融合(merged),因此对象的个数被改变。假设一块画布上有2个区域A\B,使用union将这2个区域融合到一起之后,虽然表面上仍然是分开的,不在一起,但实际上画布上只有1个区域了(这个区域包含之前的A\B两个区域)。

也可以实验一下:使用2个不同颜色标记的A、B,在使用union将这2个区域融合到一起之后,A、B的颜色会统一变为1种颜色。

而concat_obj是将两个区域组合到一起。

2、scale_image 功能:为一个图像的灰度值分级

scale_image(Image : ImageScaled : Mult, Add : )缩放图像的灰度值。

图像之前的任何一个灰度值 * Mult + Add = 拉伸后的灰度值

3、提取目标的轮廓常用函数有:boundary 和 gen_contour_region_xld

boundary (RegionAffine, RegionBorder, 'inner') //获取区域的边界

gen_contour_region_xld (RegionBorder, Contours, 'border')//从区域Regions生成XLD轮廓

gen_region_contour_xld (SmoothedContours, Region2, 'filled')//使用xld创建一个region区域

4、select_obj从一个目标元组中选择一个目标

for Index1 := 1 to Number3 by 1 //Tuple数组索引是从0开始。但是,select_obj是从1开始的。 
      select_obj (ConnectedRegions7, ObjectSelected5, Index1)//从一个目标元组中选择目标

5、

reduce_domain (ImageAffine, RegionDifference, ImageEdge123) //获取新的标记区域,新的区域是由旧的区域与第2个参数相交所得

6、

tuple_max2 (Length11, Length21, Max21)  //比较两个数组的对应元素,取每个大值放于结果中

7、

texture_laws

纹理分析是图像处理中的一种典型任务,texture_laws是Halcon中纹理分析的重要算子,其本质原理是利用不同的kernel与图像进行卷积运算,提取出图像的高频部分或低频部分。

纹理(texture)由纹理单元(texel)组成,纹理单元是纹理图像中最小的重复单元,texel是纹理的基本单元。

纹理分析的第一种典型应用是利用纹理滤波器对图像进行滤波处理,以增强(enhance)或抑制(suppress)特定的纹理。滤波后的图像通过blob analysis或者分类算法,将具有相同纹理的部分分割为同一区域(region)。

第二种典型应用是计算图像的纹理特征用于图像的分类,纹理滤波器作为预处理滤波器来增强(enhance)或抑制(suppress)特定的纹理。Halcon中标准的纹理特征(feature)算子是gen_cooc_matrix(生成共生矩阵),另一个常用的算子是entropy_gray(灰度熵,用于计算图像的平均信息量(entropy)和各向异性(anisotropy))。

texture_laws算子的语法如下:

texture_laws(Image : ImageTexture : FilterTypes, Shift, FilterSize : )

Image:原始图像

ImageTexture:经过纹理滤波器滤波后的图像

FilterTypes:滤波器的类型

Shaft:滤波后图像的灰度缩放系数,具体实现公式未知,实际使用过程中降低了滤波后图像的灰度,使得使用不同滤波器类型的滤波后图像具有可比性

FilterSize:滤波器尺寸,可选3,5,7

滤波器类型由滤波向量(vector)的两个字母组成,第一个字母表示在列方向的滤波器向量,第二个字母表示在行方向的滤波器向量。处理过程中,先对图像的一个方向进行滤波(具体从列方向还是行方向开始未知),再对图像的另一个方向进行滤波。

以3x3的滤波器矩阵为例:

l = [  1 2  1 ],

e = [ -1 0  1 ],

s = [ -1 2 -1 ]

滤波向量l增强滤波方向的图像的亮度。滤波向量e检测了滤波方向上的突变(即边缘,高频区域)。滤波向量s同样检测了滤波方向上的突变(与滤波向量e检测方法不一样)。滤波后图像很容易溢出(这不是个准确说法,实际意义是对于byte类型的图像,灰度值超过了255),因此需设置合适的shaft值缩放灰度值。

一般来说,可以选择滤波向量中的 "l", "e", "s", "r", "w", "o"与滤波向量"l"组合来增强图像的低频部分,或者与滤波向量"o"组合来增强图像的高频部分。

滤波器类型的第二个字母"l", "e", "s", "r", "w", "o"依次检测图像低频部分到高频部分。例如,滤波器"le"检测图像 中相对低频的部分,而滤波器"ls"检测图像中相对高频的部分。

8、

segment_contours_xld( Contours: ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : )

函数作用:

分割XLD轮廓成线段、圆弧或椭圆弧形

参数列表:

Contours(in):被分割的轮廓

ContoursSplit(in):分割后的轮廓

Mode(in):分割轮廓的类型

SmoothCont(in):用于平滑轮廓的点个数

MaxLineDist1(in):一次迭代中轮廓与其最逼近线之间的最大距离

MaxLineDist2(in):二次迭代中轮廓与其最逼近线之间的最大距离

9、

get_contour_xld (SelectedXLD2, Row4, Col1)//返回XLD轮廓(contour)的坐标

********获取轮廓SelectedXLD2的上下两端点Y********
get_contour_xld (SelectedXLD2, Row4, Col1)//返回XLD轮廓(contour)的坐标
tuple_min (Row4, MinY) //找Row4的最小值赋给Min1,左边缘顶点y坐标
tuple_max (Row4, MaxY) //找Row4的最大值赋给MaxY,左边缘底部y坐标

*************************************************************

10、

gen_region_points( : Region : Rows, Columns : ) gen_region_points创建一个由多个像素描述的区域。

11、

intersection(RegionDilation1, edge_regionLeft1, RegionIntersection1)//取出两个区域中重叠的部分

*************************

如果RegionDilation1和edge_regionLeft1中的一个为实体的矩形区域,另一个为黑色矩形边界,那么交集就是矩形区域内的2条水平线。

* 切边缘区域 
    intersection(RegionDilation1, edge_regionLeft1, RegionIntersection1)//取出两个区域中重叠的部分
    reduce_domain(image, RegionIntersection1, ImageReduced) //取出实际图像的边缘区域ImageReduced

********************************

12、

*根据局域平均标准偏差分析将图像二值化
   var_threshold(ImageReduced, Region1, 15, 15, AutoThresholdValue, LRpara[11], 'dark')
13、

sub_image和difference的区别(都是相减操作35)

difference是计算两个区域的区别,参数必须是region,如果注意到一个区域都是一个灰度值的,那么这里的所谓difference其实就是在检查它们在形状上有什么差别,而sub_image是灰度值的相减,所以和形状没有多大关系,主要是看看两幅图像的区别在哪里。

difference的使用很简单,直接两个区域相减就是了。但是sub_image还多了两个参数

sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )

给一个Mult的原因主要是可能两幅图像的灰度值比较接近,相减之后的结果灰度值都很小,图像看起来很暗,乘上同一个系数之后灰度值整体就提高了,且越大的灰度值提高的越明显,所以会增加图像的对比度。

而Add的作用其实也是差不多,只不过这个不能增加对比度,只能把图像灰度值整体同样的幅度,也就是让图像整体变亮一些。

14、

*计算区域到区域的最小距离及相应的坐标
distance_rr_min(RegionLines,RegionLine3,MinDistance, Row11, Column11, Row2, Column2)
15、

GapParaL := []
for i:=0 to 3 by 1 //用para[0-3]给GapParaL[0-3]赋值
    tuple_concat( GapParaL,para[i], GapParaL)//将参数1、2连接为新的数组
endfor

16、

膨胀运算在数字形态中的作用是把图像周围的背景点合并到物体中。如果两个物体之间距离比较近,那么膨胀运算可能会使这两个物体连接在一起。膨胀对填补图像分割后物体中的空洞很有用。

dilation1(Region, StructElement:RegionDilation:Iterations:)

功能:    使用用户自定义的结构元素对区域进行膨胀。结果元素是一个区域region,可由这些算子区域产生:gen_circle, gen_rectangle1, gen_rectangle2, gen_ellipse, draw_region, draw_region_polygon, gen_region_points等。

参数:

Region(输入参数):输入区域

StructElement(输入参数):结构元素(区域)

RegionDilation(输出参数):膨胀后的区域

Iterations(输入参数):迭代次数

17、

paint_region(RegionImage : ImageResult : GrayvalType : )

以灰度值Grayval,填充Image 图像的Region区域,填充后的输出图像为ImageResult

参数列表:
Region(in):绘入图像内的区域

Image(in):包含绘入区域的图像
ImageResult(out):结果图像

Grayval(in):期望的区域灰度值

Type(in):所绘区域类型,如填充"fill"或边界"margin"

注意:"fill":是指在区域边界的内部填充;"margin":是指对区域的边界进行填充,就是给边界填充一种颜色。

18、

*SelectedRegions3:图像image的SelectedRegions2区域中,灰度平均值在125-255的区域
select_gray (SelectedRegions2, image, SelectedRegions3, 'mean', 'and', 125, 255) //根据灰度值的特点来选择区域

19、

tuple_select_range( : : TupleLeftindexRightindex : Selected)从Tuple元组中选择索引从LeftindexRightindex 的值,到Selected中。

20、union_adjacent_contours_xld将端点距离很近的轮廓连接起

22、area_center_xld(XLD:::Area,row,column,pointOrder)计算xld的面积以及中心位置

23、拟合操作(fit_***_contour_xld)  把不完整的形状拟合完整

fit_line_contour_xld:拟合直线

24、 intersection_lines两条直线的交集

25、gen_contour_polygon_xld( : Contour : RowCol : )

创建不带圆角的多边形轮廓,坐标同样可以使用数组的形式指定

Row:y坐标数组,Col :x坐标数组

26、orientation_points_xld(XLD : : : Phi)  计算点云的轮廓或者多边形轮廓XLD 的方向

orientation_region(Regions : : : Phi)  计算区域Regions 的方向

27、vector_angle_to_rigid( : : Row1Column1Angle1Row2Column2Angle2 :HomMat2D)根据矩阵计算点与点之间的变换关系,计算点和角度到另一个点和角度的仿射矩阵。

先将图像旋转,旋转角度为(Angle2 - Angle1) (逆时针为正),旋转中心坐标是(Row1, Column1)。再将原图的点(Row1, Column1)一一对应移到点 (Row2, Column2)上,移动的row和column方向的位移分别是( Row2 - Row1)、( Column2 - Column1)

28、affine_trans_contour_xld(Contours : ContoursAffinTrans : HomMat2D : )使用仿射矩阵HomMat2D 对轮廓Contours 进行放射变换,输出轮廓为ContoursAffinTrans

29、compare_obj(Objects1Objects2 : : Epsilon : IsEqual)

Epsilon (input_control)  number → (real / integer)

Maximum allowed difference between two gray values or coordinates etc.

Default value: 0.0

List of values: 0.0, 1.e-5

30、intersection_contours_xld计算2个轮廓的交点

31、sort_region(Regions : SortedRegions : SortModeOrderRowOrCol : )。对Regions 区域进行排序。

SortMode:排序方式。'upper_left' 外接矩形的左上角点

Order:升序(true)/降序(false)。

RowOrCol :按照行/列排序。

32、shape_trans(Region : RegionTrans : Type : ) 不规则区域的转换

Type值如下:

33、region_features(Regions : : Features : Value) 计算区域的特征Features 的值Value

34、fill_up(Region : RegionFillUp : : )  填充区域Region 中的孔洞

35、

36、

gen_region_points (Region, Row, Column) 有坐标( Row, Column)生成一个点区域Region

gen_cross_contour_xld (Cross, Row, Column, 60, 0.785398) 在点( Row, Column)处画一个叉

gen_region_line(RegionLine1, row1_start, col1_start, row1_end, col1_end) 生成一条线
gen_region_line (RegionLines2, row2_start, col2_start, row2_end, col2_end)
dev_display (RegionLine1) 显示这条线
dev_display (RegionLines2)
intersection_lines (row1_start, col1_start, row1_end, col1_end, row2_start, col2_start, row2_end, col2_end, Row, Column, IsOverlapping) 由坐标生成的2条线的交叉点( Row, Column)

Halcon算子总结相关推荐

  1. Halcon算子翻译——dev_set_line_width

    名称 dev_set_line_width - 定义region,contour输出的线宽. 用法 dev_set_line_width( : : LineWidth : ) 描述 dev_set_l ...

  2. Halcon算子--图像、区域、轮廓、测量、拟合、垂足、夹角

    Halcon算子–图像.区域.轮廓.测量.拟合.垂足.夹角 read_image (Image,'fabrik') 画矩形 draw_rectangle1 (3600, Row1, Column1, ...

  3. halcon算子翻译——dev_set_paint

    名称 dev_set_paint - 定义灰度值输出模式. 用法 dev_set_paint( : : Mode : ) 描述 dev_set_paint定义了用于在图形窗口中显示图形对象的输出模式. ...

  4. Halcon算子:min_max_gray和gray_histo的区别

    一.说明 halcon算子需要一个一个抠明白,逐步去除拦路虎.本片介绍几个算子,没看透的算子也是很唬人的. 二.算子min_max_gray min_max_gray(Regions, Image : ...

  5. Halcon算子知识:optical_flow_mg

    一.说明 本文是对halcon手册的整理,如果真正掌握光流法,恐怕一个博文是不够的.作者只能先呈现这个博文,再对文中的晦涩理论进行逐步阐述,参考文章将放在文后,期望读者能从中学到全部知识. 二.关于光 ...

  6. halcon/c++接口基础 之 构造函数与Halcon算子

    Halcon/C++提供了构造函数,主要基于适合的Halcon算子.比如说HImage和HBarCode基于read_image and create_bar_code_model. 请注意当前的Ha ...

  7. Halcon算子学习:图像阈值分割-threshold、binary_threshold、dyn_threshold算子

    Halcon算子学习:图像阈值分割算子 前言 1.threshold-全局固定阈值分割 2.Binary Threshold-自动全局阈值分割 3.dyn_threshold-局部动态阈值分割 小结: ...

  8. Halcon算子学习:XLD几种边缘连接函数

    Halcon算子学习:XLD几种边缘连接函数 1.union_cotangential_contours_xld (Contours : UnionContours : FitClippingLeng ...

  9. halcon算子翻译——dev_set_window

    名称 dev_set_window - 激活一个图形窗口. 用法 dev_set_window( : : WindowHandle : ) 描述 dev_set_window用传递的窗口句柄激活图形窗 ...

  10. Halcon 算子 elliptic_axis

    作用:计算等效椭圆: 参数翻译(对应以上参数顺序): 输入区域. 输出主半径(Ra >= 0.0). 输出次半径( Rb >= 0.0 && Rb <= Ra). 输 ...

最新文章

  1. 摘要: Nginx 网络多并发请求的TCP网络参数做简单说明。
  2. 包装器 tf.keras.layers.Bidirectional() 介绍
  3. HTML的checkbox和radio的美化
  4. 多径信道理论的直观感受与MATLAB仿真
  5. 使用vue-amap
  6. java泛型程序设计——约束与局限性
  7. Servlet 处理多种请求应用
  8. 内蒙古高考2021年成绩查询,内蒙古招生考试信息网:2021年内蒙古高考查分入口、查分系统...
  9. ajax排行页面,ajax简单页面
  10. python中出现UserWarning: libuv only supports millisecond timer resolution怎么解决
  11. redis 获取不到_redis系列之——缓存穿透、缓存击穿、缓存雪崩
  12. js中获取中文相应gbk编码
  13. UnityWebGL发布包问题及IIS配置
  14. java无法远程读写HDFS系统解决方案
  15. 数据分析 第十篇:分类(kNN)
  16. PlatON云图CSO肖紫闻:面对巨头的榨取,我们能做点什么?
  17. 斑马打印机 android驱动,斑马ZC300驱动-斑马Zebra ZC300打印机驱动下载 v01.03.00官方版 - 51驱动网...
  18. 计算机键盘怎么输入平方,word里平方2怎么打_在word里输入㎡符号的方法
  19. Linux学习之定时任务调度
  20. LTE学习理解系列——TDD LTE信源指定时隙配比设置

热门文章

  1. MysqlWorkBench将已有数据库转换为mwb模型文件
  2. c语言中的字符变量用保留两位小数,字符数字转换保留2位小数
  3. 高等数学 - 高分导学
  4. 怎么通过DELL服务器的iDrac口查看硬件信息
  5. javascriptmvc-steal
  6. php 生成打印送货单,PHP输出PDF打印HTML5+CSS3打印格式控制
  7. 全球及中国嵌入式芯片行业市场调查及投资战略研究报告2022-2028年
  8. miniui 和ajax,jQuery MiniUI开发系列之:Ajax处理超时、服务端错误
  9. adb restarting in TCP mode port: 5555
  10. ios订阅_iOS订阅测试分步指南