基于匹配模板的術語自動翻譯方法 halcon學習_模板匹配
日期:2023-03-11 12:39:36 / 人氣: 1018 / 發(fā)布者:成都翻譯公司
模板匹配中有基于點、基于灰度值、基于描述符、基于相關性、基于形狀、基于組件的方法?;谙嚓P性的模板匹配在創(chuàng)建模板時,會將模板角度轉為0°;基于相關性的模板匹配ps:使用基于互相關的時候,要使用灰度圖像!基于灰度值的模板匹配基于形狀的模板匹配ps:創(chuàng)建函數(shù)第二個參數(shù)金字塔層數(shù)不要寫1,不然識別起起來困難(而且應該離焦狀態(tài)就找不到了)ps:學會靈活運用halcon自帶例子,把它當字典用。模板匹配有基于點、基于灰度值、基于描述符、基于相關性、基于形狀和基于組件的方法。
一般流程:裁剪→創(chuàng)建模板→查找對象→仿射變換→顯示
基于相關性的模板匹配會在創(chuàng)建模板時將模板角度轉換為0°;
創(chuàng)建模板時,基于形狀的模板匹配會將模板角度轉為0°基于匹配模板的術語自動翻譯方法,并將坐標移動到圖像的左上角(0,0))。
基于相關性的模板匹配
1、 演示-模板匹配(基于相關性)-find_ncc_model_exposure
2、 Correlation適用于光照不均和明暗變化的場合(優(yōu)點),但背景不宜太復雜(缺點)。
當照度變化很大時,使用良好的相關性,不要使用基于灰度的。
3、 可以通過調整參數(shù)來改變匹配效果。并且金字塔層數(shù)越??多,搜索速度越快;反之,搜索速度越慢。
4、 相關值越接近1,越相關。
5、 實現(xiàn)模板匹配有兩種方式:①助手②代碼
6、 集合助手-創(chuàng)建參數(shù)→ 相對于create_ncc_model
…////Collection Assistant-Application → 相對于 find_ncc_model
ps:*大匹配數(shù)為0,表示查找所有匹配
7、 創(chuàng)建模板的方式可以是手繪,也可以是blob分析,然后就得拉出來了。減少域()
8、 助手方法,在圖片中找到飛機(注意我用的圖片,不是視頻)
步:
先看一張圖片-打開配對助手
創(chuàng)建tab-template資源:圖像窗口(或使用文件或采集助手)-繪制ROI區(qū)域-基于互相關選擇
應用選項卡-圖片文件-加載-選擇加載圖片的名稱-(勾選總是查找)-調整*低分
代碼生成-插入代碼
ps:我是來先插入圖片的。如果使用攝像頭,可以直接在抓圖和應用的地方使用抓圖助手。
ps:使用基于互相關,顯示時為框架,如果基于形狀,則顯示為輪廓
ps:使用互相關時,使用灰度圖像?。?!
9、 代碼方法,找到圖中的平面
步:
看圖→繪制ROI區(qū)域→area_center區(qū)域信息→裁剪ROI區(qū)域
創(chuàng)建ncc模板→找到ncc模板→仿射變換→顯示
ps:基于歸一化互相關(NCC)比較兩幅圖像的相似度是一種常見的圖像處理方法。NCC算法可以有效降低光照對圖像比對結果的影響。
ps:學會靈活使用復制粘貼
read_image (Image, 'C:/Users/yuan/Desktop/7.tif')
gen_rectangle2 (ROI_0, 415.916, 176.48, rad(-40.041), 19.9162, 16.9716)
area_center (ROI_0, Area, RowRef, ColumnRef)
reduce_domain (Image, ROI_0, ImageReduced)
dev_display (Image)
dev_set_draw ('margin')
create_ncc_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'use_polarity', ModelID)
find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'true', 0, Row, Column, Angle, Score)
vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, Angle, HomMat2D)
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
dev_display (Image)
dev_display (RegionAffineTrans)
ps:仿射變換函數(shù)剛開始是這樣打的
vector_angle_to_rigid (RowRef, ColumnRef, rad(-40.041), Row, Column, angle, HomMat2D)
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D,'nearest_neighbor')
這時候就說明模板匹配找到的區(qū)域不是有角度的,不是水平的。
這是因為在創(chuàng)建ncc模板的時候,ROI_0的角度自動轉為0°,所以仿射變換的起始角度應該變成0。記住這種情況在獲取仿射矩陣的時候,起始角度是直接只需填寫0°,并為改變的角度寫下角度。
vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, 角度, HomMat2D)
ps:另外需要注意的就是創(chuàng)建和查找ncc模板的功能,第一次打出來的時候
create_ncc_model (ImageReduced,'auto', 0, 0,'auto','use_polarity', ModelID)
find_ncc_model (Image, ModelID, 0, 0, 0.5, 1, 0.5,'true', 0, Row, Column, Angle, Score)
三、的四個位置是搜索的起始角度和結束角度,這里改成rad(0和rad(360),像這樣。
find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5,'true', 0, Row, Column, Angle , 分數(shù))
vector_angle_to_rigid (RowRef, ColumnRef, 0, Row, Column, Angle, HomMat2D)
ps:由于仿射變換,查找ncc目標的函數(shù)第6個位置只能填1(匹配一個),否則會因為格式報錯。
10、 一次代碼匹配多架飛機
read_image (Image, 'C:/Users/yuan/Desktop/7.tif')
gen_rectangle2 (ROI_0, 415.916, 176.48, rad(-40.041), 19.9162, 16.9716)
area_center (ROI_0, Area, RowRef, ColumnRef)
reduce_domain (Image, ROI_0, ImageReduced)
dev_display (Image)
dev_set_draw ('margin')
create_ncc_model (ImageReduced, 'auto', rad(0), rad(360), 'auto', 'use_polarity', ModelID)
find_ncc_model (Image, ModelID, rad(0), rad(360), 0.5, 3, 0.5, 'true', 0, Row, Column, Angle, Score)
if(|Score|>0)
for Index := 1 to 3 by 1
vector_angle_to_rigid (RowRef, ColumnRef, 0, Row[Index-1], Column[Index-1], Angle[Index-1], HomMat2D)
affine_trans_region (ROI_0, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
dev_display (Image)
dev_display (RegionAffineTrans)
endfor
endif
ps:匹配了3個平面,所以行、列等值都是3個數(shù)字。
ps:|score|的值 是向量的維度!不是絕對值!
基于灰度值的模板匹配
1、 基于灰度值的目標匹配使用Mean Absolute Differences (MAD)
2、 rad() 函數(shù)將角度轉換為弧度基于匹配模板的術語自動翻譯方法,deg() 函數(shù)將弧度轉換為角度。
3、 disp_arrow() 函數(shù)用于顯示箭頭。注意disp顯示只是一個顯示,在變量窗口是看不到數(shù)值的。
4、 rot 表示旋轉搜索,mg 表示金字塔搜索。
best_match(), best_match_rot(), best_match_mg(), best_match_rot_mg()
fast_match(), fast_match_rot(), fast_match_mg(), fast_match_rot_mg()
基于形狀的模板匹配
教程的前幾課都是關于demo的,我們先來看看demo。
1、 對光線要求高,不適合室外自然光
2、基于形狀的模板匹配創(chuàng)建模板時,ROI的位置自動移動到像素點(0,0)位置,角度旋轉到0°。
3、 創(chuàng)建:
create_shape_model(), create_shape_model_xld(), create_scale_shape_model() / *后這個函數(shù)帶有縮放功能
ps:如果用get_shape_model()創(chuàng)建模板,得到的是xld的輪廓,用于仿射變換函數(shù)中,顯示的圖形為輪廓。affine_trans_contour_xld() 使用這種仿射變換來顯示輪廓。也可以不顯示輪廓而想顯示繪制的矩形框,那么affine_trans_region()函數(shù),仿射變換之前繪制的roi區(qū)域,注意roi的行列角要填充在仿射前面矩形,而不是 (0,0,0).
ps:創(chuàng)建函數(shù)的第二個參數(shù)金字塔層不要寫1,否則會很難識別(而且應該是失焦,找不到)
4、 查找:
find_shape_model(), find_scale_shape_model(), find_shape_models() / *后這個函數(shù)找到多個模板
5、 仿射變換:
平移和旋轉:vector_angle_to_rigid()
比例:hom_mat2d_scale()
6、 顯示:
dev_disp(圖片)
dev_disp(RegionAffineTrans)
7、 詳細了解demo,學習應用到實戰(zhàn)項目中
ps:輪廓n。形狀、輪廓
8、 演示模板匹配(形狀)-align_measurements()
9、 演示模板匹配(形狀)-create_average_shape_model():
①channels_to_image(Templates,MultichannelImage)
將多張圖片變成多通道圖片
②mean_n(MultichannelImage,ImageMean)
平均變成通道(然后用平均圖像作為模板進行創(chuàng)建)
10、 演示-模板匹配(形狀)-align_measurements()
write_shape_model(ModelID,'green-dot.shm')
將模板保存在 .shm 文件中,以備將來直接使用
檢查形狀模型()
檢查模型輪廓
11、 演示-模板匹配(形狀)-create_roi_via_vision()
dev_set_part(左上x,左上y,右下x,右下y)
這之后顯示的圖片都顯示了劃定的區(qū)域
12、 演示-模板匹配(形狀)-create_shape_model_xld()
binary_threshold() //快速二值化
13、 演示-模板匹配(形狀)-inspect_shampoo_label()
添加頻道()
向區(qū)域添加灰度值
14、 演示-模板匹配(形狀)-matching_coins()
前一個循環(huán)是創(chuàng)建模板,后一個循環(huán)是查找和顯示
15、 演示-模板匹配(形狀)-reuse_model()
write_shape_model()
存儲為.sbm文件(上面是.shm文件,幫助也是shm文件,看不懂,但是這個例子中使用了.sbm文件,我試了一下,可以用),您可以保存創(chuàng)建的模型。
16、 demo-模板匹配(形狀)-synthetic_circle
如果set_shape_model_para()函數(shù)中的第二個參數(shù)GenParamName是'timeout',這個函數(shù)的作用就是在時間過去后停止搜索。
油漆_xld(), 油漆區(qū)域()
從輪廓到圖像,從區(qū)域到圖像
17、 demo-模板匹配(形狀)-pm_measure_board
我講了(電路板芯片)定位+測量。通過定位電路板芯片的中心位置和角度,可以定位兩排引腳,用兩個矩形框來選擇。
ps:對于膨脹腐蝕,二值圖是面積的增減,灰度圖是灰度值(亮度)的增減。
18、 demo-模板匹配(形狀)-pm_multiple_models
以后做更多模板完全可以復制粘貼這個例子
inspect_shape_model() 用于檢查模型的輪廓。如果您不滿意,可以在創(chuàng)建后進行修改。使用特征直方圖進行過濾。請注意,選擇該功能時應將 xld 放在前面。
create_shape_model (Image, 5, rad(0), rad(360), 'auto', 'pregeneration', 'use_polarity', 30, 10, ModelID)
get_shape_model_contours (ModelCont, ModelID, 1)
select_shape_xld (ModelCont, ModelContours, 'contlength', 'and', 20, 1000)
下面的代碼是為了方便直接建模,不用修改,然后進行仿射變換然后顯示。
count_obj (ModelContours, NumModel)
count_obj (Models, NumModels)
concat_obj (Models, ModelContours, Models)
IndexS := [IndexS,NumModels + 1]
IndexE := [IndexE,NumModels + NumModel]
ModelIDs := [ModelIDs,ModelID]
用這張圖更容易理解這段代碼。(個人使用)
19、 演示-模板匹配(形狀)-multiple_dxf_model
識別部分和前面的例子一樣,區(qū)別在上半部分。
read_contours_xld_dxf() //這個demo的重點
本demo讀取dxf文件,將輪廓轉換為圖像,然后創(chuàng)建輪廓
20、實戰(zhàn)(實時查找瓶蓋上的文字):
(基本上,寫重要幾乎很簡單)
①:助手模式:
檢測選項卡-需要點擊執(zhí)行,結果會顯示到檢測選項卡
②:編碼方式:
裁剪(手繪或blob方法)→創(chuàng)建模板→查找識別→仿射變換→顯示
在搜索函數(shù)的下一行添加一個if(|Score|> 1),防止找不到frame時出錯
ps:取消勾選運行模式。連續(xù)運行時,創(chuàng)建模板時左上角顯示的輪廓會消失。
ps:學會靈活使用halcon自己的例子,當成字典來使用。
相關閱讀Relate
熱門文章 Recent
- 西班牙簽證住所證明附模板翻譯 申根簽證辦理須知及流程2023-03-11
- 英語作文書面通知的模板翻譯 通知高中英語作文范文2023-03-11
- 疫苗本翻譯模板 【大匯分享】臨床試驗方案模板2023-03-11
- 高等學校畢業(yè)證翻譯件模板-畢業(yè)證書、學位證書翻譯件樣本2023-03-11
- 工資專項集體合同翻譯模板 企業(yè)工資專項集體合同范本2023-03-11
- 工行簽證翻譯流水模板 新西蘭簽證詳解2023-03-11
- 英國簽證銀行卡流水翻譯模板 辦理法國商務簽證都需要哪些材料?2023-03-11
- 加拿大訪學簽證戶口翻譯模板 申請加拿大留學簽證要了解的事項2023-03-11
- 立項書模板的翻譯 項目立項申請書范文2023-03-11
- 中國銀行工資單簽證翻譯模板 需要提供如下資料!2023-03-11