日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

halcon知识:差分模板variation_model

發(fā)布時(shí)間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 halcon知识:差分模板variation_model 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、差分模板

????????這個(gè)示例程序展示了如何使用 HALCON 的變分模型算子執(zhí)行典型的打印質(zhì)量檢查。程序檢測(cè)在筆夾上的不正確打印。該程序類似于程序 print_check.hdev。主要區(qū)別是每個(gè)字符都是單獨(dú)檢查的。

????????差分未必是特別好的策略,因?yàn)樗粰z測(cè)筆夾本身的錯(cuò)誤以及由于 V 相對(duì)移動(dòng)而導(dǎo)致的錯(cuò)誤到其他字符。然而,在某些應(yīng)用中,正是這個(gè)不變性很有用。這個(gè)程序可以用作這樣的基礎(chǔ)應(yīng)用程序。

????????檢查步驟:第一步,每個(gè)字符的變異模型是由正確打印的圖像構(gòu)成。由于物體的位置可以不同,不同角色的圖像必須轉(zhuǎn)換為參考position(角色在變體模型中的位置)。的位置模型中的字符是通過選擇第一張圖像的一部分給出的從第一張圖像到字符和字符周圍的緩沖區(qū)。

仿射變換operator affine_trans_image_size 用于有效地執(zhí)行此任務(wù)。

????????HALCON 的基于形狀的匹配用于檢測(cè)每個(gè)人的位姿一次調(diào)用 find_shape_models 時(shí)圖像中的字符。發(fā)現(xiàn)的姿勢(shì)用于將不同角色的圖像轉(zhuǎn)換為他們的各自的參考位置。

????????在程序的第二部分,打印對(duì)正確剪輯和幾個(gè)不正確剪輯進(jìn)行檢查和分類。

二、基于變化模型匹配原理

????????Variation Model 的主要原理是將待檢測(cè)的圖像與一張標(biāo)準(zhǔn)圖像作比較,找出待檢測(cè)圖像與標(biāo)準(zhǔn)圖像 (idealimage)的明顯差異(也就是不良)。標(biāo)準(zhǔn)圖像可以采用幾張OK品的圖像訓(xùn)練(training)得到 ,也可以通過對(duì)一張OK品圖像進(jìn)行處理得到。

????????訓(xùn)練后得到標(biāo)準(zhǔn)圖像和一張variation圖像(variationimage),variation圖像中包含了圖像中每個(gè)像素點(diǎn)灰度值允許變化的范圍。標(biāo)準(zhǔn)圖像和variation圖像用來創(chuàng)建一個(gè)variationmodel ,如此,其他圖像就可以與variationmodel作比較了。

?三、算法步驟

應(yīng)用場(chǎng)合:搜索對(duì)象有輕微的變形。

1.創(chuàng)建模板:create_variation_model()

2.準(zhǔn)備和訓(xùn)練模型:

????????prepare_variation_model()

????????train_variation_model()

3.比較模板:compare_variation_model()

4.釋放模板: clear_variation_model()


四、算子解釋


4.1 算子:create_variation_model( : : Width, Height, Type, Mode : ModelID)


輸入?yún)?shù):width、Height是模板和待檢測(cè)圖像的尺寸。
輸入?yún)?shù):Type,是圖像的類型。
輸入?yún)?shù):Model,決定如何計(jì)算idealimage和variationimage,其有三種模式

  • 1、standard,該模式下,可以使用算子train_variation_model對(duì)多張圖片進(jìn)行迭代訓(xùn)練,此時(shí)ideal image是通過計(jì)算多張圖片的平均值獲得,variation image是通過計(jì)算多張圖片的標(biāo)準(zhǔn)方差獲得。該模式的優(yōu)點(diǎn)是可以迭代計(jì)算多張good image,缺點(diǎn)是在訓(xùn)練圖片時(shí),一旦有不良的圖片混入會(huì)導(dǎo)致算法檢測(cè)時(shí)出現(xiàn)誤判。

注意:在訓(xùn)練多張圖片時(shí),每張圖片的位置、角度都必須一致,可使用基于形狀匹配來進(jìn)行定位處理,然后在進(jìn)行訓(xùn)練train_variation_model,

  • 2、'robust',如果在訓(xùn)練多張圖片時(shí),無法避免訓(xùn)練的圖片中出現(xiàn)曉得下次,可以使用該模式。此時(shí),ideal image時(shí)通過計(jì)算多張圖片的中值獲得,variation image也是通過計(jì)算多張圖片中值獲得。該模式的優(yōu)點(diǎn)是魯棒性更強(qiáng),缺點(diǎn)是無法進(jìn)行迭代預(yù)算。

注意:訓(xùn)練多張張圖片時(shí),每張圖片的位置、角度必須一致,然后使用concat_obj將圖片組合起來,在使用train_variation_model進(jìn)行訓(xùn)練。
以上兩種模式下,訓(xùn)練完圖片后只能使用prepare_variation_model算子準(zhǔn)備用于圖像比較的模板。

  • 3、 'direct',該模式下,可以使用一張圖片訓(xùn)練,并不需要使用train_variation_model訓(xùn)練模板,但只能使用prepare_direct_variation_model準(zhǔn)備模板,并且prepare_direct_variation_model中的RefImage,就是模板圖像,而 VarImage必須通過其他邊緣算子生成如,sobel_amp,edges_image, or gray_range_rect.,或者自己制造一個(gè)邊緣(見Halcon12例程variation_model_single)

