http://blog.sina.com.cn/s/blog_61cc743001018gny.html
好久没有写篇文章了。写一篇总结吧。
1、Halcon的自我描述
Program
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
由此可以看出,Halcon的定位是一个类库,有着完整、快速实现函数,同时提供了HDevelop作为快速开发的图形化(IDE)界面;但是,Halcon程序并不是一个完整的最终应用软件,它没有用户界面,也不提供显示的数据(公用的数据格式)。
Halcon的初学者也应当从参考Halcon的程序入手,熟悉Halcon类库,也即HDevelop-Based
The
2、HDevelop界面的学习
通过阅读Halcon的PPT,学到了下面一些有用的信息:
Ø
Ø
Ø
Ø
3、基本语法结构
Halcon的语法结构
类似于Pascal
不允许单独声明变量;
提供自动的内存管理(初始化、析构及OverWrite),但句柄则需要显示释放;
C++(算子模式)
通过代码导出,以C++为例,默认导出为算子型的语法结构,而非面向对象的;在此模式下,全部函数声明为全局类型,数据类型只需要用Hobject、HTuple两类类型进行声明;
C++(面向对象)
可以以面向对象的方式重写代码,也即利用类及类的成员函数;
在这种模式下,控制变量的类型仍未HTuple,而图形数据可以由多种类型,如HImage等;
其他语言(略)
4、Halcon数据结构
两类参数:图形参数Iconic
图形参数Iconic:
Images
Ø
Ø
Ø
byte,
int1,
direction //图片边缘的梯度方向
real //边缘提取及特定灰度值的轮廓
complex //图片频率分布
cyclic //Assigning
vector_field //连续图形的光学流分布
Regions
Ø
Ø
Ø
图形编码中,需要了解
Extended
Ø
Ø
Ø
此外,Halcon支持的类型还包括图形元组、控制变量元组及句柄:
元组的概念,使得可以用一个变量传递数个对象,可以由重载后的函数来进行处理;图形元组的下标从1开始,控制变量元组下标从0开始;句柄则可以用来描述窗体、文件等等,句柄不能是常量。
5、Halcon语言
输入控制参数可以是表达式,但图形参数、输出参数均应为变量;
String类型变量由单引号’括起来;此外还有一些特殊字符;
Boolean型变量包括
函数返回常量用于标识错误:
Ø
Ø
Ø
可以放在try…catch…endtry块中,也可以用dev_error_var()与
控制语句结构:(与一般语言略有不同,它们也有输入输出变量)
Ø
Ø
Ø
Ø
此外,也有关键字
赋值语句在Halcon中也被当作函数来使用:
标准赋值
Ø
Ø
元组插入赋值
Ø
Ø
控制变量元组操作
Ø
Ø
Ø
Ø
Ø
图形元组操作对应函数
Ø
Ø
Ø
Ø
Ø
Ø
元组的数学运算,如:A
若m、n不相等,且都大于1,则错误;否则返回三种情况:
Ø
Ø
Ø
Halcon
算术运算
Ø
Ø
Ø
Ø
Ø
Ø
位运算
Ø
Ø
Ø
Ø
Ø
Ø
字符串操作
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
比较操作符
Ø
Ø
Ø
Ø
Ø
Ø
逻辑操作符
Ø
Ø
Ø
Ø
数学函数
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
其他操作(统计、随机数、符号函数等)
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
6、Halcon名称解释
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
7、Halcon函数
典型函数
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
8、Halcon
HDevEngine允许用户在应用程序中直接调用Halcon程序(*.hdvp),适用范围包括C++、COM、.NET语言。具体功能为:
Ø
Ø
Ø
Ø
Ø
Ø
在C++中,使用HDevEngine需要包括头文件#include
利用HDevEngine,可以很方便得实现多线程。
9、Halcon数据结构(2)
Halcon中,Image
Image相关操作:
Ø
Ø
Ø
Ø
Ø
Rules
边界点的处理:镜像、常数、延续、周期(略):
域的局限性:一些算子总是要处理周围的矩形区域,比如mean_image(),并且总是先处理小的区域;
测量工具中的ROIs比较特殊,这种ROIs并不依附于Image上,而是在算子gen_measure_*()后产生,并且也只能是任意朝向的矩形、圆弧形区域;
处理多通道图像:
Ø
//对“Gray
Ø
Ø
Ø
图像金字塔中,第一个图像为最大的图像,各图像有各自的区域
标准图形(Shape):circle、ellipse、rectangle1、rectangle2、line、polygon
特殊区域图形:gen_grid_region():
图像处理:
Ø
Ø
Ø
10、Halcon数据结构(3)
区域运算:
Ø
Ø
Ø
Ø
图形显示参数设置:
Ø
Ø
Ø
Ø
Ø
11、Halcon数据结构(4)
关于XLD,简要写一下:
图像均用像素点保存,而像素点是整型的,不连续的;Halcon做了拓展,定义了亚像素(subpixel)的对象:xld;其实xld已经用过了,比如提取边缘、构建轮廓等等,xld在模板匹配、图形校准等多方面有重要的用途。
12、色彩
在视网膜底部,有三类感光细胞,它们分别探测不同频率的光,产生RGB神经冲动,并把这些神经冲动传递下去;经过另外的细胞的处理,转换成1个亮度通道、两个色彩通道。
Ø
所以,RGB图是原始的感光图,而人眼的感觉,却不是RGB三通道的叠加;更直观地描述人的感觉,需要用到其他的色彩空间,比如hsv空间。
不同频率的光,会产生不同的颜色;而光只有三种颜色,这是因为人眼只有三种光感受器。
所以有,任何光产生的颜色,都能够由这三种纯色来合成,这就是光的三元色。
对于相机来说,能够检测到的光谱范围比人眼要宽泛,比如红外相机等;为了获得人眼类似的图像,可以加上过滤装置,滤去超出400-700nm范围的光线。
13、色彩空间及
CCD彩色相机有R、G、B三种感光芯片,捕捉不同颜色,然后转换为RGB三通道。
颜色空间:
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
颜色空间的转换,依靠GPU进行运算:trans_from_rgb(),速度快
Scale_image()
颜色的选取,通过对Hue通道进行threshold()
2D
N维像素分类:learn_ndim_norm()、learn_ndim_box()
LUT:MLP、SVM、GMM
彩色过滤器:用于彩色图像的分割等:edges_color()、edges_color_sub_pix()、lines_color()
14、Halcon
Halcon窗体的坐标系统:(Row,
图形:可以显示灰度图、彩色图、3D;定义要显示的区域,插值
区域:绘图模式(Fill、Margin),边界、线宽,定义色彩模式,自动图形转换
绘图:点、线、xld等
《halcon工业应用实用教程》
http://item.taobao.com/item.htm?id=39534671342&spm=2015.21279357.0.0
3 HDevelop语言 141
3.1 参数的基本类型 141
3.2 控制类型和常量 141
3.2.1 整数integer和实数real 142
3.2.2 字符串string 142
3.2.3 布尔类型boolean 143
3.2.4 常量constant和元组tuple 143
3.3 变量 144
3.3.1 变量的作用域(局部或全局) 144
3.4 图形对象的操作 146
3.5输入控制参数表达式 146
3.5.1 元组操作的一般特征 146
3.5.2 赋值运算 147
3.5.3 元组的基本操作 149
3.5.4 元组创建 150
3.5.5 基本的算术运算 151
3.5.6 位运算 152
3.5.7字符串操作 153
3.5.8 比较操作 156
3.5.9布尔操作 157
3.5.10 三角函数 158
3.5.11 指数函数 158
3.5.12数学函数 159
3.5.13 其他函数 160
3.5.14 操作优先级 161
3.6 保留字 161
3.7 控制流算子 162
3.7.1 if ... endif 162
3.7.2 ifelse (if ... else ... endif) 163
3.7.3 elseif 163
3.7.4 while ... endwhile 163
3.7.5 repeat ... until 164
3.7.6 for ... endfor 164
3.7.7 continue 165
3.7.8 break 166
3.7.9 stop 166
3.7.10 exit 166
3.7.11 return 167
3.7.12 try ... catch ... endtry 167
3.7.13 throw 167
3.8 错误处理 167
3.8.1 追踪算子调用的返回值 167
3.8.2 异常处理 168
3.9 HDevelop操作汇总 169
3.10 HDevelop错误代码 172
4 用HDevelop采集图像 177
4.1 从文件中读取图像 177
4.1.1 采用拖拽的方式加载单幅图像 177
4.1.2 采用拖拽的方式加载多幅图像 178
4.1.3 用代码实现加载单幅图像 180
4.1.4 用代码实现加载多幅图像 180
4.2 查看图像 183
4.3 图像采集助手 183
4.3.1 菜单栏 184
4.3.2 工具栏 185
4.3.3 图像文件 185
4.3.3.1 加载单幅图像 185
4.3.3.2 加载多幅图像 188
4.3.4 图像获取接口 190
4.3.5 连接 191
4.3.6 参数 193
4.3.7 代码生成 195
4.3.8 算子说明 195
4.3.9 插入代码 197
4.3.10 使用实例 201
4.4 1394相机的图像采集接口 202
4.4.1 系统需求 203
4.4.2 特征 203
4.4.3 局限性 203
4.4.4 使用可伸缩图像格式(Format_7) 204
4.4.5 使用算子open_framegrabber 的通用参数 204
4.4.6 参数说明 205
4.4.6.1 open_framegrabber()的参数 205
4.4.6.2 set_framegrabber_param()的参数 211
4.4.6.3 get_framegrabber_param()的参数 215
4.4.6.4 set_framegrabber_callback()的参数 216
5 图像与ROI 219
5.1 图像常用算子 219
5.1.1 reduce_domain 219
5.1.2 crop_domain 219
5.1.3 add_channels 220
5.1.4 rgb1_to_gray 220
5.1.5 rgb3_to_gray 220
5.1.6 compose3 221
5.1.7 decompose3 221
5.1.8 trans_from_rgb 221
5.1.9 trans_to_rgb 221
5.1.10 invert_image 222
5.1.11 get_image_pointer1 222
5.1.12 get_image_pointer3 222
5.1.13 gen_image1 223
5.1.14 gen_image3 223
5.1.15 gen_image_const 223
5.1.16 gen_image_proto 224
5.1.17 get_image_size 224
5.1.18 write_image 224
5.1.19 read_image 224
5.1.20 get_grayval 225
5.1.21 set_grayval 225
5.1.22 dump_window 225
5.1.23 dump_window_image 225
5.1.24 copy_image 226
5.1.25 set_part 226
5.2 创建ROI 226
5.2.1交互式创建ROI 226
5.2.2 创建空ROI 227
5.2.2.1 gen_empty_obj 227
5.2.2.2 gen_emtpy_region 227
5.2.3 绘制ROI 227
5.2.3.1 draw_circle 227
5.2.3.2 draw_circle_mod 227
5.2.3.3 draw_ellipse 228
5.2.3.4 draw_ellipse_mod 228
5.2.3.5 draw_line 229
5.2.3.6 draw_line_mod 229
5.2.3.7 draw_nurbs 229
5.2.3.8 draw_nurbs_mod 230
5.2.3.9 draw_nurbs_interp 230
5.2.3.10 draw_nurbs_interp_mod 231
5.2.3.11 draw_point 231
5.2.3.12 draw_point_mod 232
5.2.3.13 draw_rectangle1 232
5.2.3.14 draw_rectangle1_mod 232
5.2.3.15 draw_rectangle2 233
5.2.3.16 draw_rectangle2_mod 233
5.2.3.17 draw_region 233
5.2.3.18 draw_xld 234
5.2.3.19 draw_xld_mod 234
5.2.4 生成ROI 234
5.2.4.1 gen_circle 234
5.2.4.2 gen_circle_contour_xld 235
5.2.4.3 gen_ellipse 235
5.2.4.4 gen_ellipse_contour_xld 235
5.2.4.5 gen_contour_nurbs_xld 236
5.2.4.6 gen_contour_polygon_rounded_xld 236
5.2.4.7 gen_contour_polygon_xld 236
5.2.4.8 gen_cross_contour_xld 237
5.2.4.9 gen_nurbs_interp 237
5.2.4.10 gen_parallel_contour_xld 237
5.2.4.11 gen_polygons_xld 238
5.2.4.12 gen_rectangle1 238
5.2.4.13 gen_rectangle2 238
5.2.4.14 gen_rectangle2_contour_xld 238
5.2.4.15 gen_region_line 239
5.2.4.16 gen_region_points 239
5.2.4.17 gen_region_polygon 239
5.2.4.18 gen_region_polygon_filled 240
5.2.5 对ROI进行操作 240
5.2.5.1 并集 240
5.2.5.2 交集 242
5.2.5.3 差集 243
5.2.5.4 对称差(异或) 244
5.3 region与xld的相互转换 245
5.3.1 gen_region_contour_xld 245
5.3.2 gen_region_polygon_xld 245
5.3.3 gen_contour_region_xld 246
5.3.4 gen_contours_skeleton_xld 246
5.4 ROI相关算子 246
5.4.1 get_obj_class 246
5.4.2 elliptic_axis 246
5.4.3 elliptic_axis_xld 247
5.4.4 get_region_points 247
5.4.5 get_contour_xld 247
5.4.6 get_polygon_xld 248
5.4.7 get_region_polygon 248
5.4.8 select_region_point 248
5.4.9 select_xld_point 248
5.4.10 test_region_point 249
5.4.11 test_xld_point 249
5.4.14 paint_gray 249
5.4.15 paint_region 249
5.4.16 paint_xld 250
5.4.16 area_center 250
5.4.17 area_center_xld 250
5.4.18 area_holes 251
5.4.19 gray_projections 251
5.4.20 Intensity 251
5.4.21 min_max_gray 251
5.4.22 shape_trans 252
5.4.23 shape_trans_xld 252
5.4.24 sort_contours_xld 253
5.4.25 sort_region 253
5.4.26 select_obj 253
5.4.27 copy_obj 254
5.4.28 concat_obj 254
5.4.29 edges_sub_pix 254
5.4.30 smooth_contours_xld 254
5.4.31 segment_contours_xld 255
5.4.32 get_contour_global_attrib_xld 255
5.4.33 smallest_circle 255
5.4.34 smallest_circle_xld 256
5.4.35 smallest_rectangle1 256
5.4.36 smallest_rectangle1_xld 256
5.4.37 smallest_rectangle2 256
5.4.38 smallest_rectangle2_xld 257
5.4.39 count_obj 257
5.4.40 select_shape 257
5.4.41 select_shape_std 258
5.4.42 select_shape_xld 258
5.4.43 select_contours_xld 258
5.4.44 region_to_bin 259
5.4.45 clip_contours_xld 259
5.4.46 clip_region 259
5.4.47 complement 260
5.4.48 write_contour_xld_arc_info 260
5.4.49 write_contour_xld_dxf 260
5.4.50 read_contour_xld_arc_info 260
4.5.51 read_contour_xld_dxf 260
5.4.52 disp_obj 261
5.5 一些常用例子 261
5.5.1 如何生成二值化图像 261
5.5.2 裁剪图像 263
5.5.3 根据一个点、一个角度绘制一条直线 264
5.5.4 获取仿射矩形(rectangle2)的4个顶点、4边中点 265
5.5.5 从多个轮廓中选择最长轮廓、最短轮廓 267
5.5.6 保存原始图像和结果图像 268
6 图像预处理与形态学 273
6.1 图像的点运算 273
6.1.1 灰度直方图 273
6.1.1.1 gray_histo 273
6.1.1.2 gen_region_histo 273
6.1.1.3 histo_to_thresh 274
6.1.1.4 灰度直方图使用实例 274
6. 1.2 灰度的线性变换 277
6.1.2.1 scale_image 277
6.1.2.2 scale_image_max 278
6.1.3 直方图均衡化 278
6.1.4 图像反转处理 278
6.1.5 图像加法处理 278
6.1.6 图像减法处理 279
6.1.7 图像除法处理 279
6.1.8 图像乘法处理 280
6.1.9 图像绝对差异处理 280
6.1.10 图像最大值处理 280
6.1.11 图像最小值处理 281
6.2 图像的几何变换 281
6.2.1 插值算法简介 281
6.2.2 图像的旋转 281
6.2.3图像的镜像变换 282
6.2.4 图像的缩放 282
6.2.4.1 zoom_image_factor 282
6.2.4.2 zoom_image_size 282
6.3 图像的滤波 283
6.3.1 图像的平滑 283
6.3.1.1 smooth_image 283
6.3.1.2 sigma_image 283
6.3.1.3 mean_image 283
6.3.1.4 gauss_image 284
6.3.2中值滤波 284
6.3.3 图像的锐化 284
6.3.3.1 frei_amp 285
6.3.3.2 kirsch_amp 285
6.3.3.3 prewitt_amp 285
6.3.3.4 sobel_amp 286
6.3.3.5 nonmax_suppression_amo 286
6.3.4 图像的增强 286
6.3.4.1 emphasize 286
6.3.4.2 illuminate 287
6.4 形态学 287
6.4.1 腐蚀 287
6.4.1.1 erosion1 288
6.4.1.2 erosion2 288
6.4.1.3 erosion_circle 288
6.4.1.4 erosion_rectangle1 289
6.4.2 膨胀 289
6.4.2.1 dilation1 289
6.2.4.2 dilation2 289
6.2.4.3 dilation_circle 290
6.2.4.4 dilation_rectangle1 290
6.4.3 开运算和闭运算 290
6.4.3.1 开运算 291
6.4.3.2 闭运算 291
6.4.4 骨架 292
6.4.4.1 skeleton 292
6.4.4.2 junctions_skeleton 293
6.4.4.3 split_skeleton_lines 293
6.4.4.4 split_skeleton_region 295
6.4.4.5 gen_contours_skeleton_xld 297
7 halcon标定 299
7.1 halcon标定概述 299
7.1.1 摄像机外参 299
7.1.2 摄像机内参 299
7.1.3 标定过程及应用 301
7.2 halcon标定 303
7.2.1 安装 303
7.2.1.1 标定任务 303
7.2.1.2 标定板 305
7.2.1.3 摄像机参数 309
7.2.2 标定 317
7.2.2.1 图像源 317
7.2.2.2 显示参数 320
7.2.2.3 标定板提取参数 321
7.2.2.4 标定和品质问题 322
7.2.2.5 设置参考位姿 329
7.2.2.6 标定的规则 330
7.2.3 结果 331
7.2.3.1 标定状态 331
7.2.3.2 摄像机参数 332
7.2.3.3 摄像机位姿 332
7.2.3.4 显示结果 334
7.2.4 代码生成 335
7.2.4.1 变量名称 336
7.2.4.2 代码预览 336
7.2.4.3 标定 336
7.2.4.4 使用示例 345
8 Blob分析 359
8.1 图像分割 360
8.1.1 threshold 360
8.1.1.1 算子简介 360
8.1.1.2 算子使用 360
8.1.2 bin_threshold 365
8.1.2.1 算子简介 365
8.1.2.2 算子使用 365
8.1.3 dyn_threshold 367
8.1.3.1 算子简介 367
8.1.3.2 算子使用 368
8.1.4 var_threshold 371
8.1.4.1 算子简介 371
8.1.4.2 算子使用 372
8.1.5 分水岭分割 372
8.1.5.1 watersheds 373
8.1.5.2 watersheds_threshold 374
8.1.6 auto_threshold 375
8.1.6.1 算子简介 375
8.1.6.2 算子使用 375
8.1.7 fast_threshold 376
8.1.7.1 算子简介 376
8.1.7.2 算子使用 376
8.2 连通性分析--connection算子 376
8.3 特征提取 377
8.3.1 select_shape 377
8.3.1.1 算子简介 377
8.3.1.2 特征 378
8.3.2 select_shape_std 381
8.3.2.1 算子简介 381
8.3.2.2 特征 381
8.3.3. select_shape_xld 381
8.3.3.1 算子简介 381
8.3.3.2 特征 382
8.4 其他算子 383
8.4.1 填充 383
8.4.1.1 fill_up 383
8.4.1.2 fill_up_shape 383
8.4.2 connect_and_holes 384
8.5 blob分析实例 384
9 几何定位 393
9.1 不支持缩放的几何定位 394
9.1.1 create_shape_model 394
9.1.2 create_shape_model_xld 397
9.1.3 find_shape_model 398
9.1.4 find_shape_models 400
9.1.5 clear_shape_model 401
9.1.6 clear_all_shape_models 401
9.1.7 参数关系与优化匹配 402
9.2支持x、y方向同步缩放的几何定位 403
9.2.1 create_scaled_shape_model 403
9.2.2 create_scaled_shape_model_xld 403
9.2.3 find_scaled_shape_model 404
9.2.4 find_scaled_shape_models 404
9.2.5 clear_shape_model 405
9.3 支持x、y方向异步缩放的几何定位 405
9.3.1 create_aniso_shape_model 405
9.3.2 create_aniso_shape_model_xld 406
9.3.3 find_aniso_shape_model 406
9.3.4 find_aniso_shape_models 407
9.3.5 clear_shape_model 408
9.4 边界处理 408
9.5 其他算子 408
9.5.1 数组读写 408
9.5.1.1 write_tupe 408
9.5.1.2 read_tuple 409
9.5.2 模板读写 409
9.5.2.1 write_shape_model 409
9.5.3 get_shape_model_contours 409
9.5.4 get_shape_model_origin 410
9.5.5 set_shape_model_origin 410
9.5.6 determine_shape_model_params 410
9.5.7 get_shape_model_params 411
9.5.8 set_shape_model_param 411
9.5.9 inspect_shape_model 412
9.5.10 dev_display_shape_matching_results 413
9.6 Matching(匹配)助手 413
9.6.1 HDevelop的匹配助手简介 413
9. 6.2 匹配助手的使用 415
9. 6.2.1 选择匹配理论 415
9. 6.2.2 创建模板 416
9. 6.2.3 测试模板 420
9.6.2.4 人工优化识别速度 423
9.6.2.5自动优化识别速度 424
9.6.2.6 检查调整参数的匹配结果 424
9.6.3代码生成 425
9.7 几何定位应用实例 429
9.7.1 单模板无缩放几何定位 429
9.7.1.1 基于模板图像建模的定位 430
9.7.1.2 基于XLD轮廓建模的定位 432
9.7.2 多模板无缩放几何定位 434
9.7.3 单模板x、y方向同步缩放的几何定位 438
9.7.4 单模板x、y方向异步缩放的几何定位 441
10 仿射变换 445
10.1 仿射变换简介 445
10.2 仿射变换流程 445
10.3根据特征点、角度计算仿射变换矩阵 446
10.3.1 算子介绍 446
10.3.1.1 hom_mat2d_identity 446
10.3.1.2 hom_mat2d_rotate 446
10.3.1.3 hom_mat2d_scale 446
10.3.1.4 hom_mat2d_translate 447
10.3.1.5 hom_mat2d_slant 447
10.3.1.6 vector_angle_to_rigid 447
10.4 根据两个以上特征点计算仿射变换矩阵 448
10.4.1 vector_to_rigid 448
10.4.2 vector_to_similarity 448
10.5根据三个以上特征点获取仿射变换矩阵 448
10.5.1 vector_to_hom_mat2d 448
10.6 计算仿射变换参数 449
10.6.1 hom_mat2d_to_affine_par 449
10.7 对图像、ROI和XLD进行仿射变换 449
10.7.1 affine_trans_contour_xld 449
10.7.2 affine_trans_image 449
10.7.3 affine_trans_pixel 450
10.7.4 affine_trans_point_2d 450
10.7.5 affine_trans_polygon_xld 450
10.7.6 affine_trans_region 451
10.8 应用实例 451
10.8.1根据几何定位结果显示模板轮廓 451
10.8.2用几何定位和Blob实现平移变换 456
10.8.2.1 用几何定位实现 456
10.8.2.2 用Blob实现 463
10.8.3 用几何定位实现仿射变换 467