* 這個示例程序展示了如何使用HALCON的3D基于形狀的匹配
* 來找到瓷磚間隔片的3D姿態* 由于背景紋理較強,在create_shape_model_3d()中使用'ignore_part_polarity'度量
* 以加快搜索速度。為了展示速度提升,創建了兩個3D形狀模型:
* 一個使用'ignore_local_polarity'度量,另一個使用'ignore_part_polarity'度量* 然后,為每個找到的對象顯示輪廓并比較搜索時間* 本示例還使用了'lowest_model_level'選項,這在示例程序
*3d_matching_lowest_model_level.hdev中有更詳細的解釋* 關閉顯示更新
dev_update_off()* 獲取并設置異常處理偏好(抑制已處理異常的對話框)dev_get_preferences('suppress_handled_exceptions_dlg', SuppressHandledExceptionsDlg)dev_set_preferences('suppress_handled_exceptions_dlg','true')* 設置相機參數(可以通過相機標定獲得)gen_cam_par_area_scan_division(0.0269462,-354.842,1.27964e-005,1.28e-005,254.24,201.977,512,384, CamParam)* 從相機參數中獲取圖像寬度和高度
get_cam_par_data(CamParam,'image_width', IWidth)get_cam_par_data(CamParam,'image_height', IHeight)* 關閉并重新打開顯示窗口
dev_close_window()dev_open_window(0,0,512*1.5,384*1.5,'black', WindowHandle)* 設置顯示字體
set_display_font(WindowHandle,14,'mono','true','false')* 設置線寬為2dev_set_line_width(2)* 定義顏色數組
Colors :=['blue','forest green','black']* 獲取用于搜索的兩個形狀模型
acquire_shape_models(WindowHandle, CamParam, ShapeModel3DID1, ShapeModel3DID2)* 顯示繼續消息并暫停
disp_continue_message(WindowHandle,'black','true')stop()* 設置匹配參數
MatchingParameters :=['num_matches','pose_refinement']
MatchingParameterValues :=[2,'least_squares_high']
MinScore :=0.65
Greediness :=0.9
NumLevels :=0* 匹配循環
NumImages :=9for I :=1 to NumImages by 1* 讀取圖像read_image(Image,'tile_spacers/tile_spacers_'+ I$'02')* 顯示圖像(使用藍色)dev_set_color(Colors[0])dev_display(Image)* 使用'ignore_local_polarity'度量的模型1查找最多兩個實例Message :='Search model with \'ignore_local_polarity\' ...'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 記錄開始時間count_seconds(Seconds1)* 執行3D形狀匹配find_shape_model_3d(Image, ShapeModel3DID1, MinScore, Greediness, NumLevels, MatchingParameters, MatchingParameterValues, Pose, CovPose, Score1)* 記錄結束時間count_seconds(Seconds2)Time1 := Seconds2 - Seconds1* 通過投影3D形狀模型來可視化找到的匹配for J :=0 to |Score1|-1 by 1PoseTmp := Pose[J *7:J *7+6]project_shape_model_3d(ModelContours, ShapeModel3DID1, CamParam, PoseTmp,'true',rad(30))dev_display(ModelContours)endfor* 顯示匹配結果信息Message :='Search model with \'ignore_local_polarity\': '+|Score1|+' Match(es) found in '+ Time1$'.1f'+' s'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 使用'ignore_part_polarity'度量的模型2查找最多兩個實例dev_set_color(Colors[1])Message[1]:='Search model with \'ignore_part_polarity\' ...'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 記錄開始時間count_seconds(Seconds1)* 執行3D形狀匹配find_shape_model_3d(Image, ShapeModel3DID2, MinScore, Greediness, NumLevels, MatchingParameters, MatchingParameterValues, Pose, CovPose, Score2)* 記錄結束時間count_seconds(Seconds2)Time2 := Seconds2 - Seconds1* 通過投影3D形狀模型來可視化找到的匹配(使用虛線樣式)set_line_style(WindowHandle,[10,10])for J :=0 to |Score2|-1 by 1PoseTmp := Pose[J *7:J *7+6]project_shape_model_3d(ModelContours, ShapeModel3DID1, CamParam, PoseTmp,'true',rad(30))dev_display(ModelContours)endforset_line_style(WindowHandle,[])* 顯示匹配結果信息和速度提升因子Message[1]:='Search model with \'ignore_part_polarity\': '+|Score2|+' Match(es) found in '+ Time2$'.1f'+' s'Message[2]:='Speed-up factor with \'ignore_part_polarity\': '+(Time1 / Time2)$'.1f'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 如果不是最后一張圖像,顯示繼續消息并暫停if(I < NumImages)disp_continue_message(WindowHandle,'black','true')stop()endif
endfor* 暫停程序
stop()* 清除3D形狀模型
clear_shape_model_3d(ShapeModel3DID1)clear_shape_model_3d(ShapeModel3DID2)* 恢復異常處理偏好設置
dev_set_preferences('suppress_handled_exceptions_dlg', SuppressHandledExceptionsDlg)* 這個示例程序展示了如何使用HALCON的3D基于形狀的匹配
* 來找到瓷磚間隔片的3D姿態* 由于背景紋理較強,在create_shape_model_3d()中使用'ignore_part_polarity'度量
* 以加快搜索速度。為了展示速度提升,創建了兩個3D形狀模型:
* 一個使用'ignore_local_polarity'度量,另一個使用'ignore_part_polarity'度量* 然后,為每個找到的對象顯示輪廓并比較搜索時間* 本示例還使用了'lowest_model_level'選項,這在示例程序
*3d_matching_lowest_model_level.hdev中有更詳細的解釋* 關閉顯示更新
dev_update_off()* 獲取并設置異常處理偏好(抑制已處理異常的對話框)dev_get_preferences('suppress_handled_exceptions_dlg', SuppressHandledExceptionsDlg)dev_set_preferences('suppress_handled_exceptions_dlg','true')* 設置相機參數(可以通過相機標定獲得)gen_cam_par_area_scan_division(0.0269462,-354.842,1.27964e-005,1.28e-005,254.24,201.977,512,384, CamParam)* 從相機參數中獲取圖像寬度和高度
get_cam_par_data(CamParam,'image_width', IWidth)get_cam_par_data(CamParam,'image_height', IHeight)* 關閉并重新打開顯示窗口
dev_close_window()dev_open_window(0,0,512*1.5,384*1.5,'black', WindowHandle)* 設置顯示字體
set_display_font(WindowHandle,14,'mono','true','false')* 設置線寬為2dev_set_line_width(2)* 定義顏色數組
Colors :=['blue','forest green','black']* 獲取用于搜索的兩個形狀模型
acquire_shape_models(WindowHandle, CamParam, ShapeModel3DID1, ShapeModel3DID2)* 顯示繼續消息并暫停
disp_continue_message(WindowHandle,'black','true')stop()* 設置匹配參數
MatchingParameters :=['num_matches','pose_refinement']
MatchingParameterValues :=[2,'least_squares_high']
MinScore :=0.65
Greediness :=0.9
NumLevels :=0* 匹配循環
NumImages :=9for I :=1 to NumImages by 1* 讀取圖像read_image(Image,'tile_spacers/tile_spacers_'+ I$'02')* 顯示圖像(使用藍色)dev_set_color(Colors[0])dev_display(Image)* 使用'ignore_local_polarity'度量的模型1查找最多兩個實例Message :='Search model with \'ignore_local_polarity\' ...'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 記錄開始時間count_seconds(Seconds1)* 執行3D形狀匹配find_shape_model_3d(Image, ShapeModel3DID1, MinScore, Greediness, NumLevels, MatchingParameters, MatchingParameterValues, Pose, CovPose, Score1)* 記錄結束時間count_seconds(Seconds2)Time1 := Seconds2 - Seconds1* 通過投影3D形狀模型來可視化找到的匹配for J :=0 to |Score1|-1 by 1PoseTmp := Pose[J *7:J *7+6]project_shape_model_3d(ModelContours, ShapeModel3DID1, CamParam, PoseTmp,'true',rad(30))dev_display(ModelContours)endfor* 顯示匹配結果信息Message :='Search model with \'ignore_local_polarity\': '+|Score1|+' Match(es) found in '+ Time1$'.1f'+' s'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 使用'ignore_part_polarity'度量的模型2查找最多兩個實例dev_set_color(Colors[1])Message[1]:='Search model with \'ignore_part_polarity\' ...'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 記錄開始時間count_seconds(Seconds1)* 執行3D形狀匹配find_shape_model_3d(Image, ShapeModel3DID2, MinScore, Greediness, NumLevels, MatchingParameters, MatchingParameterValues, Pose, CovPose, Score2)* 記錄結束時間count_seconds(Seconds2)Time2 := Seconds2 - Seconds1* 通過投影3D形狀模型來可視化找到的匹配(使用虛線樣式)set_line_style(WindowHandle,[10,10])for J :=0 to |Score2|-1 by 1PoseTmp := Pose[J *7:J *7+6]project_shape_model_3d(ModelContours, ShapeModel3DID1, CamParam, PoseTmp,'true',rad(30))dev_display(ModelContours)endforset_line_style(WindowHandle,[])* 顯示匹配結果信息和速度提升因子Message[1]:='Search model with \'ignore_part_polarity\': '+|Score2|+' Match(es) found in '+ Time2$'.1f'+' s'Message[2]:='Speed-up factor with \'ignore_part_polarity\': '+(Time1 / Time2)$'.1f'disp_message(WindowHandle, Message,'window',12,12, Colors,'true')* 如果不是最后一張圖像,顯示繼續消息并暫停if(I < NumImages)disp_continue_message(WindowHandle,'black','true')stop()endif
endfor* 暫停程序
stop()* 清除3D形狀模型
clear_shape_model_3d(ShapeModel3DID1)clear_shape_model_3d(ShapeModel3DID2)* 恢復異常處理偏好設置
dev_set_preferences('suppress_handled_exceptions_dlg', SuppressHandledExceptionsDlg)
'lowest_model_level’參數可減少內存需求
* 本示例展示如何使用HALCON基于形狀的3D匹配技術
* 來定位瓷磚間隔片的3D姿態。由于物體在圖像中較大,
*3D模型需要許多不同視角的內部表示,導致模型內存消耗很高。
* 使用'lowest_model_level'參數可減少內存需求:
*- 默認級別為1,提高級別可減少內存(每級約減少3倍)*- 同時模型創建時間減少2倍/級
*- 代價是匹配魯棒性可能降低,搜索時間略增(5-10%)** 本例設置'lowest_model_level'為3,結果是:
*- 模型內存需求減少6倍
*- 模型創建時間減少4倍* 關閉顯示更新
dev_update_off()* 獲取并設置異常處理偏好(抑制已處理異常的對話框)dev_get_preferences('suppress_handled_exceptions_dlg', SuppressHandledExceptionsDlg)dev_set_preferences('suppress_handled_exceptions_dlg','true')* 設置相機參數(可通過相機標定獲得)gen_cam_par_area_scan_division(0.0269462,-354.842,1.27964e-005,1.28e-005,254.24,201.977,512,384, CamParam)* 獲取圖像尺寸
get_cam_par_data(CamParam,'image_width', IWidth)get_cam_par_data(CamParam,'image_height', IHeight)* 讀取示例圖像并初始化窗口
read_image(Image,'tile_spacers/tile_spacers_color_01')dev_close_window()dev_open_window(0,0,512*1.5,384*1.5,'white', WindowHandle)set_display_font(WindowHandle,16,'mono','true','false')dev_set_line_width(3)* 嘗試從磁盤讀取3D形狀模型
dev_clear_window()disp_message(WindowHandle,'Reading the 3D shape model file from disk ...','window',12,12,'black','false')
tryread_shape_model_3d('tile_spacer.sm3', ShapeModel3DID)catch(Exception)* 如果讀取失敗,則創建新模型* 從DXF文件讀取3D對象模型read_object_model_3d('tile_spacer.dxf',0.0001,[],[], ObjectModel3DID, DXFStatus)prepare_object_model_3d(ObjectModel3DID,'shape_based_matching_3d','true',[],[])disp_message(WindowHandle,'Reading the 3D shape model file from disk ... not found!','window',12,12,'red','false')disp_message(WindowHandle,'Creating the 3D shape model (may take a few seconds) ...','window',42,12,'black','false')* 記錄模型創建時間count_seconds(S1)* 關鍵參數設置:使用'lowest_model_level'=3來優化內存和創建時間create_shape_model_3d(ObjectModel3DID, CamParam,0,0,0,'gba',-rad(60),rad(60),-rad(60),rad(60),0,rad(360),0.26,0.27,10,'lowest_model_level',3, ShapeModel3DID)count_seconds(S2)T := S2 - S1* 清理原始3D對象模型clear_object_model_3d(ObjectModel3DID)* 顯示創建時間disp_message(WindowHandle,'Creation time: '+ T$'.3'+' s','window',72,12,'black','false')* 嘗試保存模型trydisp_message(WindowHandle,'Writing model to disk ...','window',102,12,'black','false')write_shape_model_3d(ShapeModel3DID,'tile_spacer.sm3')catch(Exception)disp_message(WindowHandle,'Writing model to disk ... failed!','window',102,12,'red','false')disp_continue_message(WindowHandle,'black','true')stop()endtry
endtry* 顯示模型級別信息
disp_lowest_model_level_info(WindowHandle)disp_continue_message(WindowHandle,'black','true')stop()* 匹配階段
Times :=[]
NumImages :=12for I :=1 to NumImages by 1read_image(Image,'tile_spacers/tile_spacers_color_'+ I$'02')dev_display(Image)* 查找最多3個實例(設置'border_model'為'true'因為物體可能接觸圖像邊界)count_seconds(Seconds1)find_shape_model_3d(Image, ShapeModel3DID,0.7,0.85,0,['num_matches','max_overlap','border_model'],[3,0.75,'true'], Pose, CovPose, Score)count_seconds(Seconds2)Time := Seconds2 - Seconds1Times :=[Times,Time]* 可視化匹配結果for J :=0 to |Score|-1 by 1* 顯示輪廓PoseTmp := Pose[J *7:J *7+6]project_shape_model_3d(ModelContours, ShapeModel3DID, CamParam, PoseTmp,'true',rad(30))dev_set_color('yellow')dev_display(ModelContours)* 顯示3D坐標系dev_set_colored(3)disp_3d_coord_system(WindowHandle, CamParam, PoseTmp,0.015)endfor* 顯示姿態參數for K :=0 to |Score|-1 by 1PoseTmp := Pose[K *7:K *7+6]display_match_pose(ShapeModel3DID, PoseTmp, WindowHandle)endfor* 顯示匹配結果信息disp_message(WindowHandle,|Score|+' Match(es) found in '+ Time$'4.2f'+' s','window',12,12,'dark green',['white','false'])if(I < NumImages)disp_continue_message(WindowHandle,'black',['white','false'])stop()endif
endfor* 清理資源
clear_shape_model_3d(ShapeModel3DID)dev_set_preferences('suppress_handled_exceptions_dlg', SuppressHandledExceptionsDlg)disp_end_of_program_message(WindowHandle,'black',['white','false'])
1. 請簡述TCP和HTTP的定義與基本概念
TCP:即傳輸控制協議(Transmission Control Protocol),是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它為互聯網中的數據通信提供穩定的傳輸機制,在不可靠的IP層之上&a…