制作標定板——Matlab編程實現

      網友投稿 1370 2022-05-28

      前言

      傳感器其標定時,需要用到標定板;可能是單傳感器標定,例如:攝像頭標定,獲取內參??赡苁嵌鄠鞲衅髦g標定,最近在做感知融合,需要激光雷達和攝像頭標定,本文記錄下使用matlab,來制作標定板。

      一、編程基礎

      核心函數:checkerboard( )

      使用方式有三種,分別如下:

      I = checkerboard;

      I = checkerboard(n);

      I = checkerboard(n,r,c);

      含義解釋: n是指每個格子的像素大??;r 是指行數;c 是指列數。

      二、基本版——實現效果

      2.1)I = checkerboard;

      代碼如下:默認創建一個8*8的矩陣,像素是10;

      figure; I = checkerboard; imshow(I)

      其中,figure 是指創建一個面板,待會用來顯示標定圖;imshow(I) 就是顯示的作用啦。

      I 本質是一個矩陣;大小是80*80;用size函數可以查看的,即:size(I)

      2.1)I = checkerboard(n);

      代碼如下:默認創建一個8*8的矩陣,像素是n,可以自由設定,但需要是正整數,比如20;

      figure; I = checkerboard(20); imshow(I)

      3)I = checkerboard(n,r,c);

      代碼如下:創建一個黑色格子、白色格子哥2行3列的棋盤格,即4*6的矩陣,像素是100;

      制作標定板——Matlab編程實現

      figure; I = checkerboard(100, 2, 3); imshow(I)

      三、進階版—消除灰色部分

      創建一個黑色格子、白色格子哥2行3列的棋盤格,即4*6的矩陣,像素是100;沒有灰色效果:

      代碼如下:

      figure; I = checkerboard(100,2,3); K = (I > 0.5); imshow(K);

      四、保存標定板

      主要函數是:imwrite( )

      代碼如下:

      figure; I = checkerboard(100,2,3); K = (I > 0.5); imshow(K); imwrite(K,'cher_2_3.jpg');

      保存標定板所在的位置,在顯示的畫面,點擊另存為,就可以查看標定板保存的路徑。

      注意:使用imwrite( )函數保存生成的標定板圖片;不要直接使用另存為的圖片;如果問為什么?建議嘗試一下,會發現另存為的圖片,會改變原格式的,即標定板的像素被改變了。

      五、進階版—符合規格的標定板

      首先觀察下這兩個標定板的差別:

      偶數 * 奇數;棋盤格中,其中一個邊包含偶數個正方形,另一邊包含奇數個正方形。

      偶數 * 偶數;棋盤格中,其中一個邊包含偶數個正方形,另一邊也是包含偶數個正方形。

      通常參考官方的指南,只能生成偶數 * 偶數 的棋盤格;看網上大多數的教程,都是這種。

      官方標定板的指南:https://ww2.mathworks.cn/help/images/ref/checkerboard.html

      但是,在標定工作中,對標定板是有要求的,比如需要:棋盤格標定板,其中一個邊包含偶數個正方形,另一邊包含奇數個正方形。方形圖案可以為相機外在元素產生意想不到的結果。比如:標定板的方向可能檢測不正確。

      這個問題也困惑了我2個小時,才解決了,分享一下。

      六、偶數 * 奇數棋盤格—標定板

      明亮的一半是符合奇偶數邊的要求;

      figure; I = checkerboard(100,5,9); imshow(I); imwrite(I,'cher.jpg');

      先思考下,創建棋盤格的核心函數是checkerboard( );創建出來的對象,本質是一個矩陣;那就好解決啦,先觀察矩陣規律,然后提取或分割就可以啦。

      查看I的尺寸:(本來的大小)

      >> size(I)

      ans =??1000 ???????1800

      然后,截取矩形中的一半就可以啦。

      分割出來

      figure; I = checkerboard(100,5,9); imshow(I(:,1:900)); imwrite(I(:,1:900),'cher.jpg');

      通用代碼

      生成10行 9列的棋盤格-標定板

      boardsize = 100; % 每個格子大小,單位:像素 r = 10; % 行數 c = 9; % 列數 % 下面進行制止棋盤格 figure; I = checkerboard(boardsize, r/2, c); imshow(I(:,1:boardsize*c)); imwrite(I(:,1:boardsize*c),'cher.jpg');

      標定板符合matlab標準:

      https://ww2.mathworks.cn/help/lidar/ug/lidar-camera-calibration-guidelines-and-procedure.html

      A3紙大小,生成8行 5列的棋盤格-標定板

      boardsize = 620; % 每個格子大小,單位:像素 r = 8; % 行數 c = 5; % 列數 % 下面進行制止棋盤格 figure; I = checkerboard(boardsize, r/2, c); imshow(I(:,1:boardsize*c)); imwrite(I(:,1:boardsize*c),'cher_8_5_ok.jpg');

      標定板符合matlab標準:

      https://ww2.mathworks.cn/help/lidar/ug/lidar-and-camera-calibration.html

      如果覺得不錯點個贊啦;歡迎交流~

      MATLAB

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:VMware 虛擬化編程(1) — VMDK/VDDK/VixDiskLib/VADP 概念簡析
      下一篇:VMware 虛擬化編程(13) — VMware 虛擬機的備份方案設計
      相關文章
      亚洲美女高清一区二区三区| 亚洲av永久无码精品天堂久久| 亚洲乱亚洲乱妇24p| 亚洲国产日产无码精品| 亚洲AV无码乱码在线观看富二代| 亚洲精品高清国产一线久久| 亚洲色婷婷六月亚洲婷婷6月| 亚洲一区二区三区在线观看精品中文 | 亚洲av无码专区在线电影天堂 | 亚洲国产成人手机在线电影bd| 亚洲精品福利网站| 亚洲国产成人久久综合一区| 久久亚洲AV成人出白浆无码国产| 激情内射亚洲一区二区三区| 久久亚洲熟女cc98cm| 亚洲精品日韩专区silk| 亚洲不卡视频在线观看| 亚洲国产成人久久三区| 亚洲六月丁香六月婷婷色伊人| 亚洲国产精品美女| 亚洲 日韩经典 中文字幕| 香蕉大伊亚洲人在线观看| 亚洲精品乱码久久久久久V| 亚洲国产精品精华液| 亚洲欧美精品午睡沙发| 日日摸日日碰夜夜爽亚洲| 亚洲中文字幕久久精品无码VA| 亚洲欧美日韩久久精品| 国产精品亚洲专一区二区三区| 无码专区一va亚洲v专区在线| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚洲精品无码专区久久久| 亚洲AV人无码综合在线观看| 亚洲视屏在线观看| 亚洲一级免费毛片| 亚洲AV永久无码精品网站在线观看 | 国产成人精品日本亚洲直接| 成人亚洲国产va天堂| 国产亚洲福利精品一区二区| 亚洲综合网站色欲色欲| 亚洲福利视频一区|