關於我自己

我的相片
累計超過15年的工作經驗,包括10年的設備製造業經驗,超過6年的光電零組件製造業經驗;10年的海外工作經驗,其中至今有5年以上的派駐經驗。 1.專注AOI檢測於10年以上(從光機設計、圖像分析、設備挑選、處理速度) 2.機器學習推論-onnx整合傳統演算法從瑕疵抓取、分析、分類 3.遷移式機器學習模式(工業應用、醫療應用) 4.整合:Python推論引擎、C++運算能力、C#友善介面 彈性使用 5.擅長利用專家模型推進專案,並熟悉使用OpenVINO、TensorRT、ONNXRUNTIME框架進行有效的實作與測試。

2011年10月7日 星期五

[轉貼]邊緣檢測常用算子

http://blog.csdn.net/zyqhi/article/details/6422420

邊緣檢測常用算子:

基於一階微分的邊緣檢測方法:

Roberts 算子考慮圖像的2*2鄰域,是最簡單的邊緣檢測算子,算法過程簡述:
1】,遍歷圖像(除去上邊緣和左邊緣),對每個像素做Roberts模板運算。
2】,將結果保存到目標圖像,結束。

Sobel算子考察的是3*3鄰域,由兩個卷積核組成,見上圖,算法過程簡述:
1】,遍歷圖像(除去邊緣,防止越界),對每個像素做Sobel模板卷積運算。
2】,比較兩個計算結果的大小,取較大者復制到目標圖像,結束。

Prewitt算子和Sobel算子類似,所不同的是選用不同的模板而已,算法過程相同。

Krisch算子同樣考究3*3鄰域,所不同的是選用了八個卷積核,見上圖,算法過程簡述:
1】,遍歷圖像(除去邊緣,防止越界),對每個像素做Krisch模板卷積運算。
2】,比較八個計算結果的大小,取較大者復制到目標圖像,結束。

基於二階微分的邊緣檢測方法:



Laplacian 算子是二階導數邊緣算子,考察的是3*3鄰域,上圖是兩種比較常用的模板,算法簡述如下:
1】,遍歷圖像(除去邊緣,防止越界),對每個像素做Laplancian模板卷積運算,注意是只做其中的一種模板運算,並不是兩個。
2】,復制到目標圖像,結束。

Gauss-Laplacian考察的是5*5的鄰域,檢測的同時,引入了濾波,是噪聲得以平滑,上圖是一種常用的算子,算法簡述。
1】,遍歷圖像(除去邊緣,防止越界),對每個像素做Gauss -Laplancian模板卷積運算。
2】,復制到目標圖像,結束。

Canny邊緣檢測是非常重要的一種邊緣檢測算法,主要過程如下:
1】,用高斯濾波器平滑圖像。
已經學習過,根據高斯函數,構造高斯模板,進行濾波,不在贅述。
2】,用一階偏導的有限差分來計算梯度的幅值方向
計算梯度作用模板,遍歷像素,進行模板運算即可。






幅值和方向:























其中,Phi 表示是幅值,Theta 是方向,用圖像副本進行保存。
3】,對梯度幅值進行非極大值抑制;

為確定邊緣,必須保留局部梯度最大的點,而抑制非極大值(NMS)。
解決辦法是,利用梯度的方向:
已經求出Theta 的值,梯度的方向用於非極大值的抑制,將梯度角離散化到0,123中的一個(通過線性映射),采用近似的算法。知道了梯度角,也就知道了梯度線方向。
鄰域的中心像素M與沿著梯度線的兩個像素相比。如果M的梯度值不比沿梯度線的兩個相鄰像素梯度值大,則令M=0

4】,用雙閾值算法檢測和連接邊緣。
減少假邊緣段數量的典型方法是對N[ij]使用一個閾值。將低於閾值的所有值賦零值。但問題是如何選取閾值?
 解決方法
雙閾值算法。雙閾值算法對非極大值抑制圖象作用兩個閾值τ1和τ2,且2τ1≒τ2,從而可以得到兩個閾值邊緣圖象N1i,j]和N2ij]。由於N2ij]使用高閾值得到,因而含有很少的假邊緣,但有間斷(不閉合)。雙閾值法要在N2ij]中把邊緣連接成輪廓,當到達輪廓的端點時,該算法就在N1i,j]的8鄰點位置尋找可以連接到輪廓上的邊緣,這樣,算法不斷地在N1i,j]中收集邊緣,直到將N2i,j]連接起來為止。

沒有留言: