機(jī)器視覺(jué)應(yīng)用軟件開(kāi)發(fā)步驟及流程
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
機(jī)器視覺(jué)工程應(yīng)用主要可劃分為硬件和軟件兩大部分。
硬件:工程應(yīng)用的第一步就是硬件選型。硬件選型很關(guān)鍵,因?yàn)樗悄愫竺婀ぷ鞯幕A(chǔ)。主要是光源、工業(yè)相機(jī)和鏡頭選擇。
軟件:目前業(yè)內(nèi)商業(yè)庫(kù)主要有Halcon,康耐視,DALSA,evision,NI等,開(kāi)源庫(kù)有OpenCV.其中NI的labview+vision模塊。

機(jī)器視覺(jué)工程應(yīng)用的基本開(kāi)發(fā)思路是:
一、圖像采集,二、圖像分割,三、形態(tài)學(xué)處理,四、特征提取,五、輸出結(jié)果。
下面在Halcon下對(duì)這四個(gè)步驟進(jìn)行講解。
Halcon通過(guò)imageacquisition interfaces對(duì)各種圖像采集卡及各種工業(yè)相機(jī)進(jìn)行支持。其中包括:模擬視頻信號(hào),數(shù)字視頻信號(hào)Camera Link,數(shù)字視頻信號(hào)IEEE 1394,數(shù)字視頻信號(hào)USB2.0,數(shù)字視頻信號(hào)Gigabit Ethernet等。
Halcon通過(guò)統(tǒng)一的接口封裝上述不同相機(jī)的image acquisition interfaces,從而達(dá)到算子統(tǒng)一化。不同的相機(jī)只需更改幾個(gè)參數(shù)就可變更使用。
Halcon圖像獲取的思路:1、打開(kāi)設(shè)備,獲得該設(shè)備的句柄。2、調(diào)用采集算子,獲取圖像。
1、打開(kāi)設(shè)備,獲得該設(shè)備的句柄。
open_framegrabber('DahengCAM', 1, 1, 0, 0, 0, 0, 'interlaced', 8, 'gray', -1, 'false','HV-13xx', '1', 1, -1, AcqHandle) //連接相機(jī),并設(shè)置相關(guān)參數(shù)Parameter | Values | Default | Type | Description |
Name | 'DahengCAM' | string | Name of the HALCON interface. | |
HorizontalResolution | 1 | 1 | 1表示水平全部,2為水平1/2,表示圖像截取。 | |
VerticalResolution | 1 | 1 | 同上,表示垂直方向。 | |
| ImageWidth | <width> | 0 | integer | 所需的圖像部分的寬度('0 '代表了完整的圖像)。 |
| ImageHeight | <height> | 0 | integer | 所需的圖像部分的高度(0”是完整的圖像) |
| StartRow | <width> | 0 | integer | 所需的圖像部分左上方的像素行坐標(biāo) |
| StartColumn | <column> | 0 | integer | 所需的圖像部分左上方的像素列坐標(biāo) |
| Field | 忽視 | |||
| BitsPerChannel | 忽視 | |||
| ColorSpace | 'default', 'gray', 'rgb' | 'gray' | string | HALCON圖像的通道模式 |
| Generic | 忽視 | |||
| ExternalTrigger | 'false', 'true' | 'false' | string | 外部觸發(fā)狀態(tài) |
| CameraType | 'HV-13xx', 'HV-20xx', 'HV-30xx', 'HV-31xx','HV-50xx', 'SV-xxxx' | 'HV-13xx' | string | 所連接的攝像機(jī)系列型。 |
| Device | '1', '2', '3', ... | '1' | string | 相機(jī)連接第一個(gè)設(shè)備號(hào)“1”,第二個(gè)設(shè)備編號(hào)“2”。 |
| Port | 忽視 | |||
| LineIn | 忽視 |
2、調(diào)用采集算子,獲取圖像。
grab_image (Image, AcqHandle) //(同步采集)完后處理圖像,然后再采集圖像。采集圖像的速率受處理速度影響。grab_image_async (Image, AcqHandle,MaxDelay) //(異步采集),一幅畫(huà)面采集完后相機(jī)馬上采集下一幅畫(huà)面,不受處理速度影響。其中第三個(gè)參數(shù)為:MaxDelay,表示異步采集時(shí)可以允許的最大延時(shí),本次采集命令距上次采集命令的時(shí)間不能超出MaxDelay,超出即重新采集。圖像采集其他相關(guān)算子:
grab_image_start,該算子開(kāi)始命令相機(jī)進(jìn)行異步采集。只能與grab_image_async(異步采集)一起使用。
例子:
* Select a suitable image acquisition interface nameAcqNameopen_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0,\'default','default','default',-1,-1,AcqHandle)grab_image(Image1,AcqHandle)//進(jìn)行同步采集* Start next grabgrab_image_start(AcqHandle,-1.0)//命令相機(jī)進(jìn)行異步圖像采集開(kāi)始* Process Image1 ...* Finish asynchronous grab + start next grabgrab_image_async(Image2,AcqHandle,-1.0)//讀取異步采集的圖像* Process Image2 ...close_framegrabber(AcqHandle)
3、相機(jī)參數(shù)讀寫(xiě)
讀取相機(jī)參數(shù):
info_framegrabber( : : Name, Query : Information, ValueList)寫(xiě)相機(jī)參數(shù):
set_framegrabber_param( : : AcqHandle, Param, Value : )
圖像分割的定義:
所謂圖像分割是指將圖像中具有特殊含義的不同區(qū)域分割開(kāi)來(lái),這些區(qū)域是互相不交叉的,每個(gè)區(qū)域都滿足特定區(qū)域的一致性。
1、基于閾值的圖像分割
threshold —采用全局閾值分割圖像。
格式: threshold(Image : Region : MinGray, MaxGray : )
自動(dòng)全局閾值分割的方法:
(1)計(jì)算灰度直方圖
(2)尋找出現(xiàn)頻率最多的灰度值(最大值)
(3)在threshold中使用與最大值有一定距離的值作為閾值
代碼:
gray_histo(Regions, Image,AbsoluteHisto, RelativeHisto) //計(jì)算出圖像區(qū)域內(nèi)的絕對(duì)和相對(duì)灰度值直方圖。PeakGray := sort_index(AbsoluteHisto)[255] //求出出現(xiàn)頻率最多的灰度值threshold(Image,Region,0,PeakGray-25)bin_threshold — 使用一個(gè)自動(dòng)確定的閾值分割圖像。格式:bin_threshold(Image : Region : : )dyn_threshold —使用一個(gè)局部閾值分割圖像。格式:dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )例子:mean_image(Image,Mean,21,21)dyn_threshold(Image,Mean, RegionDynThresh,15,'dark')var_threshold —閾值圖像局部均值和標(biāo)準(zhǔn)差的分析。格式:var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )2、基于邊緣的圖像分割:尋找區(qū)域之間的邊界watersheds —從圖像中提取分水嶺和盆地。格式:watersheds(Image : Basins, Watersheds : : )watersheds_threshold —使用閾值從圖像中提取分水嶺和盆地。格式:watersheds_threshold(Image : Basins : Threshold : )
3、基于區(qū)域的圖像分割:直接創(chuàng)建區(qū)域
形態(tài)學(xué)處理以集合運(yùn)算為基礎(chǔ)。
腐蝕、膨脹、開(kāi)操作、閉操作是所有形態(tài)學(xué)圖像處理的基礎(chǔ)。
開(kāi)操作(先腐蝕再膨脹)使對(duì)象的輪廓變得光滑,斷開(kāi)狹窄的間斷和消除細(xì)的突出物。
閉操作(先膨脹再腐蝕)消彌狹窄的間斷和長(zhǎng)細(xì)的鴻溝,消除小的孔洞,填補(bǔ)輪廓線的斷裂。
形體學(xué)基礎(chǔ)算子:
erosion1
dilation1
opening
closing
常用的形態(tài)學(xué)相關(guān)算子
connection
select_shape
opening_circle
closing_circle
opening_rectangle1
closing_rectangle1
complement
difference
intersection
union1
shaps_trans
fill_up
形態(tài)學(xué)高級(jí)算子:
boundary
skeleton
1、區(qū)域特征:
area
moments
smallest_rectangle1
smallest_circle
convexity:區(qū)域面積與凸包面積的比例
contlength:區(qū)域邊界的長(zhǎng)度
compactness
2、灰度特征
estimate_noise
select_gray
(1)獲取滿足條件的區(qū)域
(2)區(qū)域分類,比如OCR
(3)測(cè)量
(4)質(zhì)量檢測(cè)
原文引自:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html
向作者致敬!!
聲明:部分內(nèi)容來(lái)源于網(wǎng)絡(luò),僅供讀者學(xué)習(xí)、交流之目的。文章版權(quán)歸原作者所有。如有不妥,請(qǐng)聯(lián)系刪除。
交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~

