加速你的MATLAB開發(5): 從零開始?Doc Example!

我問我們的實習生myc,為什麼老闆給你的任務你完成的又快又好?myc悄悄地跟我說

別跟別人說哦,我熟讀了MATLAB文檔里自帶的例子。

myc表示一開始用MATLAB的時候覺得根本無從下手,老師上課講的東西,如果在課後碰到不會用的,第一反應就是上網搜索,去論壇提問。直到後來myc看到這則新聞,其中一句話深深地打動了他

……在Windows幫助文件下學會編程……

看幫助文檔真的可以學會編程????

沒錯,MATLAB的文檔真的可以。我們這就來說說最近myc做的一個小項目……

老闆:myc啊,最近我們接到個神秘組織的項目,說要我們幫他們寫個程序專門查水表,你要不幫忙看看?

myc: 老闆我……查水表為啥要寫程序????

老闆:那組織說最近忙不過來了,想要批量處理些名單上的家庭,想問問我們有什麼辦法沒有。

myc: ……我……

老闆:別謙虛了,來,給你看看他們給我們的資料

myc:真的是水表啊……

老闆:你以為呢?他們說名單上的用的都是這類水表,想讓用戶自己拍照上傳,然後自動讀水表讀數。我們這就你一個人懂圖像處理,你看看唄。

myc:以後能把要求先說明白點嗎……

二話不說,myc就打開了Computer Vision System Toolbox的文檔

>>visiondemosn

看我發現了什麼,第一個例子就是從圖像中識字的。作為Fei-Fei Li老公的學生,myc知道這種問題被稱為Optical Character Recognition(OCR)。他打開了第一個例子,點擊Open This Example

嘗試著運行了下例子

效果還不錯,讓我來試試我自己水表的圖,先預處理下

>>I = imread(watermeter.jpg);n>>I1 = imrotate(I,-15);n>>h = imshow(I1);n

>>I2 = imcrop(h); %手動選擇數字部分n>>imshow(I2); n>>imwrite(I2,digits.jpg);n

好,作為雛形,我們先假設可以拿到水表中只有數字讀數的部分。接下來修改文檔例子的最後幾行

ocrtxt = ocr(I, textBBoxes,CharacterSet,0123456789,TextLayout,Block);nwords = arrayfun(@(x)strtrim(x.Words{:}),ocrtxt,Uniformoutput,false);n %去除空格nnfilt = [ocrtxt.WordConfidences]< 0.5;%去除可信度低的nfilt = filt | cellfun(@length,words) > 1;n%可以確定我們每個檢測都應該是一個數字,去除誤檢測nocrtxt(filt)=[];nIocr = insertObjectAnnotation(I,rectangle,vertcat(ocrtxt.WordBoundingBoxes),vertcat(ocrtxt.Words));nnimshow(Iocr);n

我們發現0和8很容易混淆,於是單獨檢測0和8。

ocrtxt = ocr(I, textBBoxes,CharacterSet,12345679,TextLayout,Block);nwords = arrayfun(@(x)strtrim(x.Words{:}),ocrtxt,UniformOutput,false);nfilt = [ocrtxt.WordConfidences]< 0.5;nfilt = filt | cellfun(@length,words) > 1;nocrtxt(filt)=[];nIocr = insertObjectAnnotation(I,rectangle,vertcat(ocrtxt.WordBoundingBoxes),vertcat(ocrtxt.Words));nnocrtxt = ocr(I, textBBoxes(filt,:),CharacterSet,08,TextLayout,Block);nwords = arrayfun(@(x)strtrim(x.Words{:}),ocrtxt,Uniformoutput,false);nnIocr = insertObjectAnnotation(Iocr,rectangle,vertcat(ocrtxt.WordBoundingBoxes),vertcat(ocrtxt.Words));nimshow(Iocr)n

做好了,前後歷時10分鐘有沒有,修改了10行MATLAB代碼有沒有?

看完這個小項目,我終於知道了myc做事又好又快的原因。MATLAB文檔裡面的例子為很多問題提供了成熟的解決方案,他只需要對自己的項目進行微調就可以了。

MATLAB在每次更新的時候,都會加入一些新的Feature Example,用來指導大家如何使用新的功能。怪不得每次MATLAB更新的時候myc都要埋頭閉關一星期,原來是在默默研究文檔的例子。比如他最近就學習了Computer Vision System Toolbox在2016a新更新的兩個例子

Deep learning

Structure from Motion

每個例子都是一個畢設有沒有。

就這樣myc又一次完成了老闆布置的任務。然而這一次的任務後,myc可以驕傲的說

不用來查我的水表了,我拍照給你就好

推薦閱讀:

港中大劉雲輝教授:自動駕駛、醫療手術、人機交互,機器視覺的應用潛力比你想像的要大
[目標檢測] RON-Reverse Connection with Objectness Prior Networks for Object Detection
雙目立體視覺中,標定內外參數後,如何由左攝像機和右攝像機獲取的圖片的某一像素坐標求出世界坐標?
什麼是傾斜攝影測量,目前的主要應用是在什麼方面呢?

TAG:MATLAB | 软件开发 | 计算机视觉 |