Halcon Stage II's hdev的代码实例

Halcon Stage II's hdev的代码实例
Halcon Stage II's hdev的代码实例

Stage II's hdev的代码实例

================================================================================= * Create_read_find_matching_model_MK-skm.hdev

*

* 读取一个轮廓模型(shape model),使这个模型可放大或缩小地进行寻找匹配。

dev_close_window ()

dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

read_image(Image,'L:/Halcon test/mk3.jpg')

* 选取一张有各种大小,角度,甚至变形的商标的图片做测试

*read_image(Image,'L:/Halcon test/mk5.jpg')

gen_rectangle1 (ROI, 57.8333, 49.5, 181.167, 342.833)

* 画一个矩形选择ROI,矩形在左上角,覆盖一个完整的,无变形规定尺寸的商标,作为模板

reduce_domain(Image,ROI,ImageReduced)

* 大图和这个矩形的ROI相减就会得到一个左上角的商标的图案作为模板,命名ImageReduced

inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 5, 40)

* 创建一个对比的模型,后面两个参数:第一个是层数(NumLevels,如5层),第二个是

create_scaled_shape_model (ImageReduced, 5, rad(-180), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID)

* 创建一个比例不变的匹配的轮廓模型

* create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)

* 01、Template,//reduce_domain后的模板图像

* 02、NumLevels,//金字塔的层数,可设为“auto”或0—10的整数

* 03、AngleStart,//模板旋转的起始角度

* 04、AngleExtent,//模板旋转角度范围, >=0

* 05、AngleStep,//旋转角度的步长,>=0 and <=pi/16

* 06、ScaleMin,//模板最小比例

* 07、ScaleMax,//模板最大比例

* 08、ScaleStep,//模板比例的步长

* 09、Optimization,//设置模板优化和模板创建方法

* 10、Metric, //匹配方法设置

* 11、Contrast,//设置对比度

* 12、MinContrast,//设置最小对比度

* 13、ModelID,//输出模板句柄

* write_shape_model (ModelID, 'mk.shm')

* 把这个模型保存成一个shm模板

*clear_shape_model (ModelID)

stop()

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image, ModelID, rad(-180), rad(360), 0.1, 5.0, 0.5, 0, 0.5, 'least_squares', 5, 0.8, Row, Column, Angle, Scale, Score)

* 匹配一个比例不变的轮廓模型,参数和创建的参数差不多

get_shape_model_contours (ModelContours, ModelID, 1)

for I := 0 to |Score|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row[I], Column[I], Angle[I], HomMat2DRotate)

hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)

affine_trans_contour_xld (ModelContours, ModelTrans, HomMat2DScale)

dev_display (ModelTrans)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score| + '个商标', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

* 但是变形则不能被识别

stop ()

clear_shape_model (ModelID)

================================================================================= * Extracted blobs with calculated center points (SG-i-P29).hdev

*

dev_close_window ()

dev_open_window (0, 0, 300, 300, 'black', WindowHandle)

read_image(Image1,'particle')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

threshold(Image1,BrightPixels,80,255)

* 从获取的图片中选取灰度值为80-255的区域,这个区域命名为BrightPixels;

* 阀值分割出来的区域“Region”是根据灰度值范围分割的,那么只要是阀值范围内的

* 区域都会被选取显示。

connection(BrightPixels,Particles)

* 阀值分割出来的Region,即这个例子中的BrightPixels,把边缘相连的区域,即图中的单个红色阈值区域,* 连成一个区域,不相连的区域变成单独的区域,就相当于分成各个不同的区域块。

area_center(Particles, Area, Row, Column)

stop()

dev_clear_window()

read_image(Image2,'L:/Halcon test/mk2.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

threshold(Image2,BrightPixels,0,100)

connection(BrightPixels,Particles)

area_center(Particles, Area, Row, Column)

stop()

dev_clear_window()

read_image(Image3,'L:/Halcon test/mk3.jpg')

get_image_size (Image3, Width, Height)

dev_open_window_fit_image (Image3, 0, 0, Width, Height, WindowHandle)

dev_display(Image3)

gen_rectangle2 (ROI, 451.167, 384.5, rad(18.0042), 210.297, 110.003)

reduce_domain(Image3,ROI,ImageReduced)

threshold(ImageReduced,BrightPixels,0,10)

connection(BrightPixels,Particles)

* 读取,分色出这个logo中多少个不连接的区域

stop()

dev_clear_window()

read_image (Image4,'L:/Halcon test/pic.jpg')

get_image_size (Image4, Width, Height)

dev_open_window_fit_image (Image4, 0, 0, Width, Height, WindowHandle)

dev_display(Image4)

decompose3(Image4, Image11, Image22, Image33)

*转化成RGB三个通道图

rgb1_to_gray(Image4,GrayImage)

*转化成灰度图

threshold (Image4, Region, 128, 255)

*全局阈值

================================================================================= * Finding all clips in the image (MK).hdev

*

* 在一个图片中获取ROI并在此图片中匹配

dev_close_window ()

dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

*read_image(Image,'L:/Halcon test/mk2.jpg')

*read_image(Image,'L:/Halcon test/mk3.jpg')

*read_image(Image,'L:/Halcon test/mk4.jpg')

read_image(Image,'L:/Halcon test/mk5.jpg')

gen_rectangle1 (ROI1, 57.8333, 49.5, 181.167, 342.833)

reduce_domain(Image,ROI1,ImageReduced1)

create_shape_model(ImageReduced1,0,0,rad(360),0,'no_pregeneration','use_polarity',40,10,ModelID1)

find_shape_model(Image,ModelID1,0,rad(360),0.7,13,0.5,'interpolation',0,0.9,Row,Column,Angle,Score)

* 寻找与模板的大小尺寸必须是一比一匹配的,只是角度的不同而已,若大小发生变化,则不能匹配

get_shape_model_contours(ModelContours1,ModelID1,1)

for i := 0 to |Row|-1 by 1

vector_angle_to_rigid(0,0,0,Row[i],Column[i],Angle[i],HomMat2D)

affine_trans_contour_xld(ModelContours1,ContoursAffinTrans,HomMat2D)

endfor

disp_message (WindowHandle, '总共匹配了' + |Row| + '个商标', 'window', 12, 12, 'red', 'true')

clear_shape_model(ModelID1)

stop()

* 在一个图片中获取ROI,并在另一个图片中匹配

dev_close_window ()

dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

read_image(Image1,'L:/Halcon test/mk1.jpg')

gen_rectangle1 (ROI2, 174.183, 54.3033, 295.347, 342.355)

reduce_domain(Image1,ROI2,ImageReduced2)

create_shape_model(ImageReduced2,0,0,rad(360),0,'no_pregeneration','use_polarity',40,10,ModelID2)

read_image(Image2,'L:/Halcon test/mk2.jpg')

find_shape_model(Image2,ModelID2,0,rad(360),0.7,13,0.5,'interpolation',0,0.9,Row,Column,Angle,Score)

* 寻找与模板的大小尺寸必须是一比一匹配的,只是角度的不同而已,若大小发生变化,则不能匹配

get_shape_model_contours(ModelContours2,ModelID2,1)

for i := 0 to |Row|-1 by 1

vector_angle_to_rigid(0,0,0,Row[i],Column[i],Angle[i],HomMat2D)

affine_trans_contour_xld(ModelContours2,ContoursAffinTrans,HomMat2D)

endfor

clear_shape_model(ModelID2)

================================================================================= * Finding all clips in the image (SG-i-P99).hdev

*

read_image(Image,'clip')

gen_rectangle2(ROI,124,181,0.653,129,47)

reduce_domain(Image,ROI,ImageReduced)

create_shape_model(ImageReduced,0,0,rad(360),0,'no_pregeneration','use_polarity',40,10,ModelID)

find_shape_model(Image,ModelID,0,rad(360),0.7,13,0.5,'interpolation',0,0.9,Row,Column,Angle,Score)

get_shape_model_contours(ModelContours,ModelID,1)

for i := 0 to |Row|-1 by 1

vector_angle_to_rigid(0,0,0,Row[i],Column[i],Angle[i],HomMat2D)

affine_trans_contour_xld(ModelContours,ContoursAffinTrans,HomMat2D)

endfor

clear_shape_model(ModelID)

================================================================================= * led and mianban matching.hdev

*

* 读取一个轮廓模型(shape model),使这个模型可放大或缩小地进行寻找匹配。

dev_close_window ()

* dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI, 41.5, 22.5, 104.5, 138.5)

reduce_domain(Image1,ROI,ImageReduced)

inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 5, 40)

create_scaled_shape_model (ImageReduced, 5, rad(-180), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID)

* 创建一个比例可变的匹配的轮廓模型

* create_scaled_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast : ModelID)

* 01、Template,//reduce_domain后的模板图像

* 02、NumLevels,//金字塔的层数,可设为“auto”或0—10的整数

* 03、AngleStart,//模板旋转的起始角度

* 04、AngleExtent,//模板旋转角度范围, >=0

* 05、AngleStep,//旋转角度的步长,>=0 and <=pi/16

* 06、ScaleMin,//模板最小比例

