功能:实现图像的平移旋转和缩放。
核心由以下三个算子组成:
1.hom_mat2d_identity()
2.hom_mat2d_translate()或者hom_mat2d_rotate()或者hom_mat2d_scale()
3.affine_trans_region()
步骤:
1.首先得到一个3*3的单位矩阵,因为像素点的位置和单位矩阵进行计算并不会产生任何作用,所以以此为基准。
2.改变单位矩阵相应位置的数值,从而使得单位矩阵不再是单纯的单位矩阵。
3.根据矩阵的特性,将其与对应像素点的位置进行运算,从而实现像素点位置的移动。
总结:
图像移动的本质就是对像素点的位置进行矩阵操作。
一.平移
代码示例:
dev_clear_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('red')
draw_region(Region, WindowHandle)
//创建单位矩阵
hom_mat2d_identity(HomMat2DIdentity)
//改造单位矩阵,这里是平移操作,所以向单位矩阵中添加偏移量,100和50就是对应的偏移量
hom_mat2d_translate(HomMat2DIdentity, 100, 50, HomMat2DTranslate)
//将图像的像素点进行矩阵的操作,从而得到新的坐标位置,也就实现了图像的平移
affine_trans_region(Region, RegionAffineTrans, HomMat2DTranslate, 'nearest_neighbor')
dev_clear_window()
dev_set_color('red')
dev_set_draw('margin')
dev_display(Region)
dev_set_color('green')
dev_display(RegionAffineTrans)
二.旋转
代码示例:
dev_clear_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('red')
draw_region(Region, WindowHandle)
area_center(Region, Area, Row, Column)
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, 3.14, Row,Column, HomMat2DRotate)
affine_trans_region(Region, RegionAffineTrans, HomMat2DRotate, 'nearest_neighbor')
dev_clear_window()
dev_set_draw('margin')
dev_set_color('red')
dev_display(Region)
dev_set_color('blue')
dev_display(RegionAffineTrans)
三.缩放:
代码示例:
dev_clear_window()
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
dev_set_color('red')
draw_region(Region, WindowHandle)
dev_display(Region)
//得到Region的圆心位置
area_center(Region, Area, Row, Column)
hom_mat2d_identity(HomMat2DIdentity)
//第2,3个参数相等,说明图像是按照比例变大或者变小
hom_mat2d_scale(HomMat2DIdentity, 2, 2, Column, Row, HomMat2DScale)
affine_trans_region(Region, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')
dev_clear_window()
dev_set_color('red')
dev_set_draw('margin')
dev_display(Region)
dev_set_color('blue')
dev_display(RegionAffineTrans)
dev_clear_window()
hom_mat2d_identity(HomMat2DIdentity)
dev_display(Region)
//第2,3个参数的值不同,会产生畸变
hom_mat2d_scale(HomMat2DIdentity, 3, 2, Column, Row, HomMat2DScale1)
affine_trans_region(Region, RegionAffineTrans1, HomMat2DScale1, 'nearest_neighbor')
dev_set_color('red')
dev_display(RegionAffineTrans1)