hal 识别

* ------------------------------------------------------------------------------------------------
* This example program introduces HALCON's shape-based matching.
* ------------------------------------------------------------------------------------------------
* general configuration of HDevelop
dev_update_window ('off')
* image acquisition and window size
*read_image (ModelImage, 'E:/0205/0205bmp/01.bmp')
*读取标准图片C:/Users/Administrator/Desktop/001.bmp---C:/Users/LMF/Desktop/6010.bmp
read_image (ModelImage, 'C:/Users/Administrator/Desktop/001.bmp')

*得到图形的尺寸和类型
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 ('yellow')
dev_set_draw ('margin')
dev_set_line_width (2)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*---------------绘制ROI---模型的标准轮廓,作为基准---------
* gen_region_runs (ROI, [88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297], [816,814,812,810,809,807,805,803,801,800,798,796,794,793,791,789,787,786,784,782,780,779,777,775,773,771,770,768,766,764,763,761,759,757,756,754,752,750,749,747,745,743,741,740,738,736,734,733,731,729,727,726,724,722,720,718,717,715,713,711,710,708,706,704,703,701,699,697,696,694,692,690,688,687,685,683,681,680,678,676,674,673,671,669,667,666,664,662,660,658,657,655,653,651,650,648,646,644,643,641,639,637,636,634,632,630,628,627,625,623,621,620,618,616,614,613,611,609,607,605,604,602,600,598,597,595,593,591,590,588,586,584,583,581,579,577,575,574,572,570,568,567,565,563,561,560,558,556,554,553,551,549,547,545,544,542,540,538,537,535,533,531,530,528,526,524,522,521,519,517,515,514,512,510,508,507,505,503,501,500,498,496,494,492,491,489,487,485,484,482,480,478,477,475,473,471,470,468,466,464,462,461,459,457,455,454,474,512,551,589], [816,815,814,813,812,811,810,809,808,807,806,805,804,803,802,801,800,799,798,797,796,795,794,793,792,791,790,789,788,787,786,785,784,783,782,781,780,779,778,777,776,775,774,773,772,771,770,769,768,767,766,765,764,763,762,761,760,759,758,757,756,755,754,753,752,751,750,749,748,747,746,745,744,743,742,741,740,739,738,737,736,735,734,733,732,731,730,729,728,727,726,725,724,723,722,721,720,719,718,717,716,715,714,713,712,712,711,710,709,708,707,706,705,704,703,702,701,700,699,698,697,696,695,694,693,692,691,690,689,688,687,686,685,684,683,682,681,680,679,678,677,676,675,674,673,672,671,670,669,668,667,666,665,664,663,662,661,660,659,658,657,656,655,654,653,652,651,650,649,648,647,646,645,644,643,642,641,640,639,638,637,636,635,634,633,632,631,630,629,628,627,626,625,624,623,622,621,620,619,618,617,616,615,614,613,612,611,610,609,608])
threshold (ModelImage, ROI, 0, 100)
* -------------------  start of the application  ----------------
* step 1: select the model object
*第一步,选择模型物体ROI...每次换一个零件,换一个形状,都需要变化这个ROI,并且记得将ROI重新命名。
dev_display (ROI)
*reduce_domain减少其他,得到ROI的部分内容
reduce_domain (ModelImage, ROI, ImageROI)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* step 2: create the model
*第二部,创建模型
inspect_shape_model (ImageROI, ShapeModelImages, ShapeModelRegions, 8, 30)
area_center (ImageROI, AreaModelRegions01, RowModelRegions01, ColumnModelRegions01)
disp_cross(WindowHandle, RowModelRegions01, ColumnModelRegions01, 20, 0)
dev_clear_window ()
dev_set_color ('blue')
dev_display (ShapeModelRegions)
*得到每个模型区域的中心
area_center (ShapeModelRegions, AreaModelRegions, RowModelRegions, ColumnModelRegions)

*得到面积重心,将其用x标记
disp_cross(WindowHandle,RowModelRegions, ColumnModelRegions,20,0)
*得到金字塔模型的个数
count_obj (ShapeModelRegions, HeightPyramid)
for i := 1 to HeightPyramid by 1
    if (AreaModelRegions[i - 1] >= 15)
        NumLevels := i
    endif
endfor
*前面是做好匹配的准备,下面是创建一个形状匹配的模型
create_shape_model (ImageROI, 4, 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)
*获得形状模型的轮廓
get_shape_model_contours (ShapeModel, ModelID, 1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
* step 3: find the object in other images
for i := 1 to 2 by 1
    *读取待匹配的图像
    read_image (ModelImage01, 'C:/Users/Administrator/Desktop/001copy.bmp')
    *寻找到匹配的模型
    *参数分别是行、列和角度的偏移,这个角度是逆时针旋转,以弧度为单位。
    *注意这个查找的相似度,如果相似度要求0.9,太高,可能找不到,如果是0.5太小,又不够准确,
    *因此需要设置好,多次尝试,找到合适的值    find_shape_model (ModelImage01, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.6, RowCheck, ColumnCheck, AngleCheck, Score)

    find_shape_model (ModelImage01, ModelID, 0, rad(360), 0.2, 1, 0.5, 'least_squares', 0, 0.6, RowCheck, ColumnCheck, AngleCheck, Score)
   *在中心打X
   
    disp_cross(WindowHandle, RowCheck, ColumnCheck,50,1)
    if (|Score| == 1)
        dev_set_color ('yellow')
        *算子vector_angele_to_grid
        vector_angle_to_rigid (0, 0, 0, RowCheck, ColumnCheck, AngleCheck, MovementOfObject)
       *将模板的形状,用得到的旋转矩阵进行变化,得到工件的位置。得到验证
        affine_trans_contour_xld (ShapeModel, ModelAtNewPosition, MovementOfObject)
        dev_display (ModelImage01)
        dev_display (ModelAtNewPosition)
    endif
    if (i != 20)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    
dev_set_color ('red')
disp_line(WindowHandle,[5, 5],[5,5],[5,50],[50,5])
disp_arrow(WindowHandle,[5,5],[5,5],[5,50],[50,5],1.0)
set_tposition (WindowHandle,2, 55)
write_string (WindowHandle, 'Y')
set_tposition (WindowHandle,40, 8)
write_string (WindowHandle, 'X')

dev_set_color ('green')
disp_line(WindowHandle,[RowModelRegions01, RowModelRegions01-150],[ColumnModelRegions01-150,ColumnModelRegions01],[RowModelRegions01, RowModelRegions01+150],[ColumnModelRegions01+150,ColumnModelRegions01])
disp_arrow(WindowHandle,[RowModelRegions01,RowModelRegions01],[ColumnModelRegions01,ColumnModelRegions01],[RowModelRegions01,RowModelRegions01+150],[ColumnModelRegions01+150,ColumnModelRegions01],1.0)
set_tposition (WindowHandle,218, 784)
write_string (WindowHandle, 'Y')
set_tposition (WindowHandle,354, 624)
write_string (WindowHandle, 'X')

disp_cross(WindowHandle, RowCheck, ColumnCheck,10,1)
disp_line(WindowHandle,[RowModelRegions01],[ColumnModelRegions01],[RowCheck],[ColumnCheck])

    stop ()
endfor
* -------------------  end of the application  -----------------
* clean up

clear_shape_model (ModelID)
dev_update_window ('on')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值