文章目录
- 算子
- 快捷键
- 一、Halcon数据类型
- Iconic (图标)
- Control (控制)
- Tuple (数组)
- 二、ROI(区域)
- 1.代码创建ROI
- 2.手动创建ROI
- 三、图形预处理
- 1.图像的变换与矫正
- 平移 -hom_mat2d_translate
- 旋转
- 缩放-HomMat2D:输入的仿射变换矩阵。
- 切变
- 相似变换
- 仿射变换 affine_trans_image
- 投影变换- projective_trans_image
算子
类似于C++的函数,但参数依次为:输入图形参数、输出图形参数、输入控制参数、输出控制参数
快捷键
- 多行注释:选中想要注释的代码,然后直接按F4
- 取消注释:按F3可以取消注释
一、Halcon数据类型
Iconic (图标)
- Image(图像)
//读取图片的算子
read_image (图片变量名, 图片位置'mreut')
- Region(区域)
threshold (Mreut, Region, 190, 255)
//阈值化,输出阈值在190-255的Regions
- Extended Line Description(XLD)
Control (控制)
- String (字符)
- Integer (整形)
- Real (实型)
- Handle (句柄)
Tuple (数组)
二、ROI(区域)
1.代码创建ROI
read_image(Image,'claudia.png')
gen_rectangle1(Region,0,10,100,100)-创建矩形ROI
reduce_domain(Image,Region,Image2)-将给定图像的定义域缩小到指定的区域。
dev_display(Image2)-显示图片
2.手动创建ROI
read_image(Image,'claudia.png')
get_image_size(Image,Width,Height)-获取图片长宽
dev_open_window(0,0,Width,Height,'black',WindowHandle)-创建图形窗口
draw_rectangle1(WindowHandle,Row1, Column1, Row2, Column2)-获取画的矩形坐标和大小
gen_rectangle1(Rectangle, Row1, Column1, Row2, Column2)-创建矩形region
reduce_domain(Image, Rectangle, ImageReduced)-缩减到创建region
dev_display(ImageReduced)
按下鼠标右键确认框选
三、图形预处理
函数:
hom_mat2d_identity( : : : HomMat2DIdentity)
作用:生成变换矩阵
HomMat2DIdentity:生成的变量名
1.图像的变换与矫正
平移 -hom_mat2d_translate
函数:
hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
作用:平移矩阵
参数:
HomMat2D:变换矩阵
Tx:沿x轴方向平移的距离。
Ty:沿y轴方向平移的距离。
HomMat2DTranslate:输出变换的矩阵
旋转
公式:
函数:
hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
作用:将旋转角度添加到仿射变换矩阵
参数:
HomMat2D:输入的仿射变换矩阵。
Phi:旋转角度(单位为弧度)。
Px:变换的固定点行坐标。固定点是指以该点为支撑进行仿射变换(这里是指围绕这点进行旋转)。
Py:变换的固定点列坐标。
HomMat2DRotate:输出的变换矩阵
缩放-HomMat2D:输入的仿射变换矩阵。
Phi:旋转角度(单位为弧度)。
Px:变换的固定点行坐标。固定点是指以该点为支撑进行仿射变换(这里是指围绕这点进行旋转)。
Py:变换的固定点列坐标。
HomMat2DRotate:输出的变换矩阵
函数:
hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
作用:将缩放添加到仿射变换矩阵中
HomMat2D:输入的仿射变换矩阵。
Phi:旋转角度(单位为弧度)。
Px:变换的固定点行坐标。固定点是指以该点为支撑进行仿射变换(这里是指围绕这点进行旋转)。
Py:变换的固定点列坐标。
HomMat2DRotate:输出的变换矩阵
切变
公式:下面介绍切变的其他和看上面
函数:
hom_mat2d_slant( : : HomMat2D, Theta, Axis, Px, Py : HomMat2DSlant)
作用:添加切变到仿射变换矩阵中
参数:
HomMat2D:输入的仿射变换矩阵。
Theta:斜切角度(单位:弧度)。
Axis:斜切的坐标轴,取值可以是 'x' 或 'y'。
Px:变换的固定点x坐标。
Py:变换的固定点y坐标。
HomMat2DSlant:输出的斜切仿射变换矩阵
相似变换
相似变换:由一个平面/立体图形变换到另一个平面/立体图形,在改变的过程中保持形状不变(大小方向和位置可变),任何相似变换都可以分解为等比例缩放、平移、旋转的组合。
仿射变换 affine_trans_image
仿射变换:由一个平面/立体图形变换到另一个平面/立体图形,在改变的过程中保持直线和平行线不变(平行线映射为平行线),任何仿射变换都可以分解为缩放、平移、旋转、和切变的组合。
函数:
affine_trans_image(Image : ImageAffineTrans : HomMat2D, Interpolation, AdaptImageSize : )
作用:放射变换图片
参数:
Image:需要变换的图片
ImageAffineTrans:变换后的图片
HomMat2D :变换的矩阵
Interpolation:插值算法,一般用‘constant’
AdaptImageSize:是否自适应,true 或者 false
样例代码:
read_image(Image,'claudia.png')
get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
dev_display(Image)
*创建矩阵
*平移
* hom_mat2d_identity(HomMat2DIdentity)
* hom_mat2d_translate(HomMat2DIdentity,Width/2,Height/2,HomMat2DTranslate)
* affine_trans_image(Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'true')
* dev_clear_window()
* dev_display(ImageAffineTrans)
*旋转
* hom_mat2d_identity(HomMat2DIdentity)
* hom_mat2d_rotate(HomMat2DIdentity,3.14/2,Width/2,Height/2,HomMat2DRotate)
* affine_trans_image(Image,ImageRotate,HomMat2DRotate,'constant','false')
* dev_clear_window()
* dev_display(ImageRotate)
*缩放
* hom_mat2d_identity(HomMat2DIdentity)
* hom_mat2d_scale(HomMat2DIdentity, 0.5, 0.5, Height, Width,HomMat2DScale)
* affine_trans_image(Image, ImageAffineTrans, HomMat2DScale, 'constant', 'false')
* dev_clear_window()
* dev_display(ImageAffineTrans)
*切变
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_slant(HomMat2DIdentity, -3.14/4, 'x', Height,Width, HomMat2DSlant)
affine_trans_image(Image, ImageAffineTrans1, HomMat2DSlant, 'constant', 'false')
dev_clear_window()
dev_display(ImageAffineTrans1)
投影变换- projective_trans_image
仿射变换几乎能校正物体所有可能发生的与位姿相关的变化,但并不能应付所有情况。投影变换包括的情况很多,如对边不再平行,或者发生了透视畸变等,这时可以使用投影变换使其恢复原状。其步骤与仿射变换类似,首先计算投影变换矩阵,然后计算投影变换参数,最后将投影变换矩阵映射到对象上。
函数:
projective_trans_image(Image : TransImage : HomMat2D, Interpolation, AdaptImageSize, TransformDomain : )
作用:应用一个齐次投影变换矩阵(HomMat2D)到输入图像上,生成变换后的输出图像。
参数:
Image (input_object): 输入图像。
TransImage (output_object): 输出图像。
HomMat2D (input_control): 齐次投影变换矩阵。
Interpolation (input_control): 变换的插值方法,默认为 'bilinear',可选值包括 'bilinear', 'nearest_neighbor'。
AdaptImageSize (input_control): 是否自动调整输出图像的大小,默认为 'false'。
TransformDomain (input_control): 是否变换输入图像的域,默认为 'false'
样例:
read_image(Image,'4-3.png')
dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle)
dev_set_color('red')
dev_set_line_width(2)
X:=[163,280,362,75]
Y:=[125,120,361,340]
dev_display(Image)
gen_cross_contour_xld(Cross, X, Y, 6, 0.785398)//生成叉叉
dev_display(Cross)
*根据点计算齐次变换矩阵
hom_vector_to_proj_hom_mat2d(X,Y,[1,1,1,1],[75,360,360,75],[110,110,395,395],[1,1,1,1],'normalized_dlt', HomMat2D)
*投影变换
projective_trans_image(Image, TransImage, HomMat2D, 'bilinear', 'false', 'false')