halcon視覺(jué)學(xué)習(xí)-基于halcon

halcon簡(jiǎn)介

halcon在工業(yè)視覺(jué)中屬于很棒的。
學(xué)習(xí)halcon需要具備 軟件、圖像處理、光學(xué) 三個(gè)部分的知識(shí)。圖像處理一般的套路就是 獲取圖像>分割區(qū)域>特征提取

halcon界面

halcon文件所在位置:
Users / Shared / Library / Application Support / halcon 13 / example / hdevelop/
我們做項(xiàng)目的圖片路徑就在 example/images/ 里面

一、嵌入式工業(yè)讀碼器

包括DM碼、QR碼、vericode碼


二、 圖像采集的原理,以及準(zhǔn)確成像的專業(yè)方法

  • 1.2 相機(jī)的接口類(lèi)型
    USB、IEEE1394、Gigabit Ethernet(千兆網(wǎng))

  • 1.3 小試halcon
    首先,安裝相機(jī)驅(qū)動(dòng)(一些品牌halcon自帶驅(qū)動(dòng)),比如balser安裝pylon驅(qū)動(dòng),打開(kāi)halcon界面,選擇助手,打開(kāi)新的Image Acquisition,選擇資源,自動(dòng)檢測(cè)接口,然后點(diǎn)擊右邊的按鈕選擇一個(gè)接口,選擇后把選項(xiàng) 資源 切換到 連接,再點(diǎn)擊連接框里面的一個(gè)連接,表示相機(jī)和軟件建立連接,再點(diǎn)擊 實(shí)時(shí),相機(jī)實(shí)時(shí)采集數(shù)據(jù)了。

三、 Blob分析與形態(tài)學(xué)

Blob
區(qū)域是一種非常重要的概念。
區(qū)域是blobs這一數(shù)據(jù)類(lèi)型在halcon中的一種貼切的表達(dá)形式。
采集圖像-區(qū)域分割,最后通過(guò)特征(如圓度、面積、矩形度等)篩選,這一過(guò)程被稱為Blob(binary large objects)分析。

形態(tài)學(xué)
形態(tài)學(xué)是對(duì)區(qū)域大小調(diào)整的一種非常重要的方法和概念。形態(tài)學(xué)包括「開(kāi)運(yùn)算、閉運(yùn)算、腐蝕、膨脹」
形態(tài)學(xué)需要引入一個(gè)新的概念,即結(jié)構(gòu)元素。

  • 開(kāi)運(yùn)算可以去除小區(qū)域以及原區(qū)域中突出的細(xì)節(jié)部分;
  • 閉運(yùn)算可以填補(bǔ)相鄰區(qū)域以及空洞;
  • 腐蝕,會(huì)有一個(gè)結(jié)構(gòu)元素,即一個(gè)形狀的像素組合,以這個(gè)結(jié)構(gòu)元素的中心點(diǎn)像素來(lái)計(jì)算保留處,這個(gè)結(jié)構(gòu)元素在目標(biāo)元素中逐行移動(dòng),若目標(biāo)元素中的形狀和結(jié)構(gòu)元素相同,這個(gè)目標(biāo)元素中對(duì)應(yīng)中心點(diǎn)像素保留。
  • 膨脹,與腐蝕相反,即參照一個(gè)結(jié)構(gòu)元素,這個(gè)結(jié)構(gòu)元素我們可以設(shè)定中心點(diǎn),需要膨脹的位置,然后順著圖像一格一格走,只要有和中心點(diǎn)有交集,即可按結(jié)構(gòu)元素膨脹。
    開(kāi)運(yùn)算就是先腐蝕再膨脹,閉運(yùn)算就是先膨脹再腐蝕。參考
腐蝕
膨脹
  • 灰度直方圖。在圖像處理中使用非常頻繁,比如分開(kāi)綠豆和紅豆,可以拍照后選擇灰度,紅色和綠色灰度不同,通過(guò)直方圖選擇灰度范圍,即可選擇出紅豆或綠豆。

  • 特征直方圖。比如圓度、面積、


實(shí)戰(zhàn)案例-區(qū)分紅豆和綠豆

  • 1.首先打開(kāi)一張圖片,點(diǎn)擊確定,打開(kāi)圖片后,按住command不放,在圖片界面會(huì)出現(xiàn) 當(dāng)前的像素坐標(biāo)和 灰度值


  • 2.獲取圖片后,按照套路開(kāi)始圖片分割,我們打開(kāi)灰度直方圖,直接點(diǎn)上方的按鈕,選擇合適的灰度范圍。按照下圖操作完后,點(diǎn)擊單步跳過(guò)函數(shù)


