haclon学习笔记(三)

**

haclon学习笔记(三)

**

halcon数据结构

主要包括图像参数和控制参数两类,其中图像参数包括image,region,XLD;控制参数包括string,interger,real,handle,Tuple数组

一.Image的分类

1.根据像素的信息不同分为二值图像、灰度图像、RGB图像。
2.Image的通道
理论基础做图像的应该都知道,不在阐述了,主要记录一下halcon中与通道相关的算子:
1.append_channel(MultiChannelImage, Image: ImageExtend:?
作用:将Image图像的通道与MultiChannelImage图像的通道叠加得到新图像MultiChannelImage
MultiChannelImage:要叠加的图像
Image:要叠加的图像
ImageExtend:叠加后产生的图像
2.decompose(MultiChannelImage, Image1,Image2,Image3,:?
作用:转换三通道的彩色图像为三个单通道的图像
MultiChannelImage:要进行转换的三通道彩色图像
Image1:转换得到的第一个通道的灰度图像,对应Red
Image2:转换得到的第二个通道的灰度图像,对应Green
Image3:转换得到的第三个通道的灰度图像,对应Blue
3.image_to_channels(MultiChannelImage,Images::)
作用:将多通道图像转换为多幅单通道图像
MultiChannelImage:要进行转换的多通道彩色图像
Images:转换后得到的单通道图像
4.compose3(Image1,Image2,Image3:MultiChannelImage:?
作用:将三个单通道的图像合并成为一个三通道的彩色图像
Image1,Image2,Image3:对应三个通道的彩色图像
MultiChannelImage:转换后得到的图像
5.channels_to_image(Images:MultiChannelImage:?
作用:将多幅单通道图像合并成为一幅多通道彩色图像
6.count_channels(MultiChannelImage:::channels)
作用:计算图像的通道数
7.trans_from_rgb (ImageRed, ImageGreen, ImageBlue: ImageResult1, ImageResult2,ImageResult3: ColorSpace: )
作用:将彩色图像从rgb空间转换到其他空间
ColorSpace:输出的颜色空间,包括:‘hsv’,‘hls’,‘hsi’,‘ihs’,‘yiq’,‘yuv’
8.get_image_pointer1(Image:::Pointer,Type,Width,Heigth)
作用:获取单通道图像的指针
9.get_image_pointer3(ImageRGB:::PointerRed,PointerGreen,PointerBlue,Type,Width,Heigth)
作用:获取多通道图像的指针
10、access_channel ( MultiChannelImage : Image : Channel : )
获取多通道图像MultiChannelImage的Channel通道的图像Image
图像通道实例:

read_image (Image, 'F:/壁纸/4.jpg')
count_channels(Image,Num)
for index:= 1 to Num by 1
    *获取多通道图像中指定通道的图像
    access_channel(Image, Image4, index)
endfor
*分解通道
decompose3(Image, Image1,Image2,Image3)
*RGB转HSV通道
trans_from_rgb(Image1,Image2,Image2 ,ImageResult1, ImageResult2, ImageResult3, 'hsv')
*合并通道
compose2(Image3,Image2,MultiChannelImage)
*像图像添加附加通道
append_channel(MultiChannelImage, Image3,ImageExtended)

运行结果:
在这里插入图片描述
3.其他常用的算子
1、gen_image_const(:Image:Type,Width.Height)
作用:创建灰度值为零的图像
Type:像素类型,包括‘byte’,‘int1’,‘int2’,u’int2’等等
2、gen_image_proto(Image: ImageCleard:Grayval:)
作用:指定图像像素为同一灰度值
3、get_image_size(Image:::Width,Height)
作用:计算图像尺寸
4、get_domain(Image: Domain:)
作用:得到图像的定义域
5、crop_domain(Image:ImagePart:?
作用:裁剪图像
6、get_grayval(Image::Row,Column:Grayval:)
作用:获取图像像素点的灰度值
7、set_grayval(Image::Row,Column:Grayval:)
作用:设置图像像素点的灰度值
示例

gen_image_const(Image, 'byte', 50, 50)
get_image_size(Image,Width, Height)
gen_image_proto(Image,Image,164)
get_domain(Image, Domain)
crop_domain(Image, ImagePart)
get_grayval(ImagePart, 10,10,Grayval)
set_grayval(ImagePart,10,10,255)

在这里插入图片描述

二、Halcon Region

haclocn中区域定义为离散平面的一个任意子集
r ∈ Z ² ( 1 ) r ∈Z² (1) rZ²1
在很多情况下将图像处理 限制在某一特定区域(ROI)内是及其有用的,我们可以视一幅图像为一个从某ROI到另一ROI的函数
f : r − R n ( R 代 表 区 域 ) f:r-Rn(R代表区域) f:rRn(R
简单的说法:区域就是某种具有结构体性质的二值图像。

1.Image图像转换为区域

1)、利用阈值分割算子

算子:threshold(Image:Region:MinGray,MaxGray)
作用:阈值分割的图像
Region:经过分割后的图像
Min,Max:分割的最小最大灰度值
对彩色图像使用该算子最终只会针对第一通道进行分割。
示例:

read_image(Image, 'F:/壁纸/4.jpg') 
dev_close_window()
get_image_size(Image,Width, Height)
dev_open_window(0, 0, Width, Height, 'white', WindowHandle)
dev_display(Image)
dev_set_color('red')
threshold(Image,Region,0,130)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle1)
dev_display(Region)

结果:
在这里插入图片描述

2、利用区域生长将图像转换为区域

算子:regiongrowing(Image:Regions:Row,Column,Tolerance,MinSize:)
作用:使用区域生长法分割图像获得区域
Image:输入图像
Region:分割获得的区域
Row,Columu:掩模的高和宽
Tolerance:掩模内灰度值差小于某个值就认为是同一区域
MinSize: 单个区域的最小面积
示例:

read_image(Image, 'printer_chip/printer_chip_01')
dev_close_window()
get_image_size(Image,Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
*平滑图像
median_image(Image, ImageMedian,'circle',2, 'mirrored')
regiongrowing(ImageMedian, Regions, 1, 1, 2, 100)

原图
分割后的图
haclon可以通过算子获得指定区域的灰度直方图,并将获得的直方图转换成为区域:
算子:gray_histo(Regions:Image:::AbsoluteHisto,RelativeHisto)
作用:获得图像指定区域的灰度直方图
Regions:计算灰度直方图的区域
Image: 计算灰度直方图区域所在的图像
AbsoluteHisto:各灰度值出现的次数
RelativeHisto:各灰度值使用的频率
算子:gen_region_histo(:Region:Histongram,Row,Columu,Scale:)
作用:将获得的灰度直方图转换为区域
Region:包含灰度直方图的区域
Histgram:输入灰度直方图
Row,Column:灰度直方图的中心坐标
Scale:灰度直方图的比列因子
实例:

read_image(Image,'F:/壁纸/9.jpg')
dev_close_window()
get_image_size(Image,Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowID)
dev_display(Image)
dev_set_draw('margin')
dev_set_color('red')
*创建平行坐标轴的矩形
gen_rectangle1(Rectangle1, 351, 289, 407, 340)
dev_set_color('green')
gen_rectangle1(Rectangle2, 78, 178, 144, 244)
*获得指定区域的灰度直方图
gray_histo(Rectangle1,Image, AbsoluteHisto1, RelativeHisto1)
gray_histo(Rectangle2, Image, AbsoluteHisto2, RelativeHisto2)
dev_set_color('red')
gen_region_histo(Histon1,AbsoluteHisto1, 255, 255, 1)
dev_set_color('green')
gen_region_histo(Histon2,AbsoluteHisto2, 255, 255, 1)

在这里插入图片描述

3、区域的特征:

通过工具栏中的特征检测可以查看Region的特征

在这里插入图片描述
在这里插入图片描述
特征主要包含下面三个部分:
a、基础特征:面积、中心、宽高、左上角右下角坐标、长短半轴、椭圆方向、粗糙度、连通数、最大半径、方向
b、形状特征:外接圆半径、内接圆半径、圆度、紧密度、矩形度、凸性、偏心率、外接矩形的方向
c、几何矩特征:二阶矩、三阶矩、主惯性轴等
将Image转换为Region后,有时需要按形状特征选取符合条件的区域,算子为:select-shape(Region:SelectedRegions:Features,Operation,Min,Max:)
作用:选取指定形状特征区域。
Region:输入的区域
SelectedRegions:满足条件的区域
Features:选择的形状 如下表所示
Operation:单个特征的逻辑类型
Min,Max:形状特征的取值范围

在这里插入图片描述
使用select_shape算子前需要先使用connection算子来计算区域的连通部分,格式为connection(Region:ConnectedRegions)

4、区域转换

shape_trans(Region : RegionTrans : Type : )
作用:变换区域的形状

Type的可选项解释如下:

convex:凸包性

ellipse:与输入区域有相同的矩和区域的椭圆

outer_circle:最小外接圆

inner_circle:最大内接圆

rectangle1:平行于坐标轴的最小外接矩形

rectangle2:最小外接矩形

inner_rectangle1:平行于坐标轴的最大内接矩形

inner_rectangle2:输入区域的骨架点拥有同输入区域的重心点最小的距离

5、区域运算

算子:union1(Region:RegionUnion)
作用:求并集
算子:union2(Region1,Region2:RegionUnion)
作用:求并集
算子:difference(Region,Sub, RegionDifference)
作用:求差集
算子:complement(RegionDifference, RegionComplement::)
作用:求补集
实例:

ead_image (Image, 'F:/英雄时刻/29388144/英雄时刻_20190509-19点38分45s.gif')
rgb1_to_gray(Image, Image)
threshold(Icomplement(RegionDifference, RegionComplement)mage, Region,100,255)
connection(Region, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
union1(SelectedRegions, RegionUnion1)
union2(RegionUnion1, Region, RegionUnion)
difference(Region,RegionUnion, RegionDifference)

在这里插入图片描述

5、区域的点线

A.生成点线区域:gen_region_points(Region, Row, Columns)
B.在窗口划线:disp_line (: : window WindowHandle, line.begin.y Row1,
line.begin.x Column1, line.end.y Row2, line.end.x Column2: )
C、生成线:gen_region_line (: region RegionLines: line.begin.y BeginRow,
line.begin.x BeginCol, line.end.y EndRow, line.end.x EndCol:
D、算子:get_region_points (region Region: : : coordinates.y Rows,
coordinates.x Columns)
作用:计算区域的像素点坐标
E、算子:intersection (region Region1, region Region2:
region RegionIntersection: : )获得两区域的交集

6、区域的方向

a、line_orientation (: : line.begin.y RowBegin, line.begin.x ColBegin,
line.end.y RowEnd, line.end.x ColEnd: angle.rad Phi)
作用:计算直线的方向
b、orientation_region (region Regions: : : real Phi)
作用:计算区域的方向
c、angle_ll (: : point.y RowA1, point.x ColumnA1, point.y RowA2,
point.x ColumnA2, point.y RowB1, point.x ColumnB1, point.y RowB2,
point.x ColumnB2: angle.rad Angle)
作用:计算两直线的夹角
d、line_position (: : line.begin.y RowBegin, line.begin.x ColBegin,
line.end.y RowEnd, line.end.x ColEnd: point.y RowCenter,
point.x ColCenter, real Length, angle.rad Phi)
作用:计算线段的中心、长度、方向

7、区域的距离

相关算子:
a、distance_pp(::Row1,Column1,Row2,Column2:Distance)
作用 :计算两个点的距离
b、distaance_pl(::Row,Column,Row1,Column1,Row2,Column2:Distance)
作用:计算点到线的距离
c、distance_ps(::Row,Column,Row1,Column1,Row2,Column2:DistanceMin,DistanceMax)
作用:计算点到线段的距离
d、distance_rr_min(Regions1,Regions2:::MinDistance,Row1,Column1,Row2,Column2)
作用:计算区域到区域的最近距离以及对应的最近点
e、distaance_lr(Region::Row1,Column1Row2,Column2:DistanceMin,DistanceMax)
作用:计算线到区域的最近和最远距离
f、distance_sr(Region::Row1,Column1Row2,Column2:DistanceMin,DistanceMax)
作用:计算线断到区域的最近和最远距离

8、生成形状规则区域

相关算子:
a、gen_circle() 生成圆形
b、gen_ellipse() 生成椭圆
c、gen_rectangle1() 生成矩形(平行于x轴)
d、gen_rectangle2() 生成矩形(任意方向)
e、gen_region_polygon() 将多边形转换为区域

三、Region的行程

1、行程的理论基础:
在这里插入图片描述
2、与行程相关的算子
a、gen_regions_runs(:Region:Row,ColumnBegin,ColumnEnd)
作用:根据同行坐标值生成同行行程
b、get_region_runs(Region:::Row,ColumnBegin,ColumnEnd))
作用:获得区域的行程坐标
c、runlength_features(Regions:::NumRuns,KFactor,LFactor,MeanLength,Bytes)
作用:统计区域行程的特征
Regions:将要消除的区域对象
NumRuns:行程个数
KFactor,LFactor :
K F a c t o r = N u m R u n s / A r e a ½ KFactor = NumRuns / Area½ KFactor=NumRuns/Area½
MeanLength:平均的行程长度
d、eliminate_runs(Region:RegionClipped:ElimShorter,ElimLonger:)
作用:消除一丁行程所在的区域

示例:

gen_region_runs(Region, 100, 50, 200)
get_region_runs(Region, Row, ColumnBegin, ColumnEnd)
runlength_features(Region, NumRuns, KFactor, LFactor, MeanLength, Bytes)
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_clear_window()
gen_circle(Circle, 200, 200, 100.5)
set_system('neighborhood',8)
eliminate_runs(Circle,RegionClipped, 100, 205)

在这里插入图片描述

四、Region的区域特征

1、区域的面积:指的是区域包含的像素个数
2、区域的中心:区域内所有像素 点坐标的平均值 算子area_center(Regions:::Area,Row,Column)
3、区域的矩特征:
4、区域等效椭圆特征:elliptic_axis(Regions:::Ra,Rb,Phi)可以计算等效椭圆的参数
5、区域凸性特征:区域内任意两点进行连线,连线上所有点都在区域内就称这个区域为凸集。非凸区域可以用凸性来描述区域凸的程度,凸性为某区域的面积与该区域凸包面积的比值可以使用convexity(Regions:::Convexity)计算区域的凸性。
6、区域轮廓长度特征:区域轮廓是跟踪区域边界获得一个轮廓,然后将区域边界上的全部点连接到一起,轮廓长度是欧几里得长度 算子:contlength(Regions:::Conlength)
7、区域的圆度特征:
圆度的计算公式 max代表外接圆半径,F是区域面积
C = F / ( m a x ² ∗ π ) C=F/(max² * π) C=F/(max²π
算子:circularity(Regions:::Circullarity)
算子:roundness(Region:::Distance,Sigma,Roundness,Sides)
8、区域的矩形度特征
算子:rectangularity(Regions:::Rectangularity)
9、区域的紧密度特征
C = L ² / 4 F ∗ π C=L²/4F*π C=L²/4Fπ
10、区域的离心率特征:算子:eccentricity(Regions:::Anisometry,Bulkiness,StructureFactor)
Anisometry:区域的离心率
Bulkiness:区域的蓬松度
StructureFactor:区域的结构因子

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值