我正在尝试学习相机姿势估计并且已经经历了相当多的材料。我想使用标准A4上设置的QR码(快速响应代码)来计算相机的姿势:
A0 A1
B0 B1
C0 C1
这是我在MATLAB中编写的一个简短代码,用于获取世界点的坐标,我假设左下角是(0,0)
n=2; %number of qr in x direction
m=3; %number of qr in y direction
x_FE=50; %distance from left edge to point1 in mm
y_FE=270; %distance from bottom to top qr code
sqr_dist=27.6; %distance between qr codes [mm]
sqr_size=47.4; %size of qr code height or width [mm]
QRnames=['A0'; 'A1';'B0'; 'B1';'C0'; 'C1'];
for i=1:n %number of squares in x directions
x1(i)=x_FE+sqr_dist*(i-1);
x2(i)=x_FE+sqr_size+sqr_dist*(i-1);
end
for j=1:m %number of squares in y directions
y1(j)=y_FE-sqr_dist*(j-1);
y2(j)=y_FE-sqr_size-sqr_dist*(j-1);
end
n=1;
for k=1:3 %qr in y direction
for j=1:2 %qr in x direction
p1=[x1(j),y1(k)]
p2=[x1(j),y2(k)]
p3=[x2(j),y2(k)]
p4=[x2(j),y1(k)]
varname1=(['p' int2str(i)]);
varname2=(['x' int2str(j)]);
varname3=(['y' int2str(j)]);
eval([QRnames(n) int2str(j-1) 'w=[p1 p2 p3 p4]' ';' ]);
n=n+1;
end
end
我也用尺子测量坐标
使用名为ZBar的Python脚本,它是一个QR码阅读器。我可以从二维码中嵌入二维码中提取图像坐标(我认为)。
坐标保存在以这种方式设置的.txt文件中
QRcode名称x1 y1 x2 y2 x3 y3 x4 y4
以下是图片:http://imgur.com/a/xPkWB#0
这里有一些结果坐标:
IMAGE2
A0 452 495 454 878 836 878 834 493
B0 455 1099 453 1479 836 1477 836 1099
B1 1056 1099 1056 1477 1442 1481 1442 1096
C0 449 1702 444 2091 831 2093 833 1700
C1 1056 1701 1056 2095 1447 2102 1445 1706
A1 1057 491 1057 878 1443 873 1445 485
图像3
A1 1046 375 1051 737 1417 725 1412 364
B0 479 955 482 1316 848 1310 843 950
A0 475 389 477 747 841 740 835 379
B1 1053 946 1058 1307 1426 1302 1421 938
C1 1061 1518 1066 1895 1444 1895 1432 1517
C0 481 1528 479 1901 851 1896 848 1521
image8
A0 528 484 483 738 879 728 891 476
A1 1104 472 1109 728 1512 716 1473 463
B0 452 906 389 1240 852 1237 870 899
B1 1113 896 1119 1234 1595 1226 1540 884
C0 343 1472 248 1957 809 1953 839 1465
C1 1126 1463 1139 1952 1717 1955 1633 1461
图像9
A0 2040 560 1741 553 1818 812 2138 811
B0 1562 548 1242 537 1282 806 1625 809
A1 2200 977 1866 980 1969 1311 2325 1301
C0 1047 528 691 515 689 797 1073 804
B1 1665 979 1308 984 1359 1328 1751 1318
C1 1090 983 685 985 677 1359 1119 1340
image10
A1 562 823 943 814 993 517 643 531
B1 1169 805 1571 793 1574 484 1201 504
A0 393 1409 835 1410 907 1010 506 1017
C1 1819 782 2268 768 2209 449 1801 471
B0 1098 1408 1571 1410 1570 997 1146 1003
C0 1862 1415 2390 1420 2309 982 1833 991
以下是我使用过的相机的信息(ipod touch 5.gen):
ExposureTime: 0.0167
FNumber: 2.4000
ExposureProgram: 'Normal program'
ISOSpeedRatings: 32
ExifVersion: [4x1 double]
DateTimeOriginal: '2013:11:23 11:44:52'
DateTimeDigitized: '2013:11:23 11:44:52'
ComponentsConfiguration: 'YCbCr'
ShutterSpeedValue: 5.9069
ApertureValue: 2.5261
BrightnessValue: 5.9402
MeteringMode: 'Pattern'
Flash: [1x148 char]
FocalLength: 3.3000
SubjectArea: [4x1 double]
MakerNote: [196x1 double]
SubsecTimeOriginal: '317'
SubsecTimeDigitized: '317'
FlashpixVersion: [4x1 double]
ColorSpace: 'sRGB'
CPixelXDimension: 1936
CPixelYDimension: 2592
SensingMethod: 'One-chip color area sensor'
SceneType: 'A directly photographed image'
ExposureMode: 'Auto exposure'
WhiteBalance: 'Auto white balance'
DigitalZoomRatio: 1.0021
FocalLengthIn35mmFilm: 33
SceneCaptureType: 'Standard'
UnknownTags: [3x1 struct]
和有关第一个测试图像的信息
信息= imfinfo( 'testimage1002.jpg')
info =
Filename: 'D:\dropbox\Dropbox\campose\testimage_1\testimage1002.jpg'
FileModDate: '23-Nov-2013 11:45:16'
FileSize: 1188331
Format: 'jpg'
FormatVersion: ''
Width: 1936
Height: 2592
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
Make: 'Apple'
Model: 'iPod touch'
Orientation: 1
XResolution: 72
YResolution: 72
ResolutionUnit: 'Inch'
Software: '7.0.4'
DateTime: '2013:11:23 11:45:16'
YCbCrPositioning: 'Centered'
DigitalCamera: [1x1 struct]
GPSInfo: [1x1 struct]
ExifThumbnail: [1x1 struct]
我读了.txt文件并按照这个设置
txt=fopen('testimage1002.txt');
datascan01=textscan(txt,'%s%f%f%f%f%f%f%f%f');
QRname01=[datascan01{1}];
x1=[datascan01{2}];
y1=[datascan01{3}];
% point 2
x2=[datascan01{4}];
y2=[datascan01{5}];
% point 3
x3=[datascan01{6}];
y3=[datascan01{7}];
% point 4
x4=[datascan01{8}];
y4=[datascan01{9}];
p1=0;p2=0;p3=0;p4=0;
for n=1:length(datascan01{1})
for i=1:4
for j=1:4
varname1=(['p' int2str(i)]);
varname2=(['x' int2str(i)]);
varname3=(['y' int2str(i)]);
varname4=([QRname01{n}]);
eval(['p' int2str(i) '=[x' int2str(i) '(n)' ' y' int2str(i) '(n)];'])
eval([varname4 '=[p1 p2 p3 p4]' ';' ]);
end
end
end
现在,我有图像坐标和世界坐标,想要找到拍摄图像时相机的站立方式。
我看过Jean-Yves Bouget的相机校准工具箱,但无法弄清楚如何使用QR码使用这些功能
还查看了“在相应的3D点之间寻找最佳旋转和平移”(http://nghiaho.com/?page_id=671)
但是得到的旋转矩阵,平移向量和rmse似乎是错误的。 (得到rmse = 440?)
校准矩阵
%图像分辨率:2592 x 1936像素
ImgRes = [2592 1936];%pixels
Focallength = 3.3; %mm
%---校准结果--- %焦点(像素) -
Fx = 2329.13;
Fy = 2324.04;
%光学中心 -
Cx = 1307; Cy = 950.382;
%径向失真(布朗模型) K1 = 0.236384;
K2 = -0.680501;
K3 = 0;
P1 = 0.000319648;
P2 = 0.000751849;
%像素大小fx = f / sx
SX =长焦点/ FX;
SY =长焦点/ Fy的;
失真= [K1 K2 K3 P1 P2];
关于我如何做到这一点的任何想法(希望在matlab中)?感谢所有帮助
答案 0 :(得分:0)
来自Peter Corke的Matlab的Machine Vision Toolbox使用了manual第38页所述的方法CentralCamera.estpose
。
帮助说:
CentralCamera.estpose
估算物体模型和相机视图中的姿势
T = C.estpose(xyz, uv)
是对所定义物体姿态的估计 通过坐标xyz
(3 x N)在其自己的坐标系中。uv
(2 x N)是 相应的图像平面坐标。参考“EPnP:准确 O(n)对PnP问题的解决方案“,V。Lepetit,F。Moreno-Noguer,and P. Fua,Int。计算机视觉杂志,第一卷。 81,pp.155-166,Feb。 2009。
自从你写了
在我看来,你可以使用该功能来估计姿势。现在,我有图像坐标和世界坐标,想找到 拍摄图像时相机如何站立。