4.2 算子:prepare_variation_model( : : ModelID, AbsThreshold, VarThreshold : )
prepare_direct_variation_model(RefImage, VarImage : : ModelID, AbsThreshold, VarThreshold : )


這兩個(gè)算子的作用是準(zhǔn)備用于比較圖片的模板,其不同在上文已說明。
輸入?yún)?shù):ModelID,訓(xùn)練或生成的模板。
輸入?yún)?shù): AbsThreshold,絕對(duì)閾值。
輸入?yún)?shù): VarThreshold 相對(duì)閾值。
AbsThreshold, VarThreshold 可以分別有一個(gè)值,也可以分別有兩個(gè)值。當(dāng)都只有一個(gè)值的時(shí)候,亮暗缺陷都是其決定的。
i(x,y)表示ideal image灰度值,v(x,y)表示variation image灰度值,c(x,y)表示待檢測(cè)圖片的灰度值,a=AbsThreshold,b=VarThreshold
當(dāng)c(x,y)>i(x,y)+ max{a,b*v(x,y)}為亮缺陷。
當(dāng)c(x,y)<i(x,y)- max{a,b*v(x,y)}為暗缺陷。
當(dāng)AbsThreshold,VarThreshold有兩個(gè)值時(shí),第一個(gè)值決定亮缺陷,第二個(gè)值決定按缺陷。
i(x,y)表示ideal image灰度值,v(x,y)表示variation image灰度值,c(x,y)表示待檢測(cè)圖片的灰度值,AbsThreshold=[a1,a2],VarThreshold =[b1,b2]
當(dāng)c(x,y)>i(x,y)+ max{a1,b1*v(x,y)}為亮缺陷。
當(dāng)c(x,y)<i(x,y)- max{a2,b2*v(x,y)}為暗缺陷。

4.3 算子?train_variation_model(Images : : ModelID : )

該算子輸入一堆好圖像和模板句柄。導(dǎo)致模板內(nèi)參數(shù)有變化:生成標(biāo)準(zhǔn)圖+差分圖。

4.4 算子:compare_variation_model(Image : Region : ModelID : )


輸入?yún)?shù):Image,該圖像為待檢測(cè)圖像,需要注意的是,該圖像也必須與模板圖像對(duì)齊。
輸出參數(shù):Region,檢測(cè)出來的區(qū)域。
輸入?yún)?shù):ModelID,準(zhǔn)備好的模板ID。


4.5 算子: compare_ext_variation_model(Image : Region : ModelID, Mode : )


該算子是算子compare_variation_model的拓展,其參數(shù) MODE可以控制輸出暗或亮缺陷或者都輸出。

五、參考代碼

dev_update_off () read_image (Image, 'pen/pen-01') get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, 'black', WindowHandle) set_display_font (WindowHandle, 16, 'mono', 'true', 'false') dev_set_color ('red') dev_display (Image) * Note: the shape model will be constructed from a ROI that is computed * automatically based on a simple image segmentation. threshold (Image, Region, 100, 255) fill_up (Region, RegionFillUp) difference (RegionFillUp, Region, RegionDifference) shape_trans (RegionDifference, RegionTrans, 'convex') dilation_circle (RegionTrans, RegionDilation, 8.5) reduce_domain (Image, RegionDilation, ImageReduced) inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 20) gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter') area_center (RegionDilation, Area, RowRef, ColumnRef) create_shape_model (ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID) create_variation_model (Width, Height, 'byte', 'standard', VariationModelID) for I := 1 to 15 by 1read_image (Image, 'pen/pen-' + I$'02d')find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)if (|Score| == 1)vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')train_variation_model (ImageTrans, VariationModelID)dev_display (ImageTrans)dev_display (Model)endif endfor get_variation_model (MeanImage, VarImage, VariationModelID) prepare_variation_model (VariationModelID, 20, 3) * We can now free the training data to save some memory. clear_train_data_variation_model (VariationModelID) * Note: the checking of the print will be restricted to the region of the clip. * Sometimes the print is also in an incorrect position of the clip. This will lead * to erroneous regions at the top or bottom border of the clip and hence can * be detected easily. erosion_rectangle1 (RegionFillUp, RegionROI, 1, 15) dev_display (MeanImage) set_tposition (WindowHandle, 20, 20) dev_set_color ('green') write_string (WindowHandle, 'Reference image') disp_continue_message (WindowHandle, 'black', 'true') stop () dev_display (VarImage) set_tposition (WindowHandle, 20, 20) dev_set_color ('green') write_string (WindowHandle, 'Variation image') disp_continue_message (WindowHandle, 'black', 'true') stop () dev_set_draw ('margin') NumImages := 30 for I := 1 to 30 by 1read_image (Image, 'pen/pen-' + I$'02d')find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)if (|Score| == 1)vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')reduce_domain (ImageTrans, RegionROI, ImageReduced)compare_variation_model (ImageReduced, RegionDiff, VariationModelID)connection (RegionDiff, ConnectedRegions)select_shape (ConnectedRegions, RegionsError, 'area', 'and', 20, 1000000)count_obj (RegionsError, NumError)dev_clear_window ()dev_display (ImageTrans)dev_set_color ('red')dev_display (RegionsError)set_tposition (WindowHandle, 20, 20)if (NumError == 0)dev_set_color ('green')write_string (WindowHandle, 'Clip OK')elsedev_set_color ('red')write_string (WindowHandle, 'Clip not OK')endifendifif (I < NumImages)disp_continue_message (WindowHandle, 'black', 'true')stop ()endif endfor clear_shape_model (ShapeModelID) clear_variation_model (VariationModelID)

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的halcon知识:差分模板variation_model的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。