圖像處置過程中邊緣檢測常采用索貝爾,拉普拉斯算子等方式。普遍用于各類處置方式前期加工之中,方式也良多。本文采用python的opencv函數庫利用Laplacian算子實現邊緣檢測。
理論描述:
按照官網描述和圖形描畫,第一張圖可知:diyiznag可以形象得知,強度的一階導數,邊緣的特征是最大值,是像素強度顯示“跳躍”或強度的高轉變。
第二張圖可知二階導數為零時,是邊緣跳躍或強度的高轉變。也就是邊緣。
這兩張圖很是形象的描畫了邊緣檢測的理論根本。
為了簡單,本身構建了一個米框圖,便于不雅察!
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
image = cv.imread('c:\\black_MiLine.png',0)
cv.imshow('image',image)
cv.waitKey(0)
Laplacian函數簡介:
dst = cv.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
前兩個是必需的參數:
第一個原圖像;
第二個是圖像的深度,-1暗示與原圖像不異深度。方針圖像深度必需大于等于原圖像深度;
厥后是可選的參數:
dst方針圖像;
ksize是算子的巨細,必需為1、3、5、7。默認為1。
scale是縮放導數的比例常數,默認無伸縮系數;
delta是可選增量,會加到最終的dst中,默認環境下無額外的值加dst;
borderType是判定圖像鴻溝模式。缺省cv.BORDER_DEFAULT。
進行變換:
Laplacian = cv.Laplacian(image, cv.CV_16S, ksize=3)cv.imshow('Laplacian',Laplacian)
我們發現輸出是會的。沒有其他內容。
對上述成果進行convertScaleAbs,再看成果!
Laplacian_result = cv.convertScaleAbs(Laplacian)
print(Laplacian_result)
cv.imshow('Laplacian_result',Laplacian_result)
cv.waitKey(0)
再來一個單步模擬
kernel = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]],np.float32)
image_tmp = np.float64(image)
img_filter = cv.filter2D(image_tmp,-1,kernel)
cv.imshow('img_filter',img_filter)
cv.waitKey(0)
至此完當作拉普拉斯算子。
0 篇文章
如果覺得我的文章對您有用,請隨意打賞。你的支持將鼓勵我繼續創作!