Halcon實現邊緣提取

2021-08-21 14:14:43 字數 1585 閱讀 9654

一、邊緣提取

1、設定roi興趣區域

2、快速二值化,並連線相鄰區域。

這樣做的目的是進一步減少目標區域,通過二值化將目標區域大概輪廓提取出來

3、提取最接近目標區域的輪廓

常用函式有boundary,gen_contour_region_xld

4、根據自己的需求提取需要的初步輪廓

5、將初步提取的初步輪廓進行膨脹操作

6、將膨脹後的區域和原圖進行減操作(在這步之前有可能需要對原圖進行高斯濾波)。這樣就能得到只

有邊緣的真實影象

7、用canny或其他運算元(根據需要)提取亞畫素輪廓,一般使用edges_sub_pix函式

8、處理和計算

得到真實的邊緣xld後你可能需要進一步處理得到你想要的線、弧等。

你可能用到的函式segment_contours_xld(分割)  union_collinear_contours_xld(聯合相鄰或相同

角度直線)select_contours_xld(提取想要的輪廓) union_cocircular_contours_xld(聯合相同圓)

等等得到輪廓後如果你不知道怎麼處理後得到你想要的東西(線、弧、圓、角、矩形)你都可以將輪廓轉化

為點,然後用點集合來擬合任何你想要的東西。

二、blob分析檢測(前面一篇有詳細講解,本騙只講思路)

(1)應用roi,可以使blob分析加速。

(2)匹配roi區域或影象,詳將guideiib以形狀為基礎的匹配。

(3)校正影象《經常用來去除鏡頭畸變或把影象轉換到參考點視角,如雙目視覺時的影象校正》

(4)影象前處理

(5)引用分割引數

(6)分割影象

(7)區域處理

(8)特徵提取

(9)把提取的結果轉換到世界座標中

(10)結果視覺化。

相機的標定和矯正不在本篇的學習之中。直接講提取blob

1、一般先使用均值濾波去噪

2、利用去噪影象與平滑影象的offset提取區域邊緣,常見函式dyn_threshold 

3、提取連通域dyn_threshold 

4、根據形狀或是灰度等特徵來提取你想要的blob。

另一種方法就是分水嶺演算法

watersheds (imagegauss, basins, watersheds)/

1、對影象進行高斯濾波

還有的圖形更簡單直接二值化就可以啦

bin_threshold (fin, dark) //分割影象,輸出dark區域,fin已經被處理為區域//

difference (fin, dark, background) //計算fin與dark兩個區域的補集//

還有個函式應該說是讓你高興還是沮喪呢,以為乙個函式就可以直接提取你想要的,但是引數很難調整

lines_gauss(image, lines, 6, 0.3, 0.5, 'light', 'true', 'gaussian', 'true')

三、贓物檢測

1、得到兩個不同高斯標準差的高斯積卷

2、對原始影象進行傅利葉變換'to_fre'

3、用之前的積卷對影象做積卷濾波

4、傅利葉反變換『from_fre』

Python opencv邊緣提取

題目描述 利用opencv或其他工具編寫程式實現影象的邊緣提取。實現過程 import cv2 import numpy as np imread 兩個引數 1 路徑。img cv2.imread r c users pc desktop test1.bmp cv2.imshow img img r...

Halcon特徵提取

最簡單的區域特徵是區域的面積。重心用來描述區域的位置。運算元area center用來得到面積和重心。橢圓的長軸半徑 短軸半徑 以及相對於橫軸的夾角,用來定義區域的方位和範圍。長軸半徑 短軸半徑比 各向異性。在區域縮放時保持不變。用來描述區域的細長程度。運算元elliptic axis用來獲取橢圓引...

邊界輪廓提取(邊緣提取)例項

邊緣提取,指數字影象處理中,對於輪廓的乙個處理。對於邊界處,灰度值變化比較劇烈的地方,就定義為邊緣。也就是拐點,拐點是指函式發生凹凸性變化的點。二階導數為零的地方。並不是一階導數,因為一階導數為零,表示是極值點。邊緣提取 邊緣檢測的基本思想首先是利用邊緣增強運算元,突出影象中的區域性邊緣,然後定義象...