一、图形变量image
1、通道:每一个通道可以理解为一个矩阵,彼此独立,灰度图是单通道,RGB图是三通单
2、像素类型:int1, int2, uint2, int4, int8, byte, real,direction, cyclic, complex, 常见的是byte(8位,一个字节,区间0-255,0是黑,255是白);
3、图像算子:算子---àImage (打开Halcon)
4、预处理图像:
对图像的某些预处理:使用mean_image或binomial_filter消除噪声;
抑制小斑点或细线使用median_image;
平滑图像可以使用smooth_image;
如果又想平滑图像又想保存边缘,可以尝试anisotropic_diffusion;
二、图像变量Region
1、region可以理解为符合某些性质像素的子集;
2、region实例(region.hdev);
3、region的形态可以是任意的,单独的一个点都可成为是一个region;
形成region方式:
threshold (Image, Region, 128, 255) *使用全局阈值分割图像,对灰度值在128到255之间的图像划分为一个区域
gen_circle(Circle, 300, 300, 50) *直接生成region,生成一个圆,圆心(300,300),半径50
gen_ellipse (Ellipse, 300, 300, 0, 150,100) *直接生成region,生成一个椭圆, 圆心(300,300),倾斜角0°,长径150,短径100;
draw_region(Region1, WindowHandle) *通过鼠标生成region,通过其他转换成region比如XLD;
表现形式有填充fill和边缘margin
4、region结构是游程(行程)编码的一种变体;
5、游程编码:用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度;属于无损压缩编码,例子:AAABBBBBCCDDDD ;游程编码:A3B5C2D4
6、region的选择操作(select_shape)
select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )
* Features,形状特性检查,选择某些特征的region,参看例程select_shap.hdev
read_image (Image, 'fabrik')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black',WindowID)
dev_set_color ('white')
dev_set_draw ('fill') *定义区域填充模式
regiongrowing (Image, Regions, 1, 1, 3, 10)
dev_set_color ('red')
select_shape (Regions, SelectedRegions,'convexity', 'and', 0.95, 1) *粗度在0.95-1之间
dev_set_color ('green')
select_shape (Regions, SelectedRegions,'width', 'and', 100, 512) *宽度在100-512之间
dev_set_color ('blue')
select_shape (Regions, SelectedRegions,'area', 'and', 1, 100) *面积在1-100之间
area_center(Regions : : : Area, Row, Column) *计算区域面积和任意形状的区域中心坐标
7、region联合操作
8、Region转换操作(shape_trans) 变换的形状区域
shape_trans(Region :RegionTrans : Type : ) *Type:转换的类型:凸'convex',椭圆'ellipse',外接圆'outer_circle',内切圆 'inner_circle',正方形'rectangle1',长方形 'rectangle2',
内接长方形'inner_rectangle1','inner_center'
三、图像变量XLD(eXtendedLine Descriptions)
1、XLD代表亚像素精度的边缘轮廓和多边形;
2、XLD实例(XLD与Region-----xld.hdev);
3、XLD与Region相互转化;XLD与Region有很多相似之处;
4、XLD并不是沿着像素与像素交界的地方,而经过插值之后的位置;
threshold_sub_pix (Image, Border, 80)
threshold (Image, Region, 0, 80)
gen_contour_region_xld (Region, Contours, 'border') *边缘轮廓为曲线,亚像素,精度高
5、XLD选择操作(select_shape_xld ,select_contours_xld) 选择某些特性的XLD
select_shape_xld(XLD : SelectedXLD : Features,Operation, Min, Max : )
Features形状特性检查:面积'area',圆'circularity',非等轴的anisometric
select_contours_xld(Contours : SelectedContours : Feature, Min1, Max1, Min2, Max2 : )
参看例程:select_shape_xld.hdev
*这个例子展示了一些可能性选择轮廓使用他们特性的方法
dev_close_window ()
read_image (Letters,'letters')
crop_part (Letters,ImagePart, 295, 4, 200, 400)*剪出一个矩形图像区域,行列索引图像区域的左上角
get_image_size (ImagePart,Width, Height)
dev_open_window (0, 0,Width*2, Height*2, 'black', WindowHandle)
dev_display (ImagePart)
OpSystem :=environment('OS') *把电脑的操作系统传给OpSystem
if (OpSystem='Windows_NT') *if语句根据操作系统设置字体
set_font (WindowHandle, '-CourierNew-12-*-*-*-*-*-')
else
set_font (WindowHandle,'-adobe-courier-bold-r-normal--14-*-*-*-*-*-*-*')
endif
for Column := 0 to 4 by 1
dev_set_color('green')
gen_rectangle1(Rectangle, 1, 2+40*Column, 395, 32+40*Column) *创建一个矩形平行于坐标轴
reduce_domain (ImagePart, Rectangle,ImageReduced) *降低图像的领域
threshold_sub_pix (ImageReduced, Border,100) *从图像中提取亚像素精度,100是阈值水平
set_tposition (WindowHandle, 80,4+40*Column) *设置文本光标的位置
dev_set_color ('red')
if (Column=0)
* select circular contours 选择圆形轮廓,圆度在0.8-1的
select_shape_xld (Border, SelectedXLD,'circularity', 'and', 0.8, 1)
write_string (WindowHandle, 'circular') 写的位置怎么确定
endif
if (Column=1)
* select convex contours 曲面的,凸度在0.8-1的
select_shape_xld (Border, SelectedXLD,'convexity', 'and', 0.8, 1)
write_string (WindowHandle, 'convex')
endif
if (Column=2)
* select anisometric contours 非等轴的,离心率在1.4—999999的
select_shape_xld (Border, SelectedXLD,'anisometry', 'and', 1.4, 9999999)
write_string (WindowHandle, 'aniso-')
set_tposition (WindowHandle, 85,4+40*Column)
write_string (WindowHandle, 'metric')
endif
if (Column=3)
* select compact contours 紧凑的,紧密的
select_shape_xld (Border, SelectedXLD,'compactness', 'and', 5, 9999999)
write_string (WindowHandle, 'compact')
endif
if (Column=4)
* 最大半径在0-7之间的
select_shape_xld (Border, SelectedXLD,'max_diameter', 'and', 0, 7)
write_string (WindowHandle, 'small')
set_tposition (WindowHandle, 85,4+40*Column)
write_string (WindowHandle, 'diameter')
endif
endfor
area_center_xld(XLD : : : Area, Row, Column, PointOrder) *计算xld面积和中心位置
6、XLD的合并操作
union_cillinear_contours_xld合并在同一直线上的XLD
union_cocircular_contours_xld:合并在同圆的XLD
union_adjacent_contours_xld:合并邻近的XLD
7、XLD共圆合并的操作实例
8、XLD的转换操作(shape_trans_xld)
shape_trans_xld(XLD : XLDTrans : Type : )
XLD转换操作和Region的转换操作相似
9、XLD的分割操作(segment_contours_xld)
把原XLD分割成:直线,直线和圆,直线和椭圆
segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : )
10、XLD的拟合操作(fit_***_contour_xld),这是XLD特有的
fit_circle_contour_xld:拟合圆
fit_ellipse_contour_xld:拟合椭圆
fit_line_contour_xld:拟合直线
fit_rectangle2_contour_xld:拟合矩形
转载网址:http://m.blog.csdn.net/blog/maque351081953/17512307