Laplacian 算子:
原理分析:
Sobel 算子 : 在一個圖像區域中的邊緣部分,像素值出現“跳躍”或者較大的變化。如果在此邊緣部分求取一階導數,會看到極值的出現如圖:
如果在邊緣部分求二階導數會出現什麼情況?
會發現在一階導數的極值位置,二階導數爲0 。所以我們也可以用這個特點來作爲檢測圖像邊緣的方法。但是,二階導數的 0 值不僅僅
出現在邊緣(它們也可能出現在無意義的位置),但是我們可以過濾掉這些點。
Laplacian 算子
從以上分析中,我們推論二階導數可以用來 檢測邊緣 。 因爲圖像是 “2維”, 我們需要在兩個方向求導。使用Laplacian算子將會使求導過程變得簡單。
Laplacian 算子 的定義:
OpenCV函數 Laplacian 實現了Laplacian算子。 實際上,由於 Laplacian使用了圖像梯度,它內部調用了 Sobel 算子。
Laplace函數實現的方法是先用Sobel 算子計算二階x和y導數,再求和。
Laplace算子的函數原型:
dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
src -- 原圖像
ddepth -- 圖像的深度, -1 表示採用的是與原圖像相同的深度。目標圖像的深度必須大於等於原圖像的深度
【可選參數】
dst -- 目標圖像
ksize -- 算子的大小,必須爲1、3、5、7。默認爲1
scale -- 是縮放導數的比例常數,默認情況下沒有伸縮係數
delta -- 是一個可選的增量,將會加到最終的dst中,同樣,默認情況下沒有額外的值加到dst中
borderType -- 是判斷圖像邊界的模式。這個參數默認值爲cv2.BORDER_DEFAULT。。
使用示例:
#!/usr/bin/env python
# encoding: utf-8
import cv2
import numpy as np
img = cv2.imread("3.jpg", 0)
gray_lap = cv2.Laplacian(img,cv2.CV_16S,ksize = 3)
dst = cv2.convertScaleAbs(gray_lap)
cv2.imshow('laplacian',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
圖像效果:
爲了突出效果,這裏 ksize= 3
參考和轉載:
http://blog.csdn.net/sunny2038/article/details/9188441
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.html