Python OpenCV -- Laplacian 算子(十)

Laplacian 算子:

    原理分析:

  Sobel 算子 : 在一個圖像區域中的邊緣部分,像素值出現“跳躍”或者較大的變化。如果在此邊緣部分求取一階導數,會看到極值的出現如圖:

Previous theory

  如果在邊緣部分求二階導數會出現什麼情況?

Second derivative  會發現在一階導數的極值位置,二階導數爲0 。所以我們也可以用這個特點來作爲檢測圖像邊緣的方法。但是,二階導數的 0 值不僅僅

出現在邊緣(它們也可能出現在無意義的位置),但是我們可以過濾掉這些點。


Laplacian 算子

  從以上分析中,我們推論二階導數可以用來 檢測邊緣 。 因爲圖像是 “2維”, 我們需要在兩個方向求導。使用Laplacian算子將會使求導過程變得簡單。

  Laplacian 算子 的定義:

                                             Laplace(f) = \dfrac{\partial^{2} f}{\partial x^{2}} + \dfrac{\partial^{2} f}{\partial y^{2}}

  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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章