摘要:實(shí)驗(yàn)室技能控制相機(jī)利用程序控制相機(jī)采集圖片可以實(shí)現(xiàn)采集任務(wù)的自動(dòng)化,極大地提高實(shí)驗(yàn)效率。安裝相機(jī)控制軟件下載并安裝預(yù)備資源中的相機(jī)控制軟件。安裝之后會(huì)解壓控制相機(jī)所需要的文件。
??利用程序控制相機(jī)采集圖片可以實(shí)現(xiàn)采集任務(wù)的自動(dòng)化,極大地提高實(shí)驗(yàn)效率。本文將系統(tǒng)性地介紹如何掌握這一技能。從環(huán)境配置 -> GUI界面使用 -> 腳本編寫(xiě) -> 項(xiàng)目實(shí)踐幾大方面進(jìn)行介紹。PCO有三種可支持的matlab控制方法——adaptor、flim package和sdk,本文主要介紹方便實(shí)用的adaptor方法(特別感謝課題組袁海明同學(xué)的幫助)。本文所介紹的邏輯思路也適用于其它相機(jī)的控制(不限于PCO相機(jī))。
為了檢驗(yàn)?zāi)闶欠裾莆樟诉@一技能,可以通過(guò)解決以下問(wèn)題來(lái)檢驗(yàn):
該技巧的特點(diǎn):
備注:如果已經(jīng)熟練配置環(huán)境,可以直接跳過(guò)第二節(jié)。
?
??正常工作之前,需要配置好matlab控制PCO所需要的環(huán)境,其基本流程如下:
環(huán)境配置很簡(jiǎn)單,下面給出了具體配置時(shí)的中間過(guò)程,如果能理解其意思可以迅速跳過(guò)。
??下載并安裝預(yù)備資源中的PCO相機(jī)控制軟件camware。首先確保能在PCO相機(jī)控制軟件下正常采集到圖片:
??測(cè)試完相機(jī)控制軟件,就說(shuō)明相機(jī)與電腦之前的串口通信是正常的。接下來(lái)下載并安裝預(yù)備資源中的PCO的matlab配套包。安裝之后會(huì)解壓matlab控制相機(jī)所需要的文件。安裝后的文件如下:
??該安裝包支持三種matlab控制相機(jī)的方式,本文主要介紹adaptor的方式。
??打開(kāi)上一節(jié)安裝的adaptor文件夾,其中“readme.txt”介紹了配置流程。
整理一下需要配置的內(nèi)容包括:
(1) 安裝附加工具包“MinGW-w64”編譯器
流程:點(diǎn)擊matlab菜單欄主頁(yè) -> 點(diǎn)擊附加功能 -> 搜索安裝“MinGW-w64”(可能需要登錄mathwork的賬戶(hù),沒(méi)有注冊(cè)一個(gè)即可);
(2) 安裝附加工具包“image acquisition toolbox”
流程:點(diǎn)擊matlab菜單欄主頁(yè) -> 點(diǎn)擊附加功能 -> 搜索安裝“image acquisition toolbox”;
(3) 在matlab命令窗口輸入“pco_imaqregister”,它會(huì)自動(dòng)安裝所需的dll文件
設(shè)置adaptor文件夾作為當(dāng)前matlab的路徑,然后在命令行窗口運(yùn)行“pco_imaqregister”;
(4) 在命令行輸入“imaqhwinfo”來(lái)檢驗(yàn)環(huán)境是否配置成功
如果運(yùn)行上述指令后,彈出的結(jié)果中InstalledAdaptors:有內(nèi)容,則說(shuō)明環(huán)境配置成功,接下來(lái)就可以實(shí)現(xiàn)matlab控制PCO了。
?
??在環(huán)境配置成功后,打開(kāi)matlab菜單欄app中“image acquisition”工具包,會(huì)彈出matlab的相機(jī)控制窗口。熟練掌握這一技能是后面靈活編寫(xiě)代碼的關(guān)鍵,往后需要設(shè)置的指令都可以直接從GUI的操作中查找。如下圖所示,筆者已對(duì)關(guān)鍵信息做出標(biāo)注。
特點(diǎn):
??在熟練掌握GUI操作的基礎(chǔ)上,我們就可以根據(jù)指令提示編寫(xiě)自己的相機(jī)控制腳本了。其基本流程主要如下:
根據(jù)上述流程和GUI的指令提示,我們可以編寫(xiě)出如下最簡(jiǎn)單的采集程序:
% control camera by matlab codeclc,clearclose all% get sourcevid = videoinput("pcocameraadaptor_r2020a", 0, "USB 3.0");src = getselectedsource(vid);% initialize camera propertiesvid.FramesPerTrigger = 1; % setting the collecting number in each triggersrc.E1ExposureTime_unit = "us"; src.E2ExposureTime = 10000;% collecting imagesstart(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerendimg = getdata(vid);% save and display imagemkdir("./images");imwrite(img,"./images/test.tif");imshow(img);% close viddelete(vid);
程序的運(yùn)行結(jié)果如下,可以靈活便捷地采集到不同的圖像:
??在這個(gè)程序中,采集指令其實(shí)只有中間的三行代碼,其余部分都是屬性設(shè)置或者保存顯示文件。因此,在這個(gè)框架下,我們可以非常靈活地編寫(xiě)自己的采集程序,并且可以增加圖像處理算法到程序中。下一節(jié)將介紹幾種應(yīng)用此框架的編程實(shí)例。
?
??本項(xiàng)目旨在通過(guò)算法實(shí)現(xiàn)相機(jī)的自動(dòng)曝光,從而適應(yīng)不同亮度的拍照環(huán)境,特別是對(duì)于亮度變化迅速的應(yīng)用場(chǎng)景。以調(diào)節(jié)鏡頭的光圈作為場(chǎng)景亮暗的變化模擬,本項(xiàng)目程序的運(yùn)行結(jié)果如下。在改變光圈大小后(模擬場(chǎng)景亮度變化),程序能夠自動(dòng)地調(diào)整曝光時(shí)間,使得采集圖像的強(qiáng)度分布充滿(mǎn)相機(jī)整個(gè)動(dòng)態(tài)范圍,從而實(shí)現(xiàn)最大動(dòng)態(tài)范圍的利用率。
大光圈的結(jié)果:
小光圈的結(jié)果:
該自動(dòng)曝光模型具有以下特點(diǎn):
??問(wèn)題核心:如果相機(jī)曝光時(shí)間不合適,可能會(huì)造成圖像過(guò)暗或者過(guò)曝,傳統(tǒng)方法是人工調(diào)試,其主要缺點(diǎn)就是速度慢。所以核心問(wèn)題就是如何找到合適的曝光時(shí)間,并且能同時(shí)解決過(guò)暗或者過(guò)曝的情況。
??模型思路:
按照偽代碼的思路,其程序?qū)崿F(xiàn)方法如下:
% 編寫(xiě)程序?qū)崿F(xiàn)PCO相機(jī)自動(dòng)曝光% 流程:設(shè)置一個(gè)初始曝光時(shí)間10ms -> 采集一張圖片 -> 計(jì)算前2%數(shù)值的均值V -> % e_t=6553/V*e_t -> 重新采集圖像 -> 計(jì)算前2%數(shù)值的均值V ->e_t=65535/V*e_t;clc, clearclose all% get sourcevid = videoinput("pcocameraadaptor_r2020a",0,"USB 3.0");src = getselectedsource(vid);% initializationvid.FramesPerTrigger = 1;exposure_time = 10000; src.E1ExposureTime_unit = "us";src.E2ExposureTime = exposure_time;fprintf("測(cè)試程序?qū)崿F(xiàn)自動(dòng)曝光/n");% capture imagestart(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerend % ensure that vid had capture enough imagesimg1 = getdata(vid);% upgrate the first stage exposure_time[A1,~] = sort(img1(:),"descend");V1 = mean(A1(1:round(numel(A1)/50)));exposure_time1 = 6553./V1.*exposure_time;src.E2ExposureTime = exposure_time1;% disp(["upgrade the first stage exposure_time is: ",...% num2str(exposure_time1/1000),"ms"]);pause(0.001);start(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerend % ensure that vid had capture enough imagesimg2 = getdata(vid);% upgrate the second stage exposure_time[A2,~] = sort(img2(:),"descend");V2 = mean(A2(1:round(numel(A2)/50)));exposure_time = 65535./V2.*exposure_time1;src.E2ExposureTime = exposure_time;disp(["upgrade the final exposure_time is: ",... num2str(exposure_time/1000),"ms"]);pause(0.001);% capture the needing imagesstart(vid);while get(vid,"FramesAvailable")<vid.FramesPerTriggerend % ensure that vid had capture enough imagesimg = getdata(vid);figure(1),set(gcf,"Units","Pixel","position",[934 238 985 409]);subplot(121), imshow(img);subplot(122), imhist(img);pause(0.001);% close viddelete(vid)
模型中計(jì)算前1%的數(shù)值也是可以的,只是其曝光程度有微小的差別。
?
??本項(xiàng)目主要演示如何將圖像處理算法增加到采集過(guò)程中,從而實(shí)現(xiàn)實(shí)時(shí)的處理圖像。以圖像的熱力估計(jì)模型(僅道具,非真實(shí))為例,其運(yùn)行結(jié)果為:
如圖,左邊為相機(jī)實(shí)時(shí)采集到的圖像,右邊為經(jīng)過(guò)模型處理后實(shí)時(shí)顯示的結(jié)果。
程序?qū)崿F(xiàn):
% control camera by matlab codeclc,clearclose all% get sourcevid = videoinput("pcocameraadaptor_r2020a", 0, "USB 3.0");src = getselectedsource(vid);% initialize camera propertiesvid.FramesPerTrigger = 1; % setting the collecting number in each triggersrc.E1ExposureTime_unit = "us"; src.E2ExposureTime = 15000;% collecting imagesn = 0;while n<100 n = n+1; start(vid); while get(vid,"FramesAvailable")<vid.FramesPerTrigger end img = im2double(getdata(vid)); img_gray = im2uint8(img); img_tmp = repmat(img_gray,1,1,3); img_deal = label2rgb(gray2ind(img_gray, 255), jet(255)); figure(1), imshow([img_tmp img_deal]); pause(0.001);end% close viddelete(vid);
??本文系統(tǒng)性地介紹了如何掌握matlab控制PCO相機(jī)這一技能,從環(huán)境配置 -> GUI操作介紹 -> 腳本編寫(xiě) -> 實(shí)例演示,相信掌握這項(xiàng)技能的你們一定能實(shí)驗(yàn)做得更順利,哈哈哈~
??在筆者掌握這項(xiàng)技能之后,發(fā)現(xiàn)其用處很大,所以專(zhuān)門(mén)為它寫(xiě)了這篇指南,也感謝課題組師弟師妹幫忙準(zhǔn)備了素材(* ̄︶ ̄)。
??歡迎廣大讀者們批評(píng)指正,學(xué)習(xí)交流,加油!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/125569.html
摘要:是兩個(gè)詞的組合,意為矩陣工廠(chǎng)矩陣實(shí)驗(yàn)室,軟件主要面對(duì)科學(xué)計(jì)算可視化以及交互式程序設(shè)計(jì)的高科技計(jì)算環(huán)境。MATLAB是矩形實(shí)驗(yàn)室(Matrix laboratory)的簡(jiǎn)稱(chēng),是由美國(guó)MathWorks公司開(kāi)發(fā)的,它是一款出品的商業(yè)數(shù)學(xué)軟件,它常常用于數(shù)據(jù)分析、無(wú)線(xiàn)通信、深度學(xué)習(xí)、圖像處理與計(jì)算機(jī)視覺(jué)、信號(hào)處理、量化金融與風(fēng)險(xiǎn)管理、機(jī)器人,控制系統(tǒng)等領(lǐng)域。MATLAB是matrix&l...
摘要:一個(gè)不小心,代碼里就出現(xiàn)了不少等不可維護(hù)的代碼。因此,我覺(jué)得一個(gè)團(tuán)隊(duì)或者是一個(gè)項(xiàng)目,需要一個(gè)校驗(yàn)工具,簡(jiǎn)化我們的工作。只看這一小段代碼我希望我的校驗(yàn)工具也是鏈?zhǔn)秸{(diào)用,鏈?zhǔn)秸{(diào)用可以極大的簡(jiǎn)化代碼。 源碼:git倉(cāng)庫(kù) 歡迎star & fork ~~ 首發(fā)于 掘金 做過(guò)校驗(yàn)需求的小伙伴們都知道,校驗(yàn)其實(shí)是個(gè)麻煩事。 規(guī)則多,需要校驗(yàn)的字段多,都給我們前端帶來(lái)巨大的工作量。 一個(gè)不小心,代碼...
摘要:此發(fā)行版還添加了新的重要的深度學(xué)習(xí)功能,可簡(jiǎn)化工程師研究人員及其他領(lǐng)域?qū)<以O(shè)計(jì)訓(xùn)練和部署模型的方式。內(nèi)部基準(zhǔn)測(cè)試顯示,在部署階段為深度學(xué)習(xí)模型產(chǎn)生的代碼,比的性能提高倍,比的性能提高倍。 MATLAB Release 2017b (R2017b) 今日正式推出,其中包括 MATLAB 和 Simulink 的若干新功能、六款新產(chǎn)品以及對(duì)其他 86 款產(chǎn)品的更新和修復(fù)補(bǔ)丁。此發(fā)行版還添加了新的...
摘要:為了你最好的未來(lái),請(qǐng)不斷的學(xué)習(xí)創(chuàng)始人兼首席執(zhí)行官人工智能和機(jī)器學(xué)習(xí)的時(shí)代已經(jīng)到來(lái)了,這些領(lǐng)域都有可能對(duì)印度的行業(yè)產(chǎn)生重大的影響。在印度努力重振生產(chǎn)力增長(zhǎng)的同時(shí),人工智能和機(jī)器學(xué)習(xí)有望填補(bǔ)這一空白。 showImg(http://upload-images.jianshu.io/upload_images/13825820-702c6873cd07cfc3.jpg?imageMogr2/...
閱讀 3799·2023-01-11 11:02
閱讀 4305·2023-01-11 11:02
閱讀 3126·2023-01-11 11:02
閱讀 5236·2023-01-11 11:02
閱讀 4800·2023-01-11 11:02
閱讀 5573·2023-01-11 11:02
閱讀 5376·2023-01-11 11:02
閱讀 4079·2023-01-11 11:02