勇哥的视觉实验:让镜头中心对准指定点


这个实验的目的是不用九点标定,让镜头中心移动对准视野内指的点上去。

本篇是对贴子九点自动标定---如何让相机视野中心十字对准目标物?的实验记录。


先写段halcon代码,配合xyz平台进行捕捉屏幕中心的像素坐标位置。

dev_close_window()
dev_open_window(0, 0, 612, 512, 'black', WindowHandle)
dev_set_draw('margin')
open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', '94aab8029638_Microvision_MVEM500M', 0, -1, AcqHandle)

while(1)
        *这里循环拍图,画辅助线以配合xyz平台,方便观察当前机械坐标位置是不是正确。
    grab_image (Image, AcqHandle)
    get_image_size(Image, Width, Height)
    dev_set_color('red')
    disp_line(WindowHandle, Height/2, 1, Height/2, Width)
    disp_line(WindowHandle, 0, Width/2, Height, Width/2)
    cy:=Height/2
    cx:=Width/2
    disp_circle(WindowHandle, cy, cx, 12)
   
    
    dev_update_off()
    gen_circle(Circle, cy, cx, 100.5)
    
    reduce_domain(Image, Circle, ImageReduced)
    threshold(ImageReduced, Region, 0, 55)
    connection(Region, ConnectedRegions)
    select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 2500, 20000)
    count_obj(SelectedRegions, Number)
    area_center(SelectedRegions, Area, Row, Column)
    dev_set_color('green')
    disp_cross(WindowHandle, Row, Column, 12, 0)
    dev_update_on()
    
    dev_disp_text(cy+','+cx, 'window', 20, 20, 'black', [], [])
    if(Number=1)
        
         dev_disp_text(Row+','+Column, 'window', 60, 20, 'black', [], [])
    endif
    dev_display(SelectedRegions)
    
endwhile

*这里是求t1,t2,t3三个圆心的像素坐标。可以手工把程序拖至这里运行。
gen_region_runs (ROI_0, [590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,625,626,626,627,627,628,628,629,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096], [1021,1020,1019,1012,1010,1008,1003,1003,1003,1002,1001,994,994,994,994,992,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,987,987,986,986,973,985,973,985,973,985,973,985,973,985,973,973,973,973,972,972,971,971,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,969,969,968,968,967,967,967,967,967,967,967,967,967,967,967,967,967,967,966,966,965,965,964,964,963,963,962,962,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,960,960,960,959,959,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,959,959,960,960,960,961,961,962,964,964,964,964,965,965,966,966,967,970,970,970,970,970,970,971,973,974,975,976,977,978,979,980,982,986,988,990,992,994,998,999,1000,1007,1008,1009,1011,1012,1013,1015,1017,1019,1020,1021,1031,1033,1034,1035,1036,1049,1052,1069,1070,1071], [1083,1084,1085,1095,1097,1099,1102,1105,1122,1123,1123,1127,1127,1127,1130,1130,1130,1130,1130,1130,1131,1131,1132,1132,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,974,1133,976,1133,978,1133,981,1133,983,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1134,1135,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1137,1137,1138,1138,1139,1139,1139,1139,1139,1139,1140,1141,1142,1144,1145,1145,1145,1145,1145,1145,1145,1147,1148,1148,1148,1148,1148,1148,1148,1148,1151,1152,1152,1153,1153,1154,1155,1155,1156,1156,1157,1157,1159,1160,1160,1160,1160,1160,1160,1160,1160,1160,1161,1161,1162,1162,1163,1163,1165,1166,1166,1166,1166,1167,1167,1168,1168,1169,1169,1169,1172,1172,1172,1173,1174,1175,1176,1177,1178,1178,1178,1179,1180,1184,1184,1184,1184,1184,1187,1188,1189,1190,1190,1190,1191,1192,1193,1195,1197,1199,1201,1202,1203,1203,1204,1204,1205,1208,1209,1210,1210,1210,1213,1215,1216,1216,1216,1216,1217,1218,1222,1223,1223,1224,1224,1225,1226,1227,1230,1234,1237,1237,1237,1237,1239,1241,1243,1245,1246,1247,1247,1248,1248,1249,1251,1253,1258,1259,1260,1261,1263,1267,1267,1267,1270,1271,1272,1273,1275,1276,1278,1280,1285,1287,1289,1299,1301,1311,1311,1311,1324,1327,1332,1333,1334,1335,1336,1337,1347,1349,1350,1350,1350,1353,1354,1355,1363,1366,1374,1375,1376,1378,1380,1385,1385,1385,1385,1386,1387,1391,1391,1391,1391,1391,1391,1392,1393,1395,1398,1400,1400,1400,1400,1400,1400,1400,1400,1400,1401,1402,1403,1404,1404,1405,1405,1406,1407,1408,1409,1409,1409,1409,1409,1409,1409,1410,1410,1411,1411,1411,1412,1412,1412,1412,1412,1412,1412,1413,1414,1415,1415,1415,1415,1415,1415,1415,1415,1415,1415,1415,1415,1415,1415,1416,1417,1418,1418,1418,1419,1420,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1421,1420,1419,1418,1418,1418,1418,1417,1417,1416,1416,1415,1415,1415,1415,1414,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1409,1408,1408,1407,1407,1406,1406,1406,1403,1403,1403,1402,1401,1400,1399,1399,1398,1397,1396,1395,1394,1390,1389,1388,1387,1386,1385,1383,1382,1381,1379,1377,1376,1375,1374,1372,1371,1364,1363,1362,1361,1360,1359,1359,1359,1348,1345,1342,1339,1336,1331,1329,1327,1325,1324,1323,1291,1287,1283,1280,1277,1266,1264,1262,1246,1242,1231,1226,1221,1216,1212,1194,1191,1188])
reduce_domain(Image, ROI_0, ImageReduced1)
threshold(ImageReduced1, Region1, 0, 50)
connection(Region1, ConnectedRegions1)
select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 2500, 40000)
area_center(SelectedRegions1, Area1, Row1, Column1)