整個(gè)程序的編寫(xiě)和思考如下:

* 1. 采集圖像
read_image (HalconTest01, '/Users/jkx/Desktop/halcon_test01.png')
* 2. 分割圖像
threshold (HalconTest01, Regions, 43, 247)  // regions區(qū)域,表示選中43-247中間的灰度
dev_set_draw('margin')   // 畫(huà)出邊緣
dev_display(HalconTest01)  // 顯示halconTest01這個(gè)圖片,主要是生成 HalconTest01 這個(gè)變量
dev_display(Regions)  // 顯示 分割過(guò)的 Regions 圖片,此時(shí)可以看到圖片背景有雜質(zhì),下一步要去除雜質(zhì)
* 3. 采用開(kāi)運(yùn)算,消除圖像雜質(zhì),先構(gòu)建結(jié)構(gòu)元素,結(jié)構(gòu)元素中心點(diǎn)坐標(biāo)我們可以不用管
gen_circle(Circle, 200, 200, 20)  // 200,200 是結(jié)構(gòu)元素的坐標(biāo),不管,后面是半徑,根據(jù)你雜質(zhì)的大小選擇,否組雜質(zhì)清不干凈
opening (Regions, Circle, RegionOpening)  // 開(kāi)運(yùn)算,表示打開(kāi) Regions這個(gè)對(duì)象,依照結(jié)構(gòu)元素Circle這個(gè)對(duì)象,且生成新的RegionOpening對(duì)象
dev_clear_window()
dev_display(HalconTest01)
dev_display(RegionOpening)

* 4. 分離區(qū)域,將一個(gè)區(qū)域分解成多個(gè)區(qū)域
connection(RegionOpening, ConnectedRegions)  //這次分離只分離開(kāi)部分,后面優(yōu)化可以刪掉這條
gen_circle(Circle1, 200, 200, 21.5)    // 腐蝕,結(jié)構(gòu)元素更大,確保連在一起的豆子被分割開(kāi),Circle1是對(duì)象
erosion1 (ConnectedRegions, Circle1, RegionErosion, 1)  // ConnectedRegions, Circle1, RegionErosion, 1 ,括號(hào)里是函數(shù)的參數(shù),這些參數(shù)是對(duì)象,RegionErosion是新的對(duì)象,halcon的套路是函數(shù)參數(shù)里靠后的是新生成的對(duì)象,輸入、結(jié)構(gòu)元素、輸出
connection (RegionErosion, ConnectedRegions1)   // 分離開(kāi)這些豆子
* 5. 再次清屏,為了更好的展示效果
dev_display(HalconTest01)
dev_display(RegionErosion)
* 6. 數(shù)一數(shù)有多少個(gè)被腐蝕后的參數(shù)
count_obj(ConnectedRegions1, Number)
* 7. 膨脹,恢復(fù)原來(lái)的樣子
dilation1 (ConnectedRegions1, Circle1, RegionDilation1, 1)
* 8. 再次清屏,顯示效果,為了便于理解,程序才這么啰嗦,實(shí)際可簡(jiǎn)化
dev_clear_window ()
dev_display (HalconTest01)
dev_display (RegionDilation1)
* 9. 插入特征直方圖,區(qū)分豌豆和綠豆
select_shape (RegionDilation1, SelectedRegions, 'circularity', 'and', 0.571, 0.743)
dev_set_line_width (2)
dev_display (HalconTest01)
dev_display (SelectedRegions)  // 和上面的不能倒順序,倒順序就只能顯示Halcon01,不能顯示 SelectedRegions

count_obj (SelectedRegions, Number1)  // 數(shù)一下豌豆的數(shù)量
set_tposition (200000, 24, 12)  // 設(shè)置顯示文字的位置
write_string (200000, '豌豆的個(gè)數(shù)是:' + Number1)   // 顯示的內(nèi)容
* dev_clear_window ()
* dev_display (HalconTest01)

difference (RegionDilation1, SelectedRegions, RegionDifference)   // 差值運(yùn)算,這里小錯(cuò)誤,雖然差值了,很多元素看不見(jiàn)了,但是還存在,所以結(jié)果還是67,需要再次處理
select_shape (RegionDifference, SelectedRegions1, 'area', 'and', 855, 4895)

count_obj (SelectedRegions1, Number2)
set_tposition (200000, 24, 12)
new_line (200000)
write_string (200000, '綠豆的個(gè)數(shù)是:' + Number2)   // 顯示綠豆數(shù)

顏色空間
主要分為以下幾點(diǎn):Halcon支持的顏色空間、通道與顏色空間的轉(zhuǎn)化、通道與區(qū)域分割方法、案例講解

