日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV+python:图像梯度

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV+python:图像梯度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,圖像梯度的概念
梯度簡單來說就是求導,在圖像上表現出來的就是提取圖像的邊緣(無論是橫向的、縱向的、斜方向的等等),所需要的是一個核模板。模板的不同結果也不同。所以能夠看到,全部的這些個算子函數,歸結究竟都能夠用函數cv2.filter2D()來表示,不同的方法給予不同的核模板,然后演化為不同的算子。

在微積分中,一維函數的一階微分的基本定義是這樣的:


而圖像是一個二維函數f(x,y),其微分當然就是偏微分。因此有:

因為圖像是一個離散的二維函數,?不能無限小,我們的圖像是按照像素來離散的,最小的?就是1像素。因此,上面的圖像微分又變成了如下的形式(?=1):


這分別是圖像在(x, y)點處x方向和y方向上的梯度,從上面的表達式可以看出來,圖像的梯度相當于2個相鄰像素之間的差值。x方向和y方向上的梯度可以用如下式子表示在一起:

這里又是平方,又是開方的,計算量比較大,于是一般用絕對值來近似平方和平方根的操作,來降低計算量:

2,經典的圖像梯度算法
經典的圖像梯度算法考慮圖像的每個像素的某個鄰域內的灰度變化,利用邊緣臨近的一階或二階導數變化規律,對原始圖像中像素某個鄰域設置梯度算子,通常我們用小區域模板進行卷積來計算,OpenCV提供了三種不同的梯度濾波器,或者說高通濾波器:Sobel,Scharr和Lapacian。Sobel,Scharr其實就是求一階或二階導。Scharr是對Sobel的部分優化。Laplacian是求二階導。 假如對一幅數字圖像,求出M之后與原來每個像素點對應值相加,則圖像邊緣將被大大加強,輪廓更加明顯,是一個很典型的sharp filter的效果。

關于Sobel算子與Scharr算子:

關于拉普拉斯(Laplacian)算子:

源代碼示例:

import cv2 as cv
import numpy as npdef lapalian_demo(image):#dst = cv.Laplacian(image, cv.CV_32F)#默認為4領域拉普拉斯算子#lpls = cv.convertScaleAbs(dst)kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])#自定義的8領域拉普拉斯算子dst = cv.filter2D(image, cv.CV_32F, kernel=kernel)lpls = cv.convertScaleAbs(dst)cv.imshow("lapalian_demo", lpls)def sobel_demo(image):#grad_x = cv.Sobel(image, cv.CV_32F, 1, 0)#grad_y = cv.Sobel(image, cv.CV_32F, 0, 1)grad_x = cv.Scharr(image, cv.CV_32F, 1, 0)#cv.Sobel的增強版,對噪聲比較敏感grad_y = cv.Scharr(image, cv.CV_32F, 0, 1)gradx = cv.convertScaleAbs(grad_x) #求絕對值并轉化為8位的圖像上grady = cv.convertScaleAbs(grad_y)cv.imshow("gradient-x", gradx)cv.imshow("gradient-y", grady)gradxy = cv.addWeighted(gradx, 0.5, grady, 0.5, 0)cv.imshow("gradient", gradxy)src = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
sobel_demo(src)
lapalian_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

運行結果:


關于canny邊緣檢測算子,細究的話比較的復雜,將在下一篇文章中具體介紹。

總結

以上是生活随笔為你收集整理的OpenCV+python:图像梯度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。