close_framegrabber (AcqHandle)


在上面程序中,屏幕中心画有线色辅助十字线。

如果移动机械坐标到达圆面积范围内, 圆会显示绿色外圈和十字圆心位置。

我们要做的就是移动机械位置让十字对准圆心位置。

屏幕左上角第一行显示的是屏幕中心的像素坐标, 第二行显示的是圆心的像素坐标。


我们把机械点t1, t2, t3 设定为几何形状构成一个直角三角形。


这是t2点:

image.png

这是t1点:

image.png

这是t3点:

image.png


用上面程序辅助,微调了一下机械坐标, 得到t1,t2,t3点的机械坐标如下:

image.png

这3个机械坐标位置刚好让视野中心对到圆心上。


然后我们要求出三个圆心的像素坐标,怎么求呢?

image.png

如果直接走t1,t2,t3点然后求圆心的像素坐标,那是错误的, 那个求得都会是相同的值,都是视野中心的像素坐标值。

勇哥手绘roi真接求出这个三个圆心像素坐标。

image.png


image.png


按上面的数据排列如下表:

   像素坐标prow,pcol   机械坐标 mrow,mcol 
(t2) 717.809, 1056.37   -12.521, 1.108
(t1) 959.888, 1050.03   -0.731,  1.17
(t3) 965.689, 1293.25   -0.782,   -11.03

按下面的公式计算出每像素多少毫米,有宽与高两个方向。


W=(t3.mcol-t1.mcol)/(t3.pcol-t1.pcol)

    =(-11.03-1.17)/(1293.25-1050.03)

    =0.050160349

H=(t1.mrow-t2.mrow)/(t1.prow-t2.prow)

    =(-0.731-(-12.521))/(959.888-717.809)

    =0.048703109



现在勇哥想把屏幕中心移动到字母A的顶点上去。

image.png

鼠标直接指向A的顶点, 得到像素坐标为:

row,col:  953, 652


已经当前屏幕中心坐标为: 972,1296

这个点距离屏幕中心的像素距离是:

dstRow=972-953=19

dstCol=1296-652=644


这个距离是像素坐标,我们再乘以像素毫米:

dsty=19*H=19*0.048703109=0.925359071

因为这个A顶点的行坐标小于中心点坐标,所以dsty=-0.925359071

dstx=880*W=644*0.050160349=32.30326476


让平台走到这个点, 结果如下。

经验证y坐标约有0.2mm的误差,X结果较好。

cB2MtZ9xvQ.gif

image.png


勇哥总结一下:

上述实验没有用九点标定, 仅仅靠三点之间的机械距离比上像素距离,求出每像素对应的机械坐标当量(mm)

然后就可以用视野内任意一点的x,y值乘以这个像素当量,求出机械位置。

这种做法相当于是做了一维标定,而九点标定做的是二维标定(一个面)。显然后者要更精确。



--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864