白話影象處理基礎:離散,一階差分,二階差分,偏導差分,拉普拉斯運算元
差分定義廣泛應用在影象處理中。那麼什麼是差分呢?
離散和連續
連續函式:對於我們所認知的函式。定義域和值域都是連續的。比如函式
,影象為
離散函式:對於我們所知道的函式,定義域是不連續的,比如上面的函式
,當x=1,2,3時。影象為紅色的點
當定義域能夠在自然數上取值的時候,那麼這就是一個離散函數了。
差分
假設有一個函式:
,列出幾項
x
f(x)
1
1
2
4
3
9
4
16
那麼差分就表示為前後相鄰的兩個離散函式的差值。
比如定義一個
差分:
。
這種由後一個值-前一個值的差分,表示前向差分,記為
。
那麼後向差分
表示為:
。(
讀作nabla)
中心差分
表示為:
。
這裡我們列出前幾項前向差分:
x
f(x)
前向差分
1
1
3
2
4
5
3
9
7
4
16
9
我們可以看到它是一個等差數列。這個特性可以讓它用在很多電路系統中,求出離散變數的導數。經過一次差分計算叫做一階差分,在一階差分的基礎上再次進行差分,有:
x
f(x)
一階前向差分
二階前向差分
1
1
3
2
2
4
5
2
3
9
7
2
4
16
9
2
可以看到二階(前向)差分是一個常數列。也就是差分的差分,這個和導數求導書的二階導書有異曲同工之妙。
由於差分的這個性質,顯然,我們可以用差分來求影象的邊緣,做邊緣檢測。
多個變數的偏導差分
剛剛介紹和列出的函式都是一個自變數x,如果引申到多變數的情況。我們對x和y兩個變數求偏導,這時候可以把差分看成微分一樣的東西。那我們對x求差分偏導有:
。
由於函式是一個離散函式,x的後向差分為1(2-1=1),所以分母項是1。如果把y也考慮進來。
。
可以看到這是一個後向偏導差分
拉普拉斯運算元
差分反映了離散函式的值的變化,導數和微分反應的是連續函式的值的變化。對灰度圖不同的兩個畫素點進行差分計算,就能夠得到兩個畫素點的變化快慢。變化過快的地方,就是我們理解的邊緣。所以一階差分是可以檢測邊緣的。
但是,如果以上面這張灰度漸變圖為例子,如果用一階差分從左到右的進行計算,那麼可以發現這裡的一階差分一直都會存在,這個和我們的常識是不同的,儘管它有灰度的變化,但是並不是一個邊緣。那麼很容易就想到上面提到的二階差分。沒錯,二階差分常用來做邊緣檢測的,在這種連續的灰度變化圖片中,它的二階差分始終是0。
加入一張影象的函式表現形式為:
。它的一階偏差分為:(其實和偏導是一樣的)
它的二階偏差分為:
上面這個看著有點複雜,簡化一下:
所以,關於函式
的二階差分寫作:(這裡類比二階混合偏導是相等的)
這個就是大名鼎鼎的
拉普拉斯運算元
用畫素表示為下,用中間(圓圈)的上下左右的畫素值的和-4倍的中間畫素值。(圖片來源(13條訊息) Laplace(拉普拉斯)運算元_Sagacity_1125的部落格-CSDN部落格_拉普拉斯運算元,侵刪)
程式碼示例
強大的opencv已經實現了這些傳統運算元了。下面看一下拉普拉斯運算元在影象上的展現。
import cv2
src = cv2。imread(“/home/em/Pictures/images/8。jpg”)
cv2。imshow(“src”,src)
lap = cv2。Laplacian(src, cv2。CV_64F)
img1 = cv2。convertScaleAbs(lap)
cv2。imshow(“lap”,img1)
cv2。waitKey(0)
效果圖
參考
拉普拉斯運算元 - 知乎 (zhihu。com)
(13條訊息) Laplace(拉普拉斯)運算元_Sagacity_1125的部落格-CSDN部落格_拉普拉斯運算元
(13條訊息) 簡單易懂地向你解釋:離散函式,差分,二階差分和 Laplacian 濾波原理_class zl=new ZhanL的部落格-CSDN部落格_離散函式
上一篇:教你如何做“甩手掌櫃”
下一篇:神秘買家,何仙姑