一般來(lái)說(shuō),我們得到一幅圖像可以拆分為RGB(紅黃藍(lán)三通道分量交織,按BGRB排序)隨后我們可以由RGB得到HSV空間圖像。
而且,通道圖像和 顏色空間圖像 都是 8bit 灰度圖像。

  • 色調(diào) H
    用角度來(lái)度量,取值為 0~360度,從紅色開(kāi)始逆時(shí)針計(jì)算,紅色為0,綠色為120,藍(lán)色為240,它們的補(bǔ)色黃色為60,青色180,品紅300.

  • 飽和度 S
    飽和度表示顏色接近光譜的程度,一種顏色可以看出光譜色和白色混合的結(jié)果,其中光譜色越大,飽和度越高,顏色越艷麗,類(lèi)似油畫(huà)里的白礬,顏色加上白礬,它的保護(hù)度就降低了。

  • 明度 V
    明度表示顏色的 明亮程度,對(duì)于光源色,明度值取決于發(fā)光體的光亮度,對(duì)于物色體,此值和物體的折射比和反射比相關(guān),一般取值從0%(黑)到100%(白)。

四、 幾何定位+仿射變換+視覺(jué)測(cè)量

定位三方法:Blob定位、模板匹配、深度學(xué)習(xí)

仿射變換:就是一種特殊的幾何變換,是一種投影,常見(jiàn)的有 旋轉(zhuǎn)、平移、縮放 (就是矩陣間的運(yùn)算)

Blob分析 模板匹配

五、MPL深度學(xué)習(xí)(多層神經(jīng)網(wǎng)絡(luò))

比如對(duì)于不同的物品,A、B、C,我們可以通過(guò)紋理區(qū)分ABC,得出3個(gè)不同的值,再比如我們 通過(guò)周長(zhǎng)區(qū)分ABC,又得出3個(gè)不同的值,那邊把這些特征集合在一起構(gòu)成特征向量, 不同物品的特征向量值不一樣,可以劃分出ABC,這個(gè)劃分的過(guò)程就是靠分類(lèi)器完成的,而訓(xùn)練的過(guò)程就是根據(jù) 特征向量的不同,把他們訓(xùn)練成某類(lèi)物品并歸類(lèi)分類(lèi)。
MPL:Multi-Layer Perceptron


halcon視覺(jué)總結(jié)

一般來(lái)說(shuō),對(duì)于2D項(xiàng)目,無(wú)外乎這樣的套路:

    1. 圖像采集
    1. 預(yù)處理,主要有兩種方法,對(duì)比度去噪
對(duì)比度:
scale_image (灰度縮放算子,在灰度直方圖里操作,線性拉伸灰度)
emphsize (增強(qiáng)算子)
grey_range_rect (增加灰度動(dòng)態(tài)范圍的算子)
equ_histo_image (直方圖均勻化,讓圖片灰度分布更均勻)

去燥:
mean_image (均值濾波)、高斯濾波、中值濾波
    1. 圖像分割
      二值化、形狀選擇、形態(tài)學(xué)
    1. 特征識(shí)別 和 求取計(jì)算
    1. 顯示與通訊

halcon中涉及的圖像處理十大理論知識(shí)

  1. 圖像處理基礎(chǔ)知識(shí)
  2. 圖像的灰度變換
  3. 圖像增強(qiáng)(預(yù)處理:增強(qiáng)對(duì)比度 和去噪(均值、中值、高斯濾波))
  4. 圖像的幾何變換(仿射變換、投影變換、極坐標(biāo)變換等)
  5. 圖像分割(邊緣提取、Blob分析等)
  6. 圖像的頻域(缺陷劃痕檢測(cè)等)
  7. 圖像的形態(tài)學(xué)(膨脹、腐蝕、開(kāi)運(yùn)算、閉運(yùn)算等)
  8. 圖像的復(fù)原(這點(diǎn)halcon涉及不多,主要是刑偵用)
  9. 運(yùn)動(dòng)圖像(運(yùn)動(dòng)檢測(cè),差分、光流法)
  10. 圖像配準(zhǔn)(模板匹配等)


六、硬件知識(shí)

