图像类型转换及图像灰度值缩放
1 图像类型转换
在Halcon中,通过convert_image_type算子来转换图像类型。算子原型如下:
convert_image_type(Image : ImageConverted : NewType : )
其中,参数Image为输入图像,ImageConverted为输出图像,NewType为转换的类型。参数支持的类型有(‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’)。如果将大范围灰度值转换为小范围的灰度值,比如int4转换为byte,将出现截断的情况;如果将图像转换成direction类型,灰度值不在有效范围内,direction类型图像将灰度值设置为255,标记为无效值。为了适应direction类型,一般情况下先调用scale_image算子对灰度值进行转换。
Halcon支持的图像像素类型如下:
- byte:8位无符号
- uint2:16位无符号
- int1:8位无符号
- int2:16位无符号
- int4:32位无符号
- direction:8位无符号,值[0,179]
- real:32位浮点类型
- complex:每像素的real值
- cylic:8位无符号,255+1=0
- vector_field:两帧real类型图像描述x或y的运动方向
2 图像灰度值缩放
通过使用scale_image算子对图像灰度值进行缩放。scale_image使用以下公式计算:
g
′
=
g
∗
M
u
l
t
+
A
d
d
g' = g * Mult + Add
g′=g∗Mult+Add
其中,
M
u
l
t
=
255
G
M
a
x
−
G
M
i
n
Mult = \frac{255}{GMax - GMin}
Mult=GMax−GMin255,
A
d
d
=
−
M
u
l
t
∗
G
M
i
n
Add = -Mult * GMin
Add=−Mult∗GMin。
G
M
a
x
GMax
GMax和
G
M
i
n
GMin
GMin可以通过min_max_gray算子计算。
例如,将灰度图像(byte)类型转换direction类型,然后对图像进行正弦三角函数计算
* 读取图像
read_image(src,'fabrik')
* 缩放图像像素灰度值
get_image_size(src,width,height)
* 生成图像大小的矩形
gen_rectangle1(rectangle,0,0,width,height)
* 获取图像像素灰度值的最大和最小值
min_max_gray(rectangle,src,0,gmin,gmax,range)
mult := 255 / (gmax - gmin)
add := -mult * gmin
* 图像像素灰度值缩放
scale_image(src,src_scaled,mult,add)
* 转换direction类型
convert_image_type(src_scaled,src_direction,'direction')
sin_image(src_direction,result_direction)
* 使用cyclic类型计算
convert_image_type(src_scaled,src_cyclic,'cyclic')
* 对图像进行正弦计算
sin_image(src_cyclic,result_cyclic)