* 07、ScaleMax,//模板最大比例

* 08、ScaleStep,//模板比例的步长

* 09、Optimization,//设置模板优化和模板创建方法

* 10、Metric, //匹配方法设置

* 11、Contrast,//设置对比度

* 12、MinContrast,//设置最小对比度

* 13、ModelID,//输出模板句柄

* write_shape_model (ModelID, 'mk.shm')

* 把这个模型保存成一个shm模板

*clear_shape_model (ModelID)

stop()

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/mianbanw.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID, rad(-180), rad(360), 0.1, 5.0, 0.5, 0, 0.5, 'least_squares', 5, 0.8, Row, Column, Angle, Scale, Score)

* find_scaled_shape_model(Image, ModelID, AngleStart, AngleExtent, ScaleMin, ScaleMax, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Scale, Score)

* 匹配一个比例可变的轮廓模型,参数和创建的参数差不多

* Image : : //搜索图像

* ModelID, //模板句柄

* AngleStart, // 搜索时的起始角度

* AngleExtent, //搜索时的角度范围,必须与创建模板时的有交集

* ScaleMin,//模板最小比例

* ScaleMax,//模板最大比例

* MinScore, //最小匹配值,输出的匹配的得分Score 大于该值

* NumMatches, //定义要输出的匹配的最大个数

* MaxOverlap, //当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出

* SubPixel, //计算精度的设置,五种模式,多选2,3

* NumLevels, //搜索时金字塔的层数

* Greediness : //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况

* Row, Column, Angle, Score) //输出匹配位置的行和列坐标、角度、得分。

get_shape_model_contours (ModelContours, ModelID, 1)

for I := 0 to |Score|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row[I], Column[I], Angle[I], HomMat2DRotate)

hom_mat2d_scale (HomMat2DRotate, Scale[I], Scale[I], Row[I], Column[I], HomMat2DScale)

affine_trans_contour_xld (ModelContours, ModelTrans, HomMat2DScale)

dev_display (ModelTrans)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score| + '个商标', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

* 但是变形则不能被识别

stop ()

clear_shape_model (ModelID)

================================================================================= * multiple_models.hdev

*

* ------------------------------------------------------------------------------------------------

* This example program searches for two types of objects simultaneously.

* ------------------------------------------------------------------------------------------------

* general configuration of HDevelop

dev_update_window ('off')

* image acquisition and window size

read_image (ModelImage, 'rings_and_nuts')

get_image_pointer1 (ModelImage, Pointer, Type, Width, Height)

dev_close_window ()

dev_open_window (0, 0, Width, Height, 'white', WindowHandle)

dev_set_part (0, 0, Height-1, Width-1)

dev_display (ModelImage)

* colors and other settings for the visualization

dev_set_color ('blue')

dev_set_draw ('margin')

dev_set_line_width (2)

set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

* ------------------- start of the application ----------------

* -> select the model objects

gen_circle (ModelROIRing, 121, 299, 55)

gen_circle (ModelROINut, 324, 279, 52)

dev_display (ModelImage)

dev_display (ModelROIRing)

dev_display (ModelROINut)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

* step 1: create the models

reduce_domain (ModelImage, ModelROIRing, ImageROIRing)

create_scaled_shape_model (ImageROIRing, 'auto', -rad(22.5), rad(45), 'auto', 0.8, 1.2, 'auto', 'none', 'use_polarity', 60, 10, ModelIDRing)

inspect_shape_model (ImageROIRing, PyramidImage, ModelRegionRing, 1, 30)

get_shape_model_contours (ShapeModelRing, ModelIDRing, 1)

count_obj (ShapeModelRing, NumContoursRing)

dev_clear_window ()

dev_display (ModelRegionRing)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

reduce_domain (ModelImage, ModelROINut, ImageROINut)

create_scaled_shape_model (ImageROINut, 'auto', -rad(30), rad(60), 'auto', 0.6, 1.4, 'auto', 'none', 'use_polarity', 60, 10, ModelIDNut)

inspect_shape_model (ImageROINut, PyramidImage, ModelRegionNut, 1, 30)

get_shape_model_contours (ShapeModelNut, ModelIDNut, 1)

count_obj (ShapeModelNut, NumContoursNut)

dev_display (ModelRegionNut)

* step 2: save the relevant information in tuples

ModelIDs := [ModelIDRing, ModelIDNut]

concat_obj (ShapeModelRing, ShapeModelNut, ShapeModels)

StartContoursInTuple := [1, NumContoursRing+1]

NumContoursInTuple := [NumContoursRing, NumContoursNut]

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

read_image (SearchImage, 'rings_and_nuts')

dev_display (SearchImage)

* step 3: create two search ROIs (upper and lower part of the image)

gen_rectangle1 (SearchROIRing, 110, 10, 130, Width - 10)

gen_rectangle1 (SearchROINut, 315, 10, 335, Width - 10)

* -> "add" the ROIs to the search image

concat_obj (SearchROIRing, SearchROINut, SearchROIs)

dev_set_color ('blue')

dev_display (SearchROIs)

add_channels (SearchROIs, SearchImage, SearchImageReduced)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

* step 4: find all objects

dev_display (SearchImage)

dev_set_color ('cyan')

find_scaled_shape_models (SearchImageReduced, ModelIDs, [-rad(22.5), -rad(30)], [rad(45), rad(60)], [0.8, 0.6], [1.2, 1.4], 0.7, 0, 0, 'least_squares', 0, 0.8, RowCheck, ColumnCheck, AngleCheck, ScaleCheck, Score, ModelIndex)

for i := 0 to |Score| - 1 by 1

* step 4: determine the transformation

Model := ModelIndex[i]

vector_angle_to_rigid (0, 0, 0, RowCheck[i], ColumnCheck[i], AngleCheck[i], MovementOfObject)

hom_mat2d_scale (MovementOfObject, ScaleCheck[i], ScaleCheck[i], RowCheck[i], ColumnCheck[i], MoveAndScalingOfObject)

* -> access the XLD contours belonging to the model

copy_obj (ShapeModels, ShapeModel, StartContoursInTuple[Model], NumContoursInTuple[Model])

affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MoveAndScalingOfObject)

dev_display (ModelAtNewPosition)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

endfor

* ------------------- end of the application -----------------

* clean up

dev_update_window ('on')

clear_shape_model (ModelIDRing)

clear_shape_model (ModelIDNut)

================================================================================= * Processing the image only within the circular ROI (SG-i-P20).hdev

*

dev_close_window ()

dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

read_image(Image,'mreut')

gen_circle(ROI,256,256,200)

* 在行256,列256为圆心的位置,画一个直径为200的园

reduce_domain(Image,ROI,ImageReduced)

* 在整个图片(Image)抠(图)出一个感兴趣区域(ROI,就刚才画的园),命名为ImageReduced

edges_sub_pix(ImageReduced,Edges,'lanser2',0.5,20,40)

dev_display(Image)

dev_clear_window()

dev_display(ROI)

dev_display(ImageReduced)

dev_display(Edges)

================================================================================= * led and mianban matching_n.hdev

* 读取一个轮廓模型(shape model),使这个模型可放大或缩小地进行寻找匹配。

* ~~~~~~~~~~~~~开始读取模板~~~~~~~~~~~~~~~~~~

dev_close_window ()

* dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

* =============缺水,qs============================

gen_rectangle1 (ROI_qs, 41.5, 22.5, 104.5, 138.5)

* gen_rectangle1 (ROI, 117.5, 21.5, 189.5, 187.5)

reduce_domain(Image1,ROI_qs,ImageReduced_qs)

inspect_shape_model (ImageReduced_qs, ModelImages_qs, ModelRegions_qs, 5, 40)

create_scaled_shape_model (ImageReduced_qs, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_qs)

*write_shape_model (ModelID_qs, 'qs.shm')

* 把这个模型保存成一个shm模板

*clear_shape_model (ModelID_qs)

*stop()

* =============低水位,dsw=========================

dev_close_window ()

*read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_dsw, 117.5, 21.5, 189.5, 187.5)

reduce_domain(Image1,ROI_dsw,ImageReduced_dsw)

inspect_shape_model (ImageReduced_dsw, ModelImages_dsw, ModelRegions_dsw, 5, 40)

create_scaled_shape_model (ImageReduced_dsw, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_dsw)

*write_shape_model (ModelID_dsw, 'dsw.shm')

*clear_shape_model (ModelID_dsw)

* stop()

* =============定时关机,dsgj=========================

dev_close_window ()

*read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_dsgj, 219.5, 23.5, 294.5, 239.5)

reduce_domain(Image1,ROI_dsgj,ImageReduced_dsgj)

inspect_shape_model (ImageReduced_dsgj, ModelImages_dsgj, ModelRegions_dsgj, 5, 40)

create_scaled_shape_model (ImageReduced_dsgj, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_dsgj)

*write_shape_model (ModelID_dsgj, 'dsgj.shm')

*clear_shape_model (ModelID_dsgj)

*stop()

* =============30℃睡眠,sleep=========================

dev_close_window ()

* read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_sleep, 26.5, 193.5, 200.5, 488.5)

