Halcon 图像畸变校正

set_system ('clip_region', 'false')
read_image (Image, 'pioneer')
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'white', WindowHandle)
rgb1_to_gray (Image, GrayImage)
//相机内参,用标定板可以标定得到 gen_cam_par_area_scan_division (0.00219846, -78129.2, 5.46495e-06, 5.5e-06, 318.206, 236.732, 640, 480, CamParOriginal) * extract edges in the original image dev_set_color ('red') edges_sub_pix (GrayImage, Edges, 'lanser2', 0.5, 20, 40) dev_set_color ('green') disp_continue_message (WindowHandle, 'black', 'true') stop () * Eliminating radial distortions from the extracted edges * Change the radial distortion: set kappa to 0 CamParVirtualFixed := CamParOriginal set_cam_par_data (CamParVirtualFixed, 'kappa', 0, CamParVirtualFixed) * Alternatively, the operator change_radial_distortion_cam_par can be used
//根据内参得到畸变映射参数 change_radial_distortion_cam_par ('fixed', CamParOriginal, 0, CamParVirtualFixed) change_radial_distortion_contours_xld (Edges, EdgesRectifiedFixed, CamParOriginal, CamParVirtualFixed) dev_display (GrayImage) dev_display (EdgesRectifiedFixed) disp_continue_message (WindowHandle, 'black', 'true') stop () * Change the radial distortion: mode 'fullsize' change_radial_distortion_cam_par ('fullsize', CamParOriginal, 0, CamParVirtualFullsize) change_radial_distortion_contours_xld (Edges, EdgesRectifiedFullsize, CamParOriginal, CamParVirtualFullsize) dev_display (GrayImage) dev_display (EdgesRectifiedFullsize) disp_continue_message (WindowHandle, 'black', 'true') stop () * Change the radial distortion: mode 'adaptive' change_radial_distortion_cam_par ('adaptive', CamParOriginal, 0, CamParVirtualAdaptive) change_radial_distortion_contours_xld (Edges, EdgesRectifiedAdaptive, CamParOriginal, CamParVirtualAdaptive) dev_display (GrayImage) dev_display (EdgesRectifiedAdaptive) disp_continue_message (WindowHandle, 'black', 'true') stop () * Change the radial distortion: mode 'preserve_resolution' change_radial_distortion_cam_par ('preserve_resolution', CamParOriginal, 0, CamParVirtualPreservedResolution) change_radial_distortion_contours_xld (Edges, EdgesRectifiedPreservedResolution, CamParOriginal, CamParVirtualPreservedResolution) dev_display (GrayImage) dev_display (EdgesRectifiedPreservedResolution) disp_continue_message (WindowHandle, 'black', 'true') stop () * Eliminating radial distortions from the image * Change the radial distortion: set kappa to 0
//得到畸变映射图像 gen_radial_distortion_map (MapFixed, CamParOriginal, CamParVirtualFixed, 'bilinear')
//根据映射图像,校正畸变图像 map_image (GrayImage, MapFixed, ImageRectifiedFixed) disp_continue_message (WindowHandle, 'black', 'true') stop () * In case, only one image has to be rectified, the operator * change_radial_distortion_image can be used instead of the operators * gen_radial_distortion_map together with map_image. get_cam_par_data (CamParVirtualFullsize, 'image_width', WidthVirtualFullsize) get_cam_par_data (CamParVirtualFullsize, 'image_height', HeightVirtualFullsize) gen_rectangle1 (ROI, 0, 0, HeightVirtualFullsize - 1, WidthVirtualFullsize - 1) change_radial_distortion_image (GrayImage, ROI, ImageRectifiedFullsize, CamParOriginal, CamParVirtualFullsize) dev_clear_window () dev_display (ImageRectifiedFullsize) disp_continue_message (WindowHandle, 'black', 'true') stop () get_cam_par_data (CamParVirtualAdaptive, 'image_width', WidthVirtualAdaptive) get_cam_par_data (CamParVirtualAdaptive, 'image_height', HeightVirtualAdaptive) gen_rectangle1 (ROI, 0, 0, HeightVirtualAdaptive - 1, WidthVirtualAdaptive - 1) change_radial_distortion_image (GrayImage, ROI, ImageRectifiedAdaptive, CamParOriginal, CamParVirtualAdaptive) dev_clear_window () dev_display (ImageRectifiedAdaptive) disp_continue_message (WindowHandle, 'black', 'true') stop () get_cam_par_data (CamParVirtualPreservedResolution, 'image_width', WidthVirtualPreservedResolution) get_cam_par_data (CamParVirtualPreservedResolution, 'image_height', HeightVirtualPreservedResolution) gen_rectangle1 (ROI, 0, 0, HeightVirtualPreservedResolution - 1, WidthVirtualPreservedResolution - 1) change_radial_distortion_image (GrayImage, ROI, ImageRectifiedPreservedResolution, CamParOriginal, CamParVirtualPreservedResolution) dev_clear_window () dev_display (ImageRectifiedPreservedResolution)

  图像畸变校正:

             第一步,先用标定板标定得到相机内参

            第二步,根据相机内参得到畸变映射参数

         change_radial_distortion_cam_par('fixed',CamParOriginal,0,CamParVirtualFixed)

         第三步,根据畸变映射参数跟相机内参得到畸变映射图像

        gen_radial_distortion_map(MapFixed,CamParOriginal,CamParVirtualFixed,'bilinear')

        第四步,根据映射图像校正畸变图像

       map_image(GrayImage,MapFixed,ImageRectifiedFiexd)

 

 



               

posted @ 2021-12-15 16:59  zyl2  阅读(2354)  评论(0编辑  收藏  举报