購(gòu)買(mǎi)工業(yè)相機(jī)必須要知道的參數(shù)

  • 分辨率(Resolution):相機(jī)每次采集圖像的像素點(diǎn)數(shù)。對(duì)于數(shù)字工業(yè)相機(jī)一般是直接與光電傳感器的像元數(shù)對(duì)應(yīng)的,對(duì)于模擬相機(jī)則是取決于視頻制式,PAL制為768576,NTSC制為640480。
  • 像素深度(Pixel Depth):即每像素?cái)?shù)據(jù)的位數(shù),一般常用的是8Bit.例如,一幅彩色圖像的每個(gè)像素用R,G,B三個(gè)分量表示,若每個(gè)分量用8位,那么一個(gè)像素共用24位表示,就說(shuō)像素的深度為24,每個(gè)像素可以是16 777 216(2的24次方)種顏色中的一種。在這個(gè)意義上,往往把像素深度說(shuō)成是圖像深度。表示一個(gè)像素的位數(shù)越多,它能表達(dá)的顏色數(shù)目就越多,而它的深度就越深。
  • 最大幀率(Frame Rate)/行頻(Line Rate):即相機(jī)采集傳輸圖像的速率,對(duì)于面陣相機(jī)一般為每秒采集的幀數(shù),對(duì)于線陣相機(jī)為每秒采集的行數(shù)。
  • 曝光方式(Exposure)和快門(mén)速度(Shutter):對(duì)于線陣相機(jī)都是逐行曝光的方式,可以選擇固定行頻和外觸發(fā)同步的采集方式,曝光時(shí)間可以與行周期一致,也可以設(shè)定一個(gè)固定的時(shí)間;面陣工業(yè)相機(jī)有幀曝光、場(chǎng)曝光和滾動(dòng)行曝光等幾種常見(jiàn)方式。數(shù)字工業(yè)相機(jī)一般都提供外觸發(fā)采圖的功能,快門(mén)速度一般可到10微秒,高速工業(yè)相機(jī)還可以更快。
  • 像元尺寸(Pixel Size):像元大小和像元數(shù)共同決定了相機(jī)靶面的大小。目前數(shù)字工業(yè)相機(jī)像元尺寸一般為3-10μm,一般像元尺寸越小,制造難度越大,圖像質(zhì)量也越不容易提高。
  • 光譜響應(yīng)特性(Spectral Range):指該像元傳感器對(duì)不同光波的敏感特性,一般響應(yīng)范圍是350-1000nm,一些相機(jī)在靶面前加了一個(gè)濾鏡,濾除紅外光線,如果系統(tǒng)需要對(duì)紅外感光時(shí)可去掉該濾鏡。

打光和鏡頭
《工程光學(xué)》 打光、選型、鏡頭

附錄:以上是工業(yè)上的,其實(shí)在顯微鏡等超高精度的視覺(jué)中,除了要考慮相機(jī)圖像分辨率,還要考慮 光學(xué)系統(tǒng)分辨率,這里一般精度在 nm 級(jí)別,可 參考文章



與公司算法工程師的交流:

  • 問(wèn):卷積在圖像算法中能干嘛?
    答:可以用來(lái)濾波,也可以來(lái)模板匹配

  • 問(wèn):圖像中 均值濾波、高斯濾波、中值濾波,這些感冒?
    答:去噪聲。比如中值濾波可以去椒鹽噪聲, 自然界的噪聲高斯噪聲多,用高斯濾波去除,等等。補(bǔ)充:頻域高通濾波銳化圖像,即圖像中的邊界輪廓越明顯,丟失了信息豐富的低頻部分;頻域低通濾波平滑圖像,即圖像中輪廓被淡化。

  • 問(wèn):卷積是對(duì)圖片進(jìn)行平滑處理嗎?
    答:卷積可以理解為一種方法、一種操作,卷積就是按照塊滑動(dòng)處理,比如去一些圖像毛刺。Halcon中的 開(kāi)運(yùn)算、閉運(yùn)算、膨脹、收縮、也可以理解 為一種卷積。

  • 問(wèn):傅里葉變換在圖像中的意義是?
    答:傅里葉變換用途很大,比如有時(shí)候噪聲很難再時(shí)域中去除,在頻域中 很好去除,另外,傅里葉可以用來(lái)壓縮圖像,圖像打包后變成頻域,解壓再變成時(shí)域。

  • 涉及具體數(shù)學(xué),傅里葉到底對(duì)圖片做什么?
    答:圖片其實(shí)可以理解為三維空間 圖,xy 為空間位置,z為灰度值,通過(guò)傅里葉變換后,新的三維空間圖像 xy 為不同方向的頻率,z為幅值(待定)


圖像的頻率是表征圖像中灰度變化劇烈程度的指標(biāo),是灰度在平面空間上的梯

這就得出了一個(gè)結(jié)論:傅里葉變換后的白色部分(即幅度較大的低頻部分),表示的是圖像中慢變化的特性,或者說(shuō)是灰度變化緩慢的特性(低頻部分)。

傅里葉變換后的黑色部分(即幅度低的高頻部分),表示圖像中快變化的特性,或者說(shuō)是灰度變化快的特性(高頻部分)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容