reduce_domain(Image1,ROI_sleep,ImageReduced_sleep)

inspect_shape_model (ImageReduced_sleep, ModelImages_sleep, ModelRegions_sleep, 5, 40)

create_scaled_shape_model (ImageReduced_sleep, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_sleep)

*write_shape_model (ModelID_sleep, 'sleep.shm')

*clear_shape_model (ModelID_sleep)

*stop()

* =============定时关机时间,time=========================

dev_close_window ()

* read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_time, 208.5, 253.5, 301.5, 486.5)

reduce_domain(Image1,ROI_time,ImageReduced_time)

inspect_shape_model (ImageReduced_time, ModelImages_time, ModelRegions_time, 5, 40)

create_scaled_shape_model (ImageReduced_time, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_time)

*write_shape_model (ModelID_time, 'time.shm')

*clear_shape_model (ModelID_time)

*stop()

* =============定时关机+时间,dsgjtime=========================

dev_close_window ()

* read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_dsgjtime, 208.5, 21.5, 301.5, 486.5)

reduce_domain(Image1,ROI_dsgjtime,ImageReduced_dsgjtime)

inspect_shape_model (ImageReduced_dsgjtime, ModelImages_dsgjtime, ModelRegions_dsgjtime, 5, 40)

create_scaled_shape_model (ImageReduced_dsgjtime, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_dsgjtime)

*write_shape_model (ModelID_dsgjtime, 'dsgjtime.shm')

*clear_shape_model (ModelID_dsgjtime)

stop()

* ~~~~~~~~~~~~~结束读取模板~~~~~~~~~~~~~~~~~~

* ~~~~~~~~~~~~~开始寻找匹配~~~~~~~~~~~~~~~~~~

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/mianban.jpg')

*read_image(Image2,'L:/Halcon test/led/mianbanw.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

* =============缺水,qs============================

find_scaled_shape_model (Image2, ModelID_qs, rad(0), rad(360), 0.1, 5.0, 0.5, 0, 0.5, 'least_squares', 5, 0.8, Row_qs, Column_qs, Angle_qs, Scale_qs, Score_qs)

* find_scaled_shape_model(Image, ModelID, AngleStart, AngleExtent, ScaleMin, ScaleMax, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Scale, Score)

* 匹配一个比例可变的轮廓模型,参数和创建的参数差不多

* Image : : //搜索图像

* ModelID, //模板句柄

* AngleStart, // 搜索时的起始角度

* AngleExtent, //搜索时的角度范围,必须与创建模板时的有交集

* ScaleMin,//模板最小比例

* ScaleMax,//模板最大比例

* MinScore, //最小匹配值,输出的匹配的得分Score 大于该值

* NumMatches, //定义要输出的匹配的最大个数

* MaxOverlap, //当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出

* SubPixel, //计算精度的设置,五种模式,多选2,3

* NumLevels, //搜索时金字塔的层数

* Greediness : //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况

* Row, Column, Angle, Score) //输出匹配位置的行和列坐标、角度、得分。

get_shape_model_contours (ModelContours_qs, ModelID_qs, 1)

for I := 0 to |Score_qs|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_qs[I], Column_qs[I], Angle_qs[I], HomMat2DRotate_qs)

hom_mat2d_scale (HomMat2DRotate_qs, Scale_qs[I], Scale_qs[I], Row_qs[I], Column_qs[I], HomMat2DScale_qs)

affine_trans_contour_xld (ModelContours_qs, ModelTrans_qs, HomMat2DScale_qs)

dev_display (ModelTrans_qs)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_qs| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

* 但是变形则不能被识别

*stop ()

wait_seconds(2)

* =============低水位,dsw=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/led2.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_dsw, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,3], 0.8, Row_dsw, Column_dsw, Angle_dsw, Scale_dsw, Score_dsw)

get_shape_model_contours (ModelContours_dsw, ModelID_dsw, 1)

for I := 0 to |Score_dsw|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_dsw[I], Column_dsw[I], Angle_dsw[I], HomMat2DRotate_dsw)

hom_mat2d_scale (HomMat2DRotate_dsw, Scale_dsw[I], Scale_dsw[I], Row_dsw[I], Column_dsw[I], HomMat2DScale_dsw)

affine_trans_contour_xld (ModelContours_dsw, ModelTrans_dsw, HomMat2DScale_dsw)

dev_display (ModelTrans_dsw)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_dsw| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机,dsgj=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/led2.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_dsgj, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_dsgj, Column_dsgj, Angle_dsgj, Scale_dsgj, Score_dsgj)

get_shape_model_contours (ModelContours_dsgj, ModelID_dsgj, 1)

for I := 0 to |Score_dsgj|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_dsgj[I], Column_dsgj[I], Angle_dsgj[I], HomMat2DRotate_dsgj)

hom_mat2d_scale (HomMat2DRotate_dsgj, Scale_dsgj[I], Scale_dsgj[I], Row_dsgj[I], Column_dsgj[I], HomMat2DScale_dsgj)

affine_trans_contour_xld (ModelContours_dsgj, ModelTrans_dsgj, HomMat2DScale_dsgj)

dev_display (ModelTrans_dsgj)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_dsgj| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============30℃睡眠,sleep=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_sleep, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_sleep, Column_sleep, Angle_sleep, Scale_sleep, Score_sleep)

get_shape_model_contours (ModelContours_sleep, ModelID_sleep, 1)

for I := 0 to |Score_sleep|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_sleep[I], Column_sleep[I], Angle_sleep[I], HomMat2DRotate_sleep) hom_mat2d_scale (HomMat2DRotate_sleep, Scale_sleep[I], Scale_sleep[I], Row_sleep[I], Column_sleep[I], HomMat2DScale_sleep)

affine_trans_contour_xld (ModelContours_sleep, ModelTrans_sleep, HomMat2DScale_sleep)

dev_display (ModelTrans_sleep)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_sleep| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机时间,time=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_time, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_time, Column_time, Angle_time, Scale_time, Score_time)

get_shape_model_contours (ModelContours_time, ModelID_time, 1)

for I := 0 to |Score_time|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_time[I], Column_time[I], Angle_time[I], HomMat2DRotate_time)

hom_mat2d_scale (HomMat2DRotate_time, Scale_time[I], Scale_time[I], Row_time[I], Column_time[I], HomMat2DScale_time)

affine_trans_contour_xld (ModelContours_time, ModelTrans_time, HomMat2DScale_time)

dev_display (ModelTrans_time)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_time| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机+时间,dsgjtime=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_dsgjtime, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_dsgjtime, Column_dsgjtime, Angle_dsgjtime, Scale_dsgjtime, Score_dsgjtime)

get_shape_model_contours (ModelContours_dsgjtime, ModelID_dsgjtime, 1)

for I := 0 to |Score_dsgjtime|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_dsgjtime[I], Column_dsgjtime[I], Angle_dsgjtime[I], HomMat2DRotate_dsgjtime)

hom_mat2d_scale (HomMat2DRotate_dsgjtime, Scale_dsgjtime[I], Scale_dsgjtime[I], Row_dsgjtime[I], Column_dsgjtime[I], HomMat2DScale_dsgjtime)

affine_trans_contour_xld (ModelContours_dsgjtime, ModelTrans_dsgjtime, HomMat2DScale_dsgjtime) dev_display (ModelTrans_dsgjtime)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_dsgjtime| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

* =============30℃睡眠,sleep错误匹配测试=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500wrong.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_sleep, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_sleep, Column_sleep, Angle_sleep, Scale_sleep, Score_sleep)

get_shape_model_contours (ModelContours_sleep, ModelID_sleep, 1)

for I := 0 to |Score_sleep|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_sleep[I], Column_sleep[I], Angle_sleep[I], HomMat2DRotate_sleep) hom_mat2d_scale (HomMat2DRotate_sleep, Scale_sleep[I], Scale_sleep[I], Row_sleep[I], Column_sleep[I], HomMat2DScale_sleep)

affine_trans_contour_xld (ModelContours_sleep, ModelTrans_sleep, HomMat2DScale_sleep)

dev_display (ModelTrans_sleep)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_sleep| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机时间,time错误匹配测试=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500wrong.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

*read_shape_model ('mk.shm', ModelID)

find_scaled_shape_model (Image2, ModelID_time, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_time, Column_time, Angle_time, Scale_time, Score_time)

get_shape_model_contours (ModelContours_time, ModelID_time, 1)

for I := 0 to |Score_time|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_time[I], Column_time[I], Angle_time[I], HomMat2DRotate_time)

hom_mat2d_scale (HomMat2DRotate_time, Scale_time[I], Scale_time[I], Row_time[I], Column_time[I], HomMat2DScale_time)

affine_trans_contour_xld (ModelContours_time, ModelTrans_time, HomMat2DScale_time)

dev_display (ModelTrans_time)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_time| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

*==========错误匹配测试失败,此匹配方案不能鉴别断笔缺符号的错误!!!===========

* ~~~~~~~~~~~~~结束寻找匹配~~~~~~~~~~~~~~~~~~

clear_shape_model (ModelID_dsw)

clear_shape_model (ModelID_qs)

