第十五章 Image, 图像
本章包含处理图像的运算符。
为了理解在HALCON中可以处理的不同类型的图像,图像的三个组成部分(像素,通道和域)将在以下段落中进行解释。
Pixel,像素
在HALCON中,像素可以用来表示各种各样的信息。因此可以区分不同的像素类型。下表列出了图像的不同像素类型和相应的标准图像类型。请注意,这个列表不是排他的(例如,灰度值图像也可以是多个其他图像类型)。可以使用convert_image_type转换图像类型。
注意,图像类型vector_field可以通过使用vector_field_absolute或vector_field_relative来进一步指定。还有映像类型int8(64位带符号),它只在64位系统上可用。关于不同像素类型的进一步信息如下所示。
灰度值
灰度图像的类型为字节(8位无符号)或uint2(16位无符号),由像素组成,通常表示传感器上的局部光强度。
灰度图
区别
为了显示两个图像之间的差异,例如图像类型int1(8位带符号)或int2(16位带符号)非常适合。
将一幅图像(1)与另一幅(例如连续拍摄的)图像(2)进行比较,将前者减去后者,得到一幅差分图像(3)。
二维直方图
为了根据两幅图像中灰度值的出现来检查图像特征,可以使用2D直方图,其类型为int4(32位带符号)。因此,二维直方图的各轴分别表示输入图像的灰度值。将输入图像中相应像素的灰度值配准到二维直方图中。特定灰度值组合的频率越高,输出图像中的灰度值就越高(参见histo_2dim)。
示例性图像的两个通道((1)、(2))及其各自的2D直方图(3)。
边缘方向
为了表示边缘梯度的方向,可以使用图像类型方向(8位,不带符号)。
通过可视化图像边缘的方向(2)来检查图像(1)。
对于方向类型的图像,在数学意义上,相对于水平轴的x度边缘方向在边缘方向图像中存储为x / 2(导致灰度值从0到179)。边缘振幅为0的点的边缘方向为255(未定义方向)。
使用sobel_dir可视化深色和明亮物体的边缘方向。像素的边缘方向(在输入图像中用切线箭头标记)由右侧结果图像中对应的灰度值编码。没有边缘的位置用255的灰度值表示。
衍生品
实值(32位浮点值)类型图像用于表示图像的导数,例如为了提取边缘。
图像(1)的某些特征(例如边缘、梯度)可以通过考虑其导数(2)来检查。
傅里叶变换
为了检查图像的频域,使用傅里叶变换。频率的幅度和相位的组合用复数表示,因此图像类型是复数的(每像素两个实值)。
识别字母(1)的一种策略是通过计算傅里叶变换(2)来观察它的频域。
色调值
色调值是循环编码的(8位没有符号),因此255+1=0。
像素表示色相值。当增加一个像素值超过255时,它被移到光谱的另一端。因此,在(1)的每个循环像素值上加上一个常数,就得到了类似于(2)的图像。
向量场
表示绝对/相对光流的特殊图像类型是vector_field(由x和y方向的两个实数图像组成)。向量场的类型可以通过赋值vector_field_absolute(解释为绝对坐标)或vector_field_relative(解释为向量)来进一步指定。
像素的相对运动(例如,在连续图像(1)和(2)中)可以用向量场(3)表示。
Channel,通道
除了不同的像素类型,一幅图像还可以使用不同的图像通道来存储特定的信息。基本上,可以使用通道为像素分配多个值。下面几节提到了几种情况,其中不同数量的通道是有用的。
灰度值图像(单通道图像)
通常,图像的每个像素只存储一个值。例如,灰度值图像在传感器上为每个像素存储一个表示本地光强度的值。然而,各种类型的信息可以分配给这些像素(例如,灰度值的导数,距离)。将它们可视化,类似于灰度值图像,可以帮助解释数据。
RGB图像(三通道图像)
对于彩色图像,像素值通常存储在三个通道中,每个通道表示各自像素(RGB图像)的红色、绿色或蓝色光的强度。通过添加混合分配给一个像素的三个值,定义一个特定的颜色。
除了RGB模型,还有其他一些颜色空间。有关这些模型以及如何在不同颜色空间之间转换的更多信息,请分别参见trans_to_rgb和trans_from_rgb。
RGB图像(1)及其三个通道分别:红色(2),绿色(3)和蓝色通道(4)的局部强度不同。
多光谱图像(多通道图像)
使用特殊的相机,可以在图像中记录各种光谱波段,包括可见光光谱以外的波段。例如,卫星相机通常获取多光谱数据,并分别将其存储在多个不同的通道中。
卫星图像的六个通道:利用多光谱图像的不同通道,可以提取出特定光谱波段中最突出的特征。
多通道图像
除了表示光强,在一个图像中组合多个通道可以帮助完成各种其他任务。
例如,将灰度值图像与包含图像像素各自深度值的附加通道相结合,可以在3D图中可视化场景。
除了使用深度相机,还可以使用多通道图像来提取深度信息。因此,每个通道必须包含以不同焦点级别拍摄的一系列图像中的一个。
除了包含空间信息外,图像的通道还可以被解释为一个特征空间,以便进行主成分分析。
Domain, 域
图像域确定在后续操作中使用的图像的面积。为了将处理重点放在感兴趣的区域和/或加快操作速度,可以将域缩小到图像的相关部分。
原始图像(1)的域被缩小,例如考虑最小灰度值阈值(2)。仍然与进一步操作相关的区域(橙色)保留在结果图像(3)中,而图像中不需要的区域被排除(黑色)。
15.1 Access, 访问
操作符列表
get_grayval
访问图像对象的灰度值。
get_grayval_contour_xld
返回图像在XLD轮廓位置的灰度值。
get_grayval_interpolated
返回图像在由行和列组成的元组给出的位置上的灰度值。
get_image_pointer1
访问通道的指针。
get_image_pointer1_rect
访问图像数据指针和输入图像域中最小矩形内的图像数据。
get_image_pointer3
访问彩色图像的指针。
get_image_size
返回图像的大小。
get_image_time
创建映像的请求时间。
get_image_type
返回图像的类型。
15.2 Acquisition,获取
操作符列表
close_framegrabber
关闭指定的图像采集设备。
get_framegrabber_callback
查询图像采集设备的回调函数。
get_framegrabber_lut
查询图像采集设备的查找表。
get_framegrabber_param
查询图像采集设备的相关参数。
grab_data
从指定的图像采集设备同步抓取图像和预处理图像数据。
grab_data_async
从指定的图像采集设备异步抓取图像和预处理图像数据。
grab_image
从指定的图像采集设备同步抓取图像。
grab_image_async
从指定的图像采集设备异步抓取图像。
grab_image_start
从指定的图像采集设备启动异步抓取。
info_framegrabber
查询指定图像采集接口信息。
open_framegrabber
打开并配置图像采集设备。
set_framegrabber_callback
注册一个图像采集设备的回调函数。
set_framegrabber_lut
设置图像采集设备的查找表。
set_framegrabber_param
设置图像采集设备的相关参数。
15.3 Channel, 通道
操作符列表
access_channel
访问多通道映像的一个通道。
append_channel
向图像追加额外的矩阵(通道)。
channels_to_image
将单通道图像转换为多通道图像。
compose2
将两个图像转换成一个双通道图像。
compose3
将3个图像转换成一个三通道图像。
compose4
将4个图像转换成一个四通道图像。
compose5
将5个图像转换为5通道图像。
compose6
将6个图像转换为6通道图像。
compose7
将7个图像转换成7通道图像。
count_channels
计数通道的图像。
decompose2
将一个双通道图像转换成两个图像。
decompose3
将一个三通道图像转换成三个图像。
decompose4
将四通道图像转换为四通道图像。
decompose5
将五通道图像转换为五通道图像。
decompose6
将一个六通道图像转换成六个图像。
decompose7
将七通道图像转换为七通道图像。
image_to_channels
将多通道图像转换为单通道图像。
15.4 Creation,创建
操作符列表
copy_image
复制一个映像并为它分配新的内存。
gen_image1
从指向像素的指针创建图像。
gen_image1_extern
使用存储管理从像素上的指针创建图像。
gen_image1_rect
从像素上的指针创建具有矩形域的图像(使用存储管理)。
gen_image3
从三个指针到像素(红/绿/蓝)创建一个图像。
gen_image3_extern
使用存储管理从像素上的三个指针创建一个三通道图像。
gen_image_const
创建一个具有恒定灰度值的图像。
gen_image_gray_ramp
创建一个灰度渐变值。
gen_image_interleaved
从指向交错像素的指针创建一个三通道图像。
gen_image_proto
创建具有指定的恒定灰度值的图像。
gen_image_surface_first_order
用一阶多项式创建一个倾斜的灰色表面。
gen_image_surface_second_order
用二阶多项式创建一个弯曲的灰色曲面。
interleave_channels
从多通道图像创建交错图像。
region_to_bin
将一个区域转换为二进制字节图像。
region_to_label
将区域转换为标签图像。
region_to_mean
用平均灰度值绘制区域。
15.5 Domain,域
操作符列表
add_channels
为区域添加灰度值。
change_domain
更改图像的定义域。
full_domain
将图像的域扩展到最大值。
get_domain
获取图像的域。
rectangle1_domain
将图像的域缩小到一个矩形。
reduce_domain
减少图像的域。
15.6 Features,特征
操作符列表
area_center_gray
计算灰度图像中区域的面积和重心。
cooc_feature_image
计算共现矩阵并推导其灰度值特征。
cooc_feature_matrix
从共现矩阵中计算灰度值特征。
elliptic_axis_gray
计算灰度值图像中区域的方向和长轴。
entropy_gray
确定图像的熵和各向异性。
estimate_noise
从单个图像中估计图像噪声。
fit_surface_first_order
计算灰度值矩和近似的一阶曲面(平面)。
fit_surface_second_order
计算灰度值矩和近似的二阶曲面。
fuzzy_entropy
确定区域的模糊熵。
fuzzy_perimeter
计算一个区域的模糊周长。
gen_cooc_matrix
计算图像中区域的共现矩阵。
gray_features
计算一组区域的灰度值特征。
gray_histo
计算灰度值分布。
gray_histo_abs
计算灰度值分布。
gray_histo_range
计算某一灰度值范围内单通道图像的灰度值分布。
gray_projections
计算水平和垂直灰度值投影。
histo_2dim
计算双通道灰度值图像的直方图。
intensity
计算灰度值的均值和偏差。
min_max_gray
确定区域内的最小和最大灰度值。
moments_gray_plane
计算灰度值矩和近似的一个平面。
plane_deviation
计算灰度值与近似图像平面的偏差。
select_gray
根据灰度值特征选择区域。
shape_histo_all
确定沿所有阈值的特征直方图。
shape_histo_point
确定沿所有阈值的特征直方图。
15.7 Format,格式
操作符列表
change_format
更改图像大小。
crop_domain
删除定义的灰度值。
crop_domain_rel
剪出一个相对于域的图像区域。
crop_part
裁剪出一个或多个矩形图像区域。
crop_rectangle1
裁剪出一个或多个矩形图像区域。
tile_channels
将多个图像平铺成一个大图像。
tile_images
将多个图像对象平铺成一个大图像。
tile_images_offset
将多个图像对象平铺成具有明确定位信息的大图像。
15.8 Manipulation,操控
操作符列表
overpaint_gray
覆盖图像的灰度值。
overpaint_region
覆盖图像中的区域。
paint_gray
将一个图像的灰度值绘制到另一个图像中。
paint_region
将区域绘制到图像中。
paint_xld
将XLD对象绘制成图像。
set_grayval
在图像中设置单个灰度值。
15.9 Type Conversion ,类型转换
操作符的列表
complex_to_real
将一个复像转换成两个实像。
convert_image_type
转换图像的类型。
real_to_complex
把两个实像转换成一个复像。
real_to_vector_field
将两个实值图像转换为矢量场图像。
vector_field_to_real
将矢量场图像转换为两个实值图像。