1. 程式人生 > >車道線檢測之-sobel運算元邊緣檢測原理介紹

車道線檢測之-sobel運算元邊緣檢測原理介紹

sobel運算元是canny邊緣檢測的核心,也是車道線檢測的中心,所以弄清其原理很重要。
要理解sobel邊緣檢測,首先弄清楚一點影象每一點的畫素值是一個和x,y都相關的值,即f(x,y), 任意給定的x和y都可以索引到一個畫素值。

下圖一代表了一個普通的影象,從中畫一條紅線,相當於固定y,取上面的畫素值可以得到下圖二所示的影象,橫軸為x的座標,縱軸為畫素值,圖三則為畫素值對x的導數(圖二圖三即為y固定為y0,f(x,y0)和x, f(x,y0)導數和x的影象),可以看出導數(梯度)最大或最小的地方即為該紅線上邊緣點所在的位置。有了這個概念之後,就可以進行下一步了
在這裡插入圖片描述

再來看下面這張圖,任意一點的導數為在這裡插入圖片描述


下圖一表示任意一點f對y的導數為0,因為影象在x軸方向上漸進,y方向上畫素值相同。圖二同理。圖三f在左下角為黑色,右上角為白色,影象在x軸和y軸方向畫素值都在增加,圖示Θ角為梯度的方向,為畫素強度增加最快的方向,向量的幅值為該方向上單位步長畫素變化的量。具體公式見下圖。

在這裡插入圖片描述
梯度計算公式:
在這裡插入圖片描述

所以接下來就是怎麼用filter或者卷積核表示導數,從而對整張圖計算梯度,見下圖,從導數定義開始
在這裡插入圖片描述
但是,影象上的每一點(x,y)都是離散的點,所以離散導數的梯度計算公式為
在這裡插入圖片描述
所以任意一點的右導數可以用下面的卷積核表示在這裡插入圖片描述
那如果想要導數值更精確,導數更平滑呢,可以取左右導數的平均值
在這裡插入圖片描述
卷積核就變成下圖所示,任意一點的導梯度為前後元素差的1/2在這裡插入圖片描述


那麼如果想讓梯度變得更平滑呢?這就是sobel operator
在這裡插入圖片描述
Sy同理,可以試著自己推導一下,但要注意卷積核一定是奇數,因為我們要求一個給定元素的梯度,中間元素兩邊的畫素個數應該相同,這裡的1/8是為了歸一化。

好了,索貝爾運算元就到這裡了,這是canny邊緣檢測的核心,後續可能會有hough變換的原理介紹,這樣簡單的車道線檢測原理應該差不多清楚了。