clear_shape_model (ModelID_dsgj)

clear_shape_model (ModelID_dsgjtime)

clear_shape_model (ModelID_time)

clear_shape_model (ModelID_sleep)

================================================================================= * KN20-LED-Matching-A:write_shape_model.hdev

* ~~~~~~~~~~~~~开始读取模板~~~~~~~~~~~~~~~~~~

dev_close_window ()

* dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

* =============缺水,qs============================

gen_rectangle1 (ROI_qs, 41.5, 22.5, 104.5, 138.5)

* gen_rectangle1 (ROI, 117.5, 21.5, 189.5, 187.5)

reduce_domain(Image1,ROI_qs,ImageReduced_qs)

inspect_shape_model (ImageReduced_qs, ModelImages_qs, ModelRegions_qs, 5, 40)

create_scaled_shape_model (ImageReduced_qs, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_qs)

write_shape_model (ModelID_qs, 'qs.shm')

* 把这个模型保存成一个shm模板

clear_shape_model (ModelID_qs)

*stop()

* =============低水位,dsw=========================

dev_close_window ()

*read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_dsw, 117.5, 21.5, 189.5, 187.5)

reduce_domain(Image1,ROI_dsw,ImageReduced_dsw)

inspect_shape_model (ImageReduced_dsw, ModelImages_dsw, ModelRegions_dsw, 5, 40)

create_scaled_shape_model (ImageReduced_dsw, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_dsw)

write_shape_model (ModelID_dsw, 'dsw.shm')

clear_shape_model (ModelID_dsw)

* stop()

* =============定时关机,dsgj=========================

dev_close_window ()

*read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_dsgj, 219.5, 23.5, 294.5, 239.5)

reduce_domain(Image1,ROI_dsgj,ImageReduced_dsgj)

inspect_shape_model (ImageReduced_dsgj, ModelImages_dsgj, ModelRegions_dsgj, 5, 40)

create_scaled_shape_model (ImageReduced_dsgj, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_dsgj)

write_shape_model (ModelID_dsgj, 'dsgj.shm')

clear_shape_model (ModelID_dsgj)

*stop()

* =============30℃睡眠,sleep=========================

dev_close_window ()

* read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_sleep, 26.5, 193.5, 200.5, 488.5)

reduce_domain(Image1,ROI_sleep,ImageReduced_sleep)

inspect_shape_model (ImageReduced_sleep, ModelImages_sleep, ModelRegions_sleep, 5, 40)

create_scaled_shape_model (ImageReduced_sleep, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_sleep)

write_shape_model (ModelID_sleep, 'sleep.shm')

clear_shape_model (ModelID_sleep)

*stop()

* =============定时关机时间,time=========================

dev_close_window ()

* read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_time, 208.5, 253.5, 301.5, 486.5)

reduce_domain(Image1,ROI_time,ImageReduced_time)

inspect_shape_model (ImageReduced_time, ModelImages_time, ModelRegions_time, 5, 40)

create_scaled_shape_model (ImageReduced_time, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_time)

write_shape_model (ModelID_time, 'time.shm')

clear_shape_model (ModelID_time)

*stop()

* =============定时关机+时间,dsgjtime=========================

dev_close_window ()

* read_image(Image1,'L:/Halcon test/led/ledw.jpg')

get_image_size (Image1, Width, Height)

dev_open_window_fit_image (Image1, 0, 0, Width, Height, WindowHandle)

dev_display(Image1)

gen_rectangle1 (ROI_dsgjtime, 208.5, 21.5, 301.5, 486.5)

reduce_domain(Image1,ROI_dsgjtime,ImageReduced_dsgjtime)

inspect_shape_model (ImageReduced_dsgjtime, ModelImages_dsgjtime, ModelRegions_dsgjtime, 5, 40)

create_scaled_shape_model (ImageReduced_dsgjtime, 5, rad(0), rad(360), 0, 0.1, 5.0, 0, ['none','no_pregeneration'], 'ignore_global_polarity', 40, 10, ModelID_dsgjtime)

write_shape_model (ModelID_dsgjtime, 'dsgjtime.shm')

clear_shape_model (ModelID_dsgjtime)

stop()

* ~~~~~~~~~~~~~结束读取模板~~~~~~~~~~~~~~~~~~

================================================================================= * KN20-LED-Matching-A:find_from_shape_model.hdev

* ~~~~~~~~~~~~~开始寻找匹配~~~~~~~~~~~~~~~~~~

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/mianban.jpg')

*read_image(Image2,'L:/Halcon test/led/mianbanw.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

read_shape_model ('qs.shm', ModelID_qs)

* =============缺水,qs============================

find_scaled_shape_model (Image2, ModelID_qs, rad(0), rad(360), 0.1, 5.0, 0.5, 0, 0.5, 'least_squares', 5, 0.8, Row_qs, Column_qs, Angle_qs, Scale_qs, Score_qs)

* find_scaled_shape_model(Image, ModelID, AngleStart, AngleExtent, ScaleMin, ScaleMax, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Scale, Score)

* 匹配一个比例可变的轮廓模型,参数和创建的参数差不多

* Image : : //搜索图像

* ModelID, //模板句柄

* AngleStart, // 搜索时的起始角度

* AngleExtent, //搜索时的角度范围,必须与创建模板时的有交集

* ScaleMin,//模板最小比例

* ScaleMax,//模板最大比例

* MinScore, //最小匹配值,输出的匹配的得分Score 大于该值

* NumMatches, //定义要输出的匹配的最大个数

* MaxOverlap, //当找到的目标存在重叠时,且重叠大于该值时选择一个好的输出

* SubPixel, //计算精度的设置,五种模式,多选2,3

* NumLevels, //搜索时金字塔的层数

* Greediness : //贪婪度,搜索启发式,一般都设为0.9,越高速度快,容易出现找不到的情况

* Row, Column, Angle, Score) //输出匹配位置的行和列坐标、角度、得分。

get_shape_model_contours (ModelContours_qs, ModelID_qs, 1)

for I := 0 to |Score_qs|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_qs[I], Column_qs[I], Angle_qs[I], HomMat2DRotate_qs)

hom_mat2d_scale (HomMat2DRotate_qs, Scale_qs[I], Scale_qs[I], Row_qs[I], Column_qs[I], HomMat2DScale_qs)

affine_trans_contour_xld (ModelContours_qs, ModelTrans_qs, HomMat2DScale_qs)

dev_display (ModelTrans_qs)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_qs| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

* 但是变形则不能被识别

*stop ()

wait_seconds(2)

* =============低水位,dsw=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/led2.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

read_shape_model ('dsw.shm', ModelID_dsw)

find_scaled_shape_model (Image2, ModelID_dsw, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,3], 0.8, Row_dsw, Column_dsw, Angle_dsw, Scale_dsw, Score_dsw)

get_shape_model_contours (ModelContours_dsw, ModelID_dsw, 1)

for I := 0 to |Score_dsw|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_dsw[I], Column_dsw[I], Angle_dsw[I], HomMat2DRotate_dsw)

hom_mat2d_scale (HomMat2DRotate_dsw, Scale_dsw[I], Scale_dsw[I], Row_dsw[I], Column_dsw[I], HomMat2DScale_dsw)

affine_trans_contour_xld (ModelContours_dsw, ModelTrans_dsw, HomMat2DScale_dsw)

dev_display (ModelTrans_dsw)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_dsw| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机,dsgj=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/led2.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

read_shape_model ('dsgj.shm', ModelID_dsgj)

find_scaled_shape_model (Image2, ModelID_dsgj, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_dsgj, Column_dsgj, Angle_dsgj, Scale_dsgj, Score_dsgj)

get_shape_model_contours (ModelContours_dsgj, ModelID_dsgj, 1)

for I := 0 to |Score_dsgj|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_dsgj[I], Column_dsgj[I], Angle_dsgj[I], HomMat2DRotate_dsgj)

hom_mat2d_scale (HomMat2DRotate_dsgj, Scale_dsgj[I], Scale_dsgj[I], Row_dsgj[I], Column_dsgj[I], HomMat2DScale_dsgj)

affine_trans_contour_xld (ModelContours_dsgj, ModelTrans_dsgj, HomMat2DScale_dsgj)

dev_display (ModelTrans_dsgj)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_dsgj| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============30℃睡眠,sleep=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

read_shape_model ('sleep.shm', ModelID_sleep)

find_scaled_shape_model (Image2, ModelID_sleep, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_sleep, Column_sleep, Angle_sleep, Scale_sleep, Score_sleep)

get_shape_model_contours (ModelContours_sleep, ModelID_sleep, 1)

for I := 0 to |Score_sleep|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_sleep[I], Column_sleep[I], Angle_sleep[I], HomMat2DRotate_sleep) hom_mat2d_scale (HomMat2DRotate_sleep, Scale_sleep[I], Scale_sleep[I], Row_sleep[I], Column_sleep[I], HomMat2DScale_sleep)

affine_trans_contour_xld (ModelContours_sleep, ModelTrans_sleep, HomMat2DScale_sleep)

dev_display (ModelTrans_sleep)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_sleep| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机时间,time=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

