我的立體相機的分辨率不同,分辨率爲1280x480,640x240和320x120。 (相機流同步對圖像640X480水平粘貼,這就是爲什麼是1280x480)。在立體聲校準中,如果更改立體相機的分辨率,外置矩陣如何變化
我已經在以下link中使用了Opencv3立體校準算法來校準分辨率爲1280 * 480的立體相機。
stereoRectify(M1, D1, M2, D2, img_size, R, T, R1, R2, P1, P2, Q, CALIB_ZERO_DISPARITY, -1, img_size, &roi1, &roi2);
Mat map11, map12, map21, map22;
initUndistortRectifyMap(M1, D1, R1, P1, img_size, CV_16SC2, map11, map12);
initUndistortRectifyMap(M2, D2, R2, P2, img_size, CV_16SC2, map21, map22);
Mat img1r, img2r;
remap(img1, img1r, map11, map12, INTER_LINEAR);
remap(img2, img2r, map21, map22, INTER_LINEAR);
的stereoRectify計算左和右相機之間的旋轉矩陣R,平移矩陣T。並且,它計算兩個旋轉矩陣R1,R2和兩個投影矩陣P1 P2。我使用了stereoRectify的輸出作爲initUndistortRectifyMap的輸入,然後重新映射以應用投影。
這是一個stackoverflow答案來解釋如何做到這一點。
現在我已經得到了左映射11,映射12和右映射映射21,映射22的整形映射的兩個矩陣。但現在我想使用這些相機矩陣M1和M2,失真矩陣D1和D2以及外在矩陣R,T,R1,R2,P1和P2來以較低分辨率(320x120)對圖像進行糾正。 PS我沒有用320 * 120的分辨率直接校準相機,因爲圖像太小,Opencv的算法找不到棋盤角落來執行校準。我知道「失真係數並不取決於觀看的場景,因此它們也屬於固有的相機參數,而且不管拍攝的圖像分辨率如何,它們都保持不變,例如,如果相機具有已經在320 x 240分辨率的圖像上進行了校準,對於來自同一相機的640 x 480圖像,可以使用完全相同的失真係數,而f_x,f_y,c_x和c_y需要適當縮放。「 根據the documentation of opencv。 (我測試過,它正在工作)
我想知道:我應該如何修改R,T,R1,R2,P1,P2的矩陣以從1280x480到320x120的較低分辨率進行重映射?