当前位置:网站首页>Shape template matching based on Halcon learning [v] find_ cocoa_ packages_ max_ deformation. Hdev routine
Shape template matching based on Halcon learning [v] find_ cocoa_ packages_ max_ deformation. Hdev routine
2022-07-05 07:55:00 【BoomBiuBiu】
* This sample program demonstrates how to use shape based matching to find slightly deformed objects , Using parameter “ Maximum deformation ”;
* Please note that , To find deformed objects , Shape based matching can be applied using parameters “ Maximum deformation ” or - Apply locally deformable matching ;
* In this case , The task is to use shape based matching and parameters “ Maximum deformation ”. You can compare it with the example “ Find a deformable cocoa bag ”, Which uses local deformation matching to solve the same task . Shape based matching is significantly faster , But local deformable matching is more robust to different types of images
dev_update_off ()
* Read images
read_image (ModelImage, 'food/cocoa_package_model')
* close window
dev_close_window ()
* Open window adaptive image
dev_open_window_fit_image (ModelImage, 0, 0, -1, -1, WindowHandle)
* Set display font
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
First step : Create a template
* Create and display shape models
create_shape_model (ModelImage, 'auto', rad(-20), rad(40), 'auto', 'auto', 'use_polarity', [40,60,'auto_min_size'], 10, ModelID)
* Get the outline of the template
* notes : The position of the template will return to the origin
get_shape_model_contours (ModelContours, ModelID, 1)
* Get the row and column coordinates of the region
area_center (ModelImage, Area, Row, Column)
* Affine transformation
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_translate (HomMat2DIdentity, Row, Column, HomMat2DTranslate)
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DTranslate)
* Set a series of parameters
dev_set_line_width (2)
dev_set_color ('yellow')
dev_display (ModelImage)
dev_display (ContoursAffineTrans)
disp_message (WindowHandle, 'Model image and contours', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
2、 Start template matching
* The picture has 13 Zhang
NumImages := 13
* To begin for loop
for Index := 1 to NumImages by 1
* Read the picture
read_image (Image, 'food/cocoa_packages_' + Index$'02')
* Reduce image resolution to improve speed
dev_resize_window_fit_image (Image, 0, 0, -1, -1)
* display picture
dev_display (Image)
disp_message (WindowHandle, 'Search...', 'window', 12, 12, 'black', 'true')
* Time before looking for template
count_seconds (S1)
* Find the deformation model in the search image
* And display the results
* Start looking for templates
find_shape_model (Image, ModelID, rad(-20), rad(40), 0.6, 0, 0.5, ['least_squares','max_deformation 16'], 0, 0.4, Row, Column, Angle, Score)
* Time after finding the template
count_seconds (S2)
Time := (S2 - S1) * 1000
* Set the color
dev_set_color ('green')
* Display the matching results
dev_display_shape_matching_results (ModelID, 'green', Row, Column, Angle, 1, 1, ModelID)
disp_message (WindowHandle, |Score| + ' matches found in ' + Time$'3.1f' + ' ms', 'window', 12, 12, 'black', 'true')
* Show the results below the picture
disp_message (WindowHandle, 'Score: ' + Score$'.2f', 'image', 350, Column - 80, 'black', 'true')
* If the index is smaller than the number of pictures , Continued to
if (Index < NumImages)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
3、 Clear template
clear_shape_model (ModelID)
notes : Here's how to find template parameters
* Start looking for templates
find_shape_model (Image, ModelID, rad(-20), rad(40), 0.6, 0, 0.5, ['least_squares','max_deformation 16'], 0, 0.4, Row, Column, Angle, Score)
1、 In some applications , The accuracy requirement is very high . In these cases , The attitude of the model can be determined by least square adjustment . And “interpolation” contrary , This mode requires additional computation time . Different least squares methods can be used to adjust the mode ('least_squares','least_squares_high' and 'least_squares_very_high') To determine the accuracy of the minimum distance being searched . However , The higher the selection accuracy , The longer the sub-pixel extraction will take . Usually ,SubPixel Should be set to “interpolation”. If the least square adjustment is needed , You should choose “least_squares”, Because of this Will result in the best trade-off between runtime and accuracy .
2、 An object that is slightly deformed relative to the model , In some cases , Cannot be found or even if found , Accuracy is also very low . For such objects , It can be in the parameter SubPixel Maximum allowable object deformation for medium and extra frontal delivery . Deformation must be specified in pixels . This can be done by passing optional parameter values “max_deformation”, Followed by a 0 To 32 The integer value between ( In the same string ), This value specifies the maximum deformation . for example , If the shape of the object can deform as much as... Relative to the shape stored in the model 2 Pixel , Must be in SubPixel Pass values in “max_deformation 2”. Transfer value “max_deformation 0” when , When searching, the object must not be deformed , And not set “max_deformation” It does the same thing .
3、 Please note that , When the maximum deformation value is set high, it usually leads to an increase in running time . Besides , Select the higher the deformation value , The higher the risk of discovering instances of the wrong model . These two problems mainly appear when searching for small objects or objects with fine structures . This is because this kind of object will lose its characteristic shape when it is highly deformed , And feature shape is very important for powerful search . Also pay attention to , For higher deformations , If there is clutter near the object , The accuracy of partially occluded objects may be reduced . therefore , The maximum deformation should be as small as possible , Set it higher only when necessary .
边栏推荐
- Query the table name used by kettle in Oracle
- Network communication process
- Random function usage notes
- Significance and requirements of semiconductor particle control
- Explain STM32 startup file in detail
- IEEE access personal contribution experience record
- Gradle composite construction
- MySql——存储引擎
- Altium designer learning (I)
- Embedded composition and route
猜你喜欢
MySQL blind note common functions
Altium Designer 19.1.18 - 导入板框
About the problem that MySQL connector net cannot be cleared in MySQL
C#,数值计算(Numerical Recipes in C#),线性代数方程的求解,LU分解(LU Decomposition)源程序
Altium designer 19.1.18 - hide the fly line of a network
Shell脚本基本语法
Interview catalogue
P3D gauge size problem
找不到实时聊天软件?给你推荐电商企业都在用的!
UEFI development learning 6 - creation of protocol
随机推荐
STM32 knowledge points
Threads and processes
Interview catalogue
Day01 markdown log entry tips
Use of orbbec Astra depth camera of OBI Zhongguang in ROS melody
Beijing Winter Olympics opening ceremony display equipment record 3
C language uses arrays to realize the intersection, union, difference and complement of sets
Function and usage of function pointer
MLPerf Training v2.0 榜单发布,在同等GPU配置下百度飞桨性能世界第一
Cadence simulation encountered "input.scs": can not open input file change path problem
Define in and define out
MySQL - storage engine
Extended application of single chip microcomputer-06 independent key
[professional literacy] specific direction of analog integrated circuits
P3D gauge size problem
IEEE access personal contribution experience record
MySQL blind note common functions
·Practical website·
Record the opening ceremony of Beijing Winter Olympics with display equipment
MySql——存储引擎