read_shape_model ('time.shm', ModelID_time)

find_scaled_shape_model (Image2, ModelID_time, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_time, Column_time, Angle_time, Scale_time, Score_time)

get_shape_model_contours (ModelContours_time, ModelID_time, 1)

for I := 0 to |Score_time|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_time[I], Column_time[I], Angle_time[I], HomMat2DRotate_time)

hom_mat2d_scale (HomMat2DRotate_time, Scale_time[I], Scale_time[I], Row_time[I], Column_time[I], HomMat2DScale_time)

affine_trans_contour_xld (ModelContours_time, ModelTrans_time, HomMat2DScale_time)

dev_display (ModelTrans_time)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_time| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

*stop ()

wait_seconds(2)

* =============定时关机+时间,dsgjtime=========================

dev_close_window ()

read_image(Image2,'L:/Halcon test/led/bianm500.jpg')

get_image_size (Image2, Width, Height)

dev_open_window_fit_image (Image2, 0, 0, Width, Height, WindowHandle)

dev_display(Image2)

read_shape_model ('dsgjtime.shm', ModelID_dsgjtime)

find_scaled_shape_model (Image2, ModelID_dsgjtime, rad(0), rad(360), 0.1, 5.0, 0.5, 1, 0.5, 'least_squares', [5,4], 0.8, Row_dsgjtime, Column_dsgjtime, Angle_dsgjtime, Scale_dsgjtime, Score_dsgjtime)

get_shape_model_contours (ModelContours_dsgjtime, ModelID_dsgjtime, 1)

for I := 0 to |Score_dsgjtime|-1 by 1

vector_angle_to_rigid (0, 0, 0, Row_dsgjtime[I], Column_dsgjtime[I], Angle_dsgjtime[I], HomMat2DRotate_dsgjtime)

hom_mat2d_scale (HomMat2DRotate_dsgjtime, Scale_dsgjtime[I], Scale_dsgjtime[I], Row_dsgjtime[I], Column_dsgjtime[I], HomMat2DScale_dsgjtime)

affine_trans_contour_xld (ModelContours_dsgjtime, ModelTrans_dsgjtime, HomMat2DScale_dsgjtime) dev_display (ModelTrans_dsgjtime)

endfor

disp_message (WindowHandle, '总共匹配了' + |Score_dsgjtime| + '个符号', 'window', 12, 12, 'red', 'true')

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

clear_shape_model (ModelID_dsw)

clear_shape_model (ModelID_qs)

clear_shape_model (ModelID_dsgj)

clear_shape_model (ModelID_dsgjtime)

clear_shape_model (ModelID_time)

clear_shape_model (ModelID_sleep)

一个基于1:1比例的匹配的实例及详解

从1月份暂停了halcon的学习,复习考研和年终收尾工作,直到这个月才开始halcon的学习,正好也庆祝自己考上浙江大学的工程硕士,新的学习和工作也开始了。

今天开始总结前面学习的几个例子和分享这周刚测试的关于匹配的实例分析。

学习Halcon以来在论坛上的几个帖子(按学习顺序步骤排列):

[Halcon编程交流学习区] 图像获取的实例

[Halcon实例学习交流区] 一个用摄像头获取条形码并显示类型及解码的实例及每个步骤注解

[Halcon实例学习交流区] Halcon支持的颜色及其名称,共21种

[Halcon算子学习交流区] 一个摄像头解码二维码的实例及分步骤注解

[Halcon实例学习交流区] 一段可视化的条码扫描线的实例和注解

[Halcon编程交流学习区] Visual Studio 10.0设置引用HalconDotNet.dll

[Halcon编程交流学习区] C#导出的代码,怎么调用?

[Halcon实例学习交流区] 第一个Blob分析的例子,抽取Blobs

基本上比较详细得解释和学习这几个例子,发现在群上对于二维码的问题,大部分我都能理解和帮助到大家,挺欣慰。

这周开始了匹配方面的学习,有两个有用的例子和大家分享,一个是基于1:1比例的匹配的实例,一个是基于可变比例的匹配,正在测试的是基于变形可变比例的匹配。

这个例子是基于1:1比例的匹配的实例。

* 在一个图片中获取ROI并在此图片中匹配

dev_close_window ()

dev_open_window (0, 0, 600, 600, 'black', WindowHandle)

* 窗口语句

read_image(Image,'L:/Halcon test/mk2.jpg')

*read_image(Image,'L:/Halcon test/mk3.jpg')

*read_image(Image,'L:/Halcon test/mk4.jpg')

* 这里有4张图片,每一张都说明一个小问题,附图分析。

gen_rectangle1 (ROI1, 57.8333, 49.5, 181.167, 342.833)

* 画一个矩形选择ROI,矩形在左上角,覆盖一个完整的,无变形规定尺寸的商标,作为模板。

reduce_domain(Image,ROI1,ImageReduced1)

* 大图和这个矩形的ROI相减就会得到一个左上角的商标的图案作为模板,命名ImageReduced。create_shape_model(ImageReduced1,0,0,rad(360),0,'no_pregeneration','use_polarity',40,10,ModelID1)

如何使用SolidWorks Flow Simulation分析孔蚀现象

如何使用SolidWorks Flow Simulation分析孔蚀现象 Cavitation in SolidWorks Flow Simulation – 如何使用SolidWorks Flow Simulation分析孔蝕現象 ■實威國際/CAE產品事業部 何謂孔蝕現象(Cavitation) 孔蝕現象(Cavitation)也稱之為氣穴現象、空穴。當液體進入管路或閥門時如果壓力低於流體之蒸發壓壓力(Vapor Saturation Pressure),就會在管路或閥門的流道內產生氣泡。 這氣泡不是因為加熱而產生的,而是因為流動造成局部區域流速較快引起局部區域靜壓驟降,氣泡的產生會造成噪音或振動,而且通常是發生在實體表面上,因此會損壞管路或閥門的壁面,進而降低設備的使用壽命。孔蝕現象也常常發生在其他常見的裝置如泵浦、葉輪……等流體機械。若能透過分析軟體在產品設計階段模擬出此現象,則對於產品品質有非常大的保障。 (圖一) 發生孔蝕現象的渦輪葉片(圖片來源:參考資料2)

(圖二) 葉輪模型範例,吸入端至吐出端的壓力曲線,上方曲線是正常的,下方曲線低於蒸 發壓力會發生孔蝕現象。 孔蝕現象在SolidWorks Flow Simulation 1.SolidWorks Flow Simulation 2006以前版本。SolidWorks Flow Simulation無法直接模擬出孔蝕現象。不過,可以藉由分析結果中負壓的區域指出有孔蝕現象的區域。 2.SolidWorks Flow Simulation 2007之後版本。SolidWorks Flow Simulation有一項新增功能,可以應用來評估是否發生孔蝕現象。

动态分区分配 最佳 最坏 适应算法

我伟大的母校 课程设计报告书 实践课题:动态分区分配 姓名:路人甲 学号:20XXXXXX 指导老师:路人乙 学院:计算及科学与技术学院 课程设计实践时间 2013.3.11~2013.3.22

一.课程设计的目的: 二.设计内容: 三.设计要求: 四.程序流程图 Alloc

Best_fit Worst_fit

Free Show

Main 五.源代码 #include #include #include #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 100 //最大内存空间为100M typedef int Status; int flag;//标志 typedef struct freearea//定义一个空闲区说明表结构{ long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType;//元素类型 // 线性表的双向链表存储结构

typedef struct DuLNode//结构指针 { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList;//指针链表 DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status Best_fit(int); //最佳适应算法 Status Worst_fit(int);//最差适应算法 void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0; block_last->data.size=MAX_length; block_last->data.state=Free; return OK; } //分配主存 Status alloc(int ch) { int request = 0; cout<<"请输入需要分配的主存大小(单位:M):"; cin>>request; if(request<0 ||request==0) { cout<<"分配大小不合适,请重试!"<

Halcon表面划伤检测实例

Halcon表面划伤检测实例 *关闭活动图形窗口 dev_close_window () * 在程序执行中指定输出行为为off。 dev_update_window ('off') * **** * step: acquire image 步骤:获取图像 * ****读入文件名为'surface_scratch' 的图像到Image read_image (Image, 'surface_scratch') get_image_size (Image, Width, Height) *打开一个和Image宽高比一致的图像窗口 dev_open_window_fit_image (Image, 0, 0, Width, Width, WindowID) *设置窗口字体大小为12,字体类型为Courier,粗体不倾斜字体。 set_display_font (WindowID, 12, 'Courier', 'true', 'false') *设置填充模式为'margin' dev_set_draw ('margin') *定义输出轮廓线宽为4

dev_set_line_width (4) *显示Image到窗口 dev_display (Image) *WindowID窗口使用黑色字体在一个方框内显示按"F5"继续运行字体,并注册F5消息处理disp_continue_message (WindowID, 'black', 'true') stop () * **** * step: segment image 步骤:图像分割 * **** * -> using a local threshold 使用局部阈值 * 对Image进行7*7均值滤波 mean_image (Image, ImageMean, 7, 7) ********************************************************************* *得到的图像为: * * * *用均值滤波图像作为二值化阈值图像,返回小于灰度值小于该点阈值-5的图像。 dyn_threshold (Image, ImageMean, DarkPixels, 5, 'dark') *************************************** ****得到的区域为:

