【Halcon】图像、区域缩放

最近在做一个项目的时候,需要对算法时间进行优化,由于算法可优化的过程较少,因此考虑在图像大小上做下文章。

 暂时,在Halcon中看到主要是以下几种方案:实现图像、区域缩放
1.方法一
根据缩放因子实现图像缩放
zoom_image_factor(Image : ImageZoomed : ScaleWidth, ScaleHeight, Interpolation : )

dev_close_window ()
read_image(Image,'monkey')
zoom_image_factor(Image,ZooImage, 0.5, 0.5, 'bilinear')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
dev_open_window_fit_image (ZooImage, 0, 0, -1, -1, WindowHandle1)
dev_display (ZooImage)

2.方法二
根据尺寸进行图像的缩放
zoom_image_size(Image : ImageZoom : Width, Height, Interpolation : )

dev_close_window ()
read_image(Image,'monkey')
zoom_image_size (Image, ImageZoom, 256, 256, 'bilinear')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
dev_open_window_fit_image (ImageZoom, 0, 0, -1, -1, WindowHandle1)
dev_display (ImageZoom)

结果同方法1
3.方法三
利用仿射变换矩阵实现图像的缩放
affine_trans_image(Image : ImageAffinTrans : HomMat2D, Interpolation, AdaptImageSize : )

dev_close_window ()read_image(Image,'monkey')hom_mat2d_identity (HomMat2DIdentity)* hom_mat2d_rotate (HomMat2DIdentity, rad(45), 0, 0, HomMat2DRotate)hom_mat2d_scale (HomMat2DIdentity, 0.5, 0.5, 0, 0, HomMat2DScale)affine_trans_image (Image, ImageAffinTrans, HomMat2DScale, 'nearest_neighbor', 'true')* affine_trans_region (RegionOpening, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)dev_display (Image)dev_open_window_fit_image (ImageAffinTrans, 0, 0, -1, -1, WindowHandle1)dev_display (ImageAffinTrans)

结果同方法1
同时,该算子与算子hom_mat2d_rotatehom_mat2d_scale 结合使用,实现图像的缩放、平移、旋转等操作。
4.区域的缩放
1)利用仿射变换实现区域的缩放、平移、旋转等
affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )

dev_update_window ('off')dev_update_var ('off')dev_update_time ('off')dev_update_pc ('off')dev_set_color ('red')read_image (Image, 'forest_road')threshold (Image, Region, 160, 255)opening_circle (Region, RegionOpening, 9.5)hom_mat2d_identity (HomMat2DIdentity)Scale := 1for Phi := 0 to 360 by 1    hom_mat2d_rotate (HomMat2DIdentity, rad(Phi), 256, 256, HomMat2DRotate)    hom_mat2d_scale (HomMat2DRotate, Scale, Scale, 256, 256, HomMat2DScale)    affine_trans_image (Image, ImageAffinTrans, HomMat2DScale, 'nearest_neighbor', 'false')    affine_trans_region (RegionOpening, RegionAffineTrans, HomMat2DScale, 'nearest_neighbor')    dev_display (ImageAffinTrans)    dev_display (RegionAffineTrans)    Scale := Scale / 1.005endfordev_update_pc ('on')dev_update_time ('on')dev_update_var ('on')dev_update_window ('on')

2)根据缩放因子对区域缩放
zoom_region(Region : RegionZoom : ScaleWidth, ScaleHeight : )

dev_close_window ()dev_open_window (0, 0, 512, 512, 'white', WindowID)dev_set_color ('black') * Draw with the mouse an arbitrary (small) region into the windowdraw_region (Region, WindowID)zoom_region (Region, RegionZoom, 2, 2)dev_clear_window ()dev_set_draw ('margin')dev_set_color ('red')dev_display (Region)dev_set_color ('green')dev_display (RegionZoom)

5.参考
* Halcon官方帮助文档

(0)

相关推荐