lidWorksFlowSimulation全局旋转与局部旋转的应用

lidWorksFlowSimulation全局旋转与局部旋转的应用 发表时间:2014-10-9 作者: 周洲来源: 互联网 关键字: SolidWorks Flow Simulation全局旋转局部旋转 本文介绍了以离心泵和CPU散热器仿真分析为例,介绍了在运用SolidWorks Flow Simulation进行旋转设置的过程中,设置全局旋转或局部旋转的具体步骤和方法。 当我们在SolidWorks Flow Simulation遇到有旋转的情况时,我们会考虑设置全局旋转或局部旋转。设置全局旋转时,所有组件均参与旋转;而设置局部旋转时,只有包括在旋转区域内的组件参与旋转,那这两种情况该如何设置呢?请看下文的实例: 离心泵: 1.该离心泵模型由叶轮、盖子以及3个封盖组成,实例是研究空气通过具有旋转叶轮离心泵的流动情况。空气通过进口封盖沿垂直于封盖表面的方向流入离心泵内部,通过旋转的叶轮从出口封盖流出,见图1。 图1 离心泵模型 2.通过向导设定分析类型为内部流动,旋转类型为全局旋转,参考轴为Z轴,角速度为 -209.43951rad/s(2000rpm)。见图2:

图2 向导设定分析类型 3.插入进口封盖的边界条件为入口体积流量0.3m3/s,出口封盖的边界条件为环境压力。见图3:

图3 插入进口封盖的边界条件 4.该离心泵只有叶轮转动,而其余组件不参与旋转,因此需要将这些组件视为“定子”的真实壁面。选择插入边界条件,在打开的属性管理器中,选择盖子,在类型下选择“壁面”,设置为“真实壁面”,勾选“定子”。在全局旋转下,不参与旋转的组件必须视为“定子”。如图4所示:

首次适应算法 内存分配

操 作 系 统 实 验 报 告 课程名称:操作系统 实验题目:首次适应算法 姓名: **** 专业班级: *********** 学号: ************* 指导老师: *****

一、实验目的 在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。 二、实验要求 1.内存大小初始化 2.可以对内存区进行动态分配,采用首次适应算法来实现 3.可以对已分配的内存块进行回收,并合并相邻的空闲内存块。 三、实验内容 把一个作业装入内存,按照首次适应算法对内存区进行分配,作业结束,回收已分配给该作业的内存块,并合并相邻的空闲内存块。 四、实验结果 运行效果: 1.初始化内存区大小,并添加作业,选择1添加作业 2. 当作业大小超过存储块大小时,分配失败。 3.选择3,可查看内存分配情况 4.选择2回收内存 5.添加新作业 6.回收C作业,相邻的空闲内存块合并。 五、实验总结

首次适应算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始查找,直到找到一个大小能满足要求的空闲分区为止;然后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区仍留在空闲链中。若从链首到链尾都不能找到一个能满足要求的分区,则此次分配失败。这里,我采用数组的方式,模拟内存分配首次适应算法,动态的为作业分配内存块。可以根据作业名称回收已分配的内存块,当空闲内存块相邻时,则合并。 通过此次的实验,让我对内存分配中首次适应算法更加熟悉,在此基础上,我也测试最佳适应算法(best_fit)和最坏适应算法(worst_fit),并对其进行了比较分析,从比较中我发现,针对同一个问题,解决的方法不止一种,而且不同的方法所要消耗的资源和时间也不相同,根据不同的要求,方法的优劣也不同,可以说方法是解决问题的一种模式,随环境不同而体现出优越性。 六、实验附录 程序源代码: #include #include #include int neicun=200;//内存块默认大小 int fqNum=1;//已使用分区数目,进程数目=fqNum-1 #define number 100//进程数量 struct fqinfo//分区信息 { int start;//开始位置 int end;//结束位置 char name;//进程名称 int capactity;//进程大小或者分区块大小 int flag;//分区使用标记,0:未使用 1:已使用 2:回收或者合并的分区 3:尾部 }fqlist[number]; int init_neicun();//初始化内存大小 int first_fit(char name,int size);//首次适应算法 int fenpei();//为进程存储区 int showit();//显示进程 int menu();//功能菜单 int Memory_recovery();//内存回收 int exit();//退出系统

halcon学习笔记——实例篇 长度和角度测量+

halcon学习笔记——实例篇长度和角度测量实例二:长度和角度测量 素材图片: halcon代码: 1: *读取并截取图片 2: dev_close_window() 3: read_image (Image, 'D:/MyFile/halcon/长度和角度测量/图.png') 4: crop_rectangle1 (Image, ImagePart, 75, 0, 400, 400) 5: get_image_size (ImagePart, Width, Height) 6: dev_open_window (0, 0, Width, Height, 'black', WindowHandle) 7: dev_display (ImagePart) 8: 9: *获取图形的边界 10: threshold (ImagePart, Regions, 0, 112) 11: 12: *分离三角形和圆形

13: connection(Regions,ConnectedRegions) 14: sort_region(ConnectedRegions,SortedRegions,'upper_left','true','column') 15: select_obj(SortedRegions,Circle,1) 16: select_obj(SortedRegions,Triangle,2) 17: 18: *获取三角形各边的信息 19: skeleton(Triangle,TriangleSkeleton) 20: gen_contours_skeleton_xld(TriangleSkeleton,TriangleContours,1,'filter') 21: segment_contours_xld(TriangleContours,ContoursSplit,'lines_circles', 5, 4, 2) 22:select_contours_xld(ContoursSplit,SelectedContours, 'contour_length',100, 999, -0.5, 0.5) 23: fit_line_contour_xld (SelectedContours, 'tukey', -1, 10, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) 24: 25: *计算三角形角度 26:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], Angle1) 27:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle2) 28:angle_ll (RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle3) 29: Angle1:=abs(deg(Angle1)) 30: Angle2:=abs(deg(Angle2)) 31: Angle3:=abs(deg(Angle3)) 32: 33: *获取圆的信息 34: area_center(Circle,AreaCircle, RowCircle, ColumnCircle) 35: 36: *计算圆心到三角形各边的距离 37: Distance := [] 38:for Index := 0 to 2 by 1 39:distance_pl (RowCircle, ColumnCircle, RowBegin[Index], ColBegin[Index], RowEnd[Index], ColEnd[Index], ThisDistance) 40: Distance := [Distance,ThisDistance] 41: endfor

数字图像处理角点检测方法研究毕业论文

数字图像角点特征检测方法研究

目录 引言 (3) 1 研究背景与发展 (6) 1.1研究背景 (6) 1.2研究现状和发展概述 (6) 1.3应用软件M ATLAB (7) 2 角点检测概念与原理 (9) 2.1角点的定义 (9) 2.2角点概念及特征 (9) 2.3角点检测意义 (9) 2.4角点检测原理 (10) 2.5角点检测技术的基本方法 (10) 2.5.1 基于模板的角点检测 (10) 2.5.2 基于边缘的角点检测 (11) 2.5.3 基于灰度变化的角点检测 (13) 3 角点算法概述 (14) 3.1角点检测的标准 (14) 3.2H ARRIS角点检测算子 (14) 3.2.1 Harris角点检测算子流程图 (19) 3.2.2 Harris角点检测算子的特点 (20) 3.2.3 Harris角点检测性质 (20) 3.2.4 Harris和Moravec算子角点检测实验结果 (21) 3.3一种改进的H ARRIS的算法 (23) 3.3.1试验结果 (24) 3.4S USAN角点检测算子 (25) 3.3.1 SUSAN角点检测一般步骤 (27) 3.3.2 Susan角点检测算子特点 (29) 3.3.3 Susan角点检测试验结果 (29) 4 其他算子简介 (33) 4.1小波变换算子 (33) 4.2F ORSTNER算子 (33) 4.3CSS角点检测算法 (35) 4.4ACSS角点检测算法 (36) 4.5各种角点检测算法的比较 (36) 结论 (39) 致谢 (41)

参考文献 (42) 附录1 HARRIS算法程序 (44) 附录2 MORA VEC算法程序 (46) 附录3 改进的HARRIS算法 (48) 附录4 SUSAN算法程序 (50)

SW里的Flow Simulation散热分析实例教程

SW里的Flow Simulation散热分析实例教程 是一个SIMULATION的插件,我用过的版本中只有2011可以模拟。 大致方法如下:(现在电脑上的是2010,本本上的是2011,在家里了) 1.建模 2.装配 3.编辑材质 ————————分割线——————进入插件 4.进入Simulation功能模块 5.新算例中选择热力 6.设置对流 1.选择产品与空气接触面(多选,也可选择全部然后去掉没用的面) 2.温度开始时开氏的(K),就是热力学温度,开氏温度=摄氏温度+27 3.15°,你要什么样环境温度可以按照这个公式算一下 3.对流系数,不一样的环境系数不一样,老版本的传热学教材里注明,室内的空气的流通量较小,对流系数在5~8W/(m^2·℃,户外在8~15W/(m^2·℃,可根据使用环境进行设置。 7.热量设置,选择光热器件的面。在这里未必要画出LED,因为那样对于新手很难选到LED底部的,可在几班的模型上拉伸出LED底部面积大小的面,最终模拟出来后去加热阻来算LED结温。一般来讲,LED的功率消耗包括发光和产生热两部分的,正常应该是在30%的光+70%的热,光效不一样的话会有很微妙的影响,可忽略不计的,这里我建议不要这么去考虑,如10W的光源就按照产生10W的热去模拟,而不是7W。(此处30%、70%仅限参考) 8.划分网格,网格化分的越精细,模拟会相对精确,流体分析的模拟软件原理是一样的,有时间可以去了解一下。有一些小结构或者比较碎的结构可能造成网格划分失败,多是因为模型的局部有壁厚过薄或者两零件有干涉的情况,好好检查一下。 9.右键---新算例,上面有选项,稳态和瞬态,此处选择稳态,即达到热平衡后的结果。 10.计算模式哪里有三个选项,选择“D”开头的模式,具体名称忘记了。 11.点击运算 12.等··· 13.等··· 14.配置不好或模型较大的用户请重新启动计算机,双击Solidworks,返回到第一步重新开始。 我是这样做的,有高手觉得不妥的话欢迎指导!本打算图文并茂来着,但是电脑在家里,不好意思,就这样将就看吧,要是有什么问题的话,给我留言,但愿对各位有用! -———————————————————————— 补充: 设置的时候有个接触面的设置,那里会具体到两种材料的接触模式所产生的温差。 我们也可以把整个系统做的具体一点,如集胶体的厚度或硅胶垫的厚度都把它们拉出来,这样会更好一些。

首次适应算法,最佳适应算法,最坏适应算法源代码[宝典]

首次适应算法,最佳适应算法,最坏适应算法源代码[宝典] 首次适应算法,最佳适应算法,最坏适应算法源代码#include #include #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 640 //最大内存空间为640KBtypedef int Status; int flag; typedef struct freearea//定义一个空闲区说明表结构 { long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType; // 线性表的双向链表存储结构 typedef struct DuLNode { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList; DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status First_fit(int);//首次适应算法 Status Best_fit(int); //最佳适应算法 Status Worst_fit(int); //最差适应算法

void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表{ block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0; block_last->data.size=MAX_length; block_last->data.state=Free; return OK; } //分配主存 Status alloc(int ch) { int request = 0; cout<<"请输入需要分配的主存大小(单位:KB):"; cin>>request; if(request<0 ||request==0) { cout<<"分配大小不合适,请重试~"<

Harris角点检测算法编程步骤及示例演示

Harris角点检测算法编程步骤及示例演示 也不说那么多废话了,要介绍啥背景意义之类的,角点检测,顾名思义,就是检测角点,最简单的就是两条线的交点了,还有比如下国际象棋的棋盘格子的交点之类的,反正就是检测这些点。 简单将Harris角点检测算法的思想说下,就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。(1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化; (2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化; (3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。 下面给出具体数学推导: 设图像窗口平移量为(u,v),产生的灰度变化为E(u,v), 有E(u,v)=sum[w(x,y)[I(x+u,y+v)-I(x,y)]^2],其中w(x,y)为窗口函数, I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。 有泰勒公式展开可得: I(x+u,y+v)=I(x,y)+Ix*u+Iy*v+O(u^2,v^2); Ix,Iy分别为偏微分,在图像中为图像的方向导数. 因此E(u,v)=sum[w(x,y) [Ix*u+Iy*v+O(u^2,v^2)]^2], 可以近似得到E(u,v)=sum[w(x,y) [Ix*u+Iy*v]^2],即 E(u,v)=[u,v][Ix^2,Ix*Iy;Ix*Iy,Iy^2][u,v]T

令M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2],因此最后对角点的检测成了对矩阵M的特征值的分析了,令M其特征值为x1,x2; 当x1>>x2或者x2>>x1,则检测到的是边缘部分; 当x1,x2都很小,图像窗口在所有移动的方向上移动灰度级都无明显变化. 当X1,X2都很大时且相当,检测到的是角点。 编程时用x1,x2不方便,因此定义角点响应函数; R=det(M)-k(trace(M))^2; 其中det(M)为矩阵M的行列式,trace(M)为矩阵M的迹。 下面给出更具数学公式实际编程的步骤: 1.利用水平,竖直差分算子对图像的每个像素进行滤波以求得 Ix,Iy,进而求得M中的四个元素的值。 M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2] 2.对M的四个元素进行高斯平滑滤波,为的是消除一些不必要 的孤立点和凸起,得到新的矩阵M。 3.接下来利用M计算对应每个像素的角点响应函数R,即: R=det(M)-k(trace(M))^2; 也可以使用改进的R: R=[Ix^2*Iy^2-(Ix*Iy)^2]/(Ix^2+Iy^2);里面没有随意给定的参数k,取值应当比第一个令人满意。 4.在矩阵R中,同时满足R(i,j)大于一定阈值threshold和R(i,j)

首次适应算法和最佳适应算法-C++语言版

#include #include using namespace std; #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 512 //最大内存空间为512KB typedef int Status; int flag; typedef struct freearea//定义一个空闲区说明表结构{ long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType; // 线性表的双向链表存储结构 typedef struct DuLNode { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 } DuLNode,*DuLinkList; DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status First_fit(int);//首次适应算法 Status Best_fit(int); //最佳适应算法 void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL;

C45算法的源代码全解

)数据挖掘分类算法之决策树(zz Decision tree决策树()以实例为基础的归纳学习算法。决策树是 它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。它采 并根据不同的用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路属性值从径就对应着一条合取规则,整个决策树就对应着一组析取表达式规则。1986年又ID3算法的基础上,1993年QuinlanQuinlan提出了著名的ID3算法。在提出了若干改提出了C4.5算法。为了适应处理大规模数据集的需要,后来又SPRINT (scalable 进的算法,其中SLIQ(super-vised learning in quest)和是比较有代表性的两个算法。parallelizableinduction of decision trees) (1) ID3算法算法的核心是:在决策树各级结点上选择属性时,用信息增益 ID3)作为属性的选择标准,以使得在每一个非叶结点进行测(information gain 检测所有的属性,其具体方法是:试时,能获得关于被测试记录最大的类别信息。再对由该属性的不同取值建立分支,选择信息增益最大的属性产生决策树结点,直到所有子集仅包含同一各分支的子集递归调用该方法建立决策树结点的分支,类别的数据为止。最后得到一棵决策树,它可以用来对新的样本进行分类。某属性的信息增益按下列方法计算。通过计算每个属性的信息增益,并比较 它们的大小,就不难获得具有最大信息增益的属性。个m个不同值,定义mS 设是s个数据样本的集合。假定类标号属性具有中的样本数。对一个给定的样本分类所需si是类Ci不同类Ci(i=1,…,m)。设的期望信息由下式给出:为底,其原2Ci 其中pi=si/s的概率。注意,对数函数以是任意样本属于因是信息用二进制编码。个划分为v可以用属性A将Sv 设属性A具有个不同值{a1,a2,……,av}。aj上具有相同的值A,其中Sj中的样本在属性子集 {S1,S2,……,Sv}(j=1,2,……,v)。设sij是子集Sj中类Ci的样本数。由A 划分成子集的熵或信息期望由下式给出: 熵值越小,子集划分的纯度越高。对于给定的子集Sj,其信息期望为 其中pij=sij/sj 是Sj中样本属于Ci的概率。在属性A上分枝将获得的信息增益是 Gain(A)= I(s1, s2, …,sm)-E(A) ID3算法的优点是:算法的理论清晰,方法简单,学习能力较强。其缺点是:决策树可当训练数据集加大时,且对噪声比较敏感,只对比较小的数据集有效,能会随之改变。算法(2) C4.5 ID3 C4.5算法继承了算法的优点,并在以下几方面对ID3算法进行了改进:用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值1)

基于SolidWorks Flow Simulation的比例阀和真空泵的选型与优化

IM 软件世界 · 68 · 在真空泵和罐体之间装一台比例阀,比例阀和真空泵配合可改变抽速,保证罐内恒压。比例阀根据压力变化要求提供维持需要压力,比例阀与真空泵的选型多数靠经验来匹配,往往出现高能耗。通过SolidWorks Flow Simulation 对设备进行分析仿真,通过数据对比最优化的对比例阀与真空泵体的选型。 一、问题的提出 在真空设备和半导体设备中,常常有这样的工艺要求,某罐体内通入恒定流量的气体,并且保证罐体内恒压。通常采用方案是由一支流量计通入恒定流量的气体,出口连接一台真空泵抽气,在真空泵和罐体之间装一台比例阀, 这样比例阀和真空泵配合可改变抽速,保证罐内恒压。 图1 如图1所示是一款真空产品真空气路图,工作顺序如下。(1)首先关闭气动挡板阀-Φ100、电磁阀、流量计和电磁充气阀,比例阀开度100%,打开气动挡板阀-Φ16。基于SolidWorks Flow Simulation的比例阀和真空泵的选型与优化 撰文/北京七星华创电子股份有限公司工业炉分公司 张永军 北京盛维安泰系统技术有限公司 李跃超 (2)然后开启滑阀泵-70L /S 预抽真空,真空度抽至30000Pa 时关闭动挡板阀-Φ16,比例阀开度0%,开启气动挡板阀-Φ100。 (3)真空度抽至2000Pa 时,罗茨泵-300L /S 开启。(4)真空度抽至0.5Pa 时,关闭气动挡板阀-Φ100、罗茨泵-300L /S ,开启电磁阀、流量计,流量计保证0.5L /S 流量的氩气。 (5)达到0.6atm 时开启气动挡板阀-Φ16,比例阀,比例阀和真空泵组成闭环,由PLC 控制其开度。此设备大部分时间在此状况下工作。 在一个实例中,比例阀结构是通径Φ20的蝶阀,阀板在0°~90°转动,以实现0%~100%开启度。在保证0.6atm 恒压时,开启滑阀泵,比例阀开度8%。其8%~100%调节用不到,而且极不灵敏。我们判断比例阀通径选大了。选多大合适呢?结合SolidWorks Flow Simulation 模拟,让我们寻找合适的比例阀通径。 SolidWorks Flow Simulation 是一款比较经典的流体分析软件,它能解决流体流动分析、热分析、共轭传热、瞬态分析,并能作出漂亮视频、图片、图表及报表,且易学易用。除了软件本身向导式的操作流程之外,强大的数 据库可以让使用者减少搜集分析所需数据的工作量。更重要的是与CAD 的无缝集成,可以实现分析结果驱动CAD 参数。使用者无需单独创建流体域,网格划分也极大地减少了使用者的工作量。总之无论是软件的工程化界面,全中文的在线帮助文档,都是使工程师不花费过多的精力在

halcon+vb检测光学玻璃元件实例

halcon+vb检测光学玻璃元件实例发布于:2013-08-20 10:05 自然光下的玻璃元件实图 环型光源下的玻璃元件图 halcon 代码

open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -1, 'false', 'def ault', 'Microvision MV-1400UC Digital Camera', 0, -1, AcqHandle) *打开摄像头 grab_image_start (AcqHandle, -1) *开始铺货图像 grab_image_async (Image, AcqHandle, -1) *捕获第一帧图像 get_image_size (Image, Width, Height) *获得图像大小 dev_open_window (0, 0, Width/6, Height/6, 'black', WindowHandle) *打开适合大小的窗口,应为相机是1400万像素所以图想太大窗口被我缩小了。 while (true) *无限循环 try grab_image_async (Image, AcqHandle, -1) *捕获一帧图像 dev_display (Image) *显示图像 smooth_image(Image, ImageSmooth, 'deriche2', 0.5) *平滑图像 threshold (ImageSmooth, Regions,125, 255) *阈值处理 *这个表面有些灰尘呵呵不过可以当噪点过滤掉的 area_center (Regions, Area1, Row3, Column3) *获得区域中心点 gen_contour_region_xld(Regions, Contours, 'border_holes') *将阈值处理后获得的区域转换成xld smooth_contours_xld(Contours, SmoothedContours, 5) *平滑xld

基于SolidWorksFlowSimulation优化球阀结构

基于SolidWorksFlowSimulation优化球阀结构 摘要:应用SolidWorksFlowSimulation对一款球阀半载及满载状态下的直口型和圆口型两种球体启闭件进行对比,共设计了四个CFD项目:(1)半载+直口型;(2)半载+直口型;(3)半载+圆口型;(4)满载+圆口型。 一、引言 球阀因结构简单、密封性好,而且在一定的公称通径范围内体积较小、重量轻、材料耗用少、安装尺寸小且驱动力矩小,操作简便、易实现快速启闭,是近十几年来发展最快的阀门品种之一。其工作原理是:启闭件(球体)由阀杆带动,并绕方工球阀作轴线作旋转运动的阀门,可用于流体的调节与控制,其中硬密封V 型球阀其V型球芯与堆焊硬质合金的金属阀座之间具有很强的剪切力,特别适用于含纤维、微小固体颗料等介质。球阀的主要特点是本身结构紧凑,适用于水、溶剂、酸和天然气等一般工作介质,而且还适用于工作条件恶劣的介质,如氧气、过氧化氢、甲烷和乙烯等,在各行业得到广泛的应用。 二、项目描述 球阀在使用过程中,通过启闭件的旋转,控制流体的流量。因启闭件长期与流体接触,承受流体的冲压,容易磨损。为提高球阀的使用寿命,有两种方法:(1)选用耐磨性好的材料;(2)优化球阀内部结构,而结构设计是否合理,需要经过物理实验来验证。引入计算流体力学(ComputationalFluidDynamics,CFD)分析后,在做物理实验之前,需要借用流体分析来预测启闭件在使用过程中的与流体间的相互作用,以优化内部结构。为了更好地验证球阀在使用中流量、启闭件阀口状与流体之间的关系,本文以一款球阀为例,设计了四个CFD方案,运用SolidWorksFlowSimulation软件对其阀体进行CFD分析,以对比不同的阀口结构及流量下,各结构内的流体流进球阀内部流体流动状态,以达到优化球阀结构的目的。通过流体分析,可预测不同条件下,流体在球阀内的流动状态,通过对比选择较佳结构设计。此外,球阀的使用者一直有一个误解,认为若流体中夹杂了颗粒,提前过滤流体可有可无,只要增大流体流量,提高流速,就能把杂质冲走。通过粒子示踪等分析,粒子随流体进入球阀后,很难随流体全部带走,因此在球阀使用前,要对流体内的杂质进行过滤,十分必要。 球阀在使用过程中,流量可通过外部控制,为方便理解,按1kg/s为满载,0.5kg/s 为半载进行对比。目前市面上,球体启闭件大致也有两种结构,一种是直口型,一种是圆口型。为更好地进行对比,设计了四个CFD方案,如表1所示。

SolidWorks Flow Simulation在气流纺纱机中的应用

SolidWorks Flow Simulation在气流纺纱机中的应用 一、引言 气流纺纱机又叫转杯纺纱机,气流纺纱有速度大,纱卷大,适应性广,机构简单,不用锭子、钢领、钢丝圈的优点,可成倍地提高细纱的产量。在各种新型纺纱方法与技术中,气流纺纱由于其技术和产品的实用性,得到了大量的推广与应用。气流纺纱的基本工作原理是,将纤维随气流输送到高速回转的转杯内壁,在凝聚槽内形成纱尾,同时被加拈成纱引出,直接绕成筒子。 气流纺纱过程中输入的气流不是单一的空气气体,其中含有大量的纺织纤维,如何使用软件进行可视化的CFD模 拟分析,是非常具有挑战的问题。本文采用专业的计算流体动力学分析软件SolidWorksFlowSimulation对气流纺纱过 程进行数值模拟,分析了内部流体的速度场和压力场分布等,并通过粒子追踪方法,分析了纤维粒子的旋转流动过程。 二、模型组成及分析说明 气流纺纱机的原始模型含有密封垫、轴承、螺栓等部件,非常复杂。为方便计算分析,本文对原始模型进行了简化处理,其结构基本组成及坐标系如图1。 模型由定子、高速转子和外壳三部分组成。其中气流入

口在定子上,直径为1mm,入口流体的质量流率为 0.0002026kg /s,高速转子的转动速度为130000r/min,出 口处的压力边界条件为96325Pa。 首先,使用FlowSimulation分析不含纤维粒子的气体流动,实际问题中纤维对气体的影响忽略不计;然后在该气体流动迹线分析结果的基础上进行纤维粒子流动分析。 三、模型创建 1.初始设置 使用FlowSimulation中提供的自动向导创建功能,进行如下设定,国际制(SI)长度单位为mm,旋转速度单位为r/min,质量流率单位为kg/h;分析类型为内部流动,排除内部没有流动条件的空腔;流体类型为空气;默认初始条件;结果求解精度等级设为4,最小间隙设为1mm,其他默认设置。 2.边界条件 按图1所示设置入口和出口边界条件,入口质量流率为 0.73kg/h(图2),出口静压为96325Pa(图3),指定如图4所示的真实壁面旋转条件,指定旋转速度。 3.初始条件 为了加快收敛计算速度,设置壳体内部切向气体初始速度为40m/s。在FlowSimulation中通过设置两个方向的初始条件来实现,此处不再赘述。

操作系统-实验四动态分区分配算法源代码最全

实验四操作系统-动态分区分配算法萨斯的发生的v设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,P n,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,S m,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。 程序要求如下: 1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。 2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。 3)输入:空闲分区个数n,空闲分区大小P1, …,P n,进程个数m,进程需要的分区大小S1, … ,S m,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。 4)输出:最终内存空闲分区的分配情况。 代码实现: #include #include #include using namespace std; const int MaxNumber=100;

int FreePartition[MaxNumber];次适应算法 2.循环首次适应算法 3.最佳适应算法 4.最坏适应算法:"<>intput; c out<

相关文档
最新文档