當(dāng)前位置:
首頁(yè) >
十三、图像梯度
發(fā)布時(shí)間:2023/12/1
38
豆豆
一、兩種算子
一階導(dǎo)數(shù)—Sobel算子
水平梯度:
垂直梯度:
最終圖像梯度:
二階導(dǎo)數(shù)—Laplacian算子
在二階導(dǎo)數(shù)的時(shí)候,最大變化處的值為零,即邊緣是零值。
常見(jiàn)的拉普拉斯算子:、其所有元素之和為零。
二、Sobel算子
cv2.Sobel(image,cv2.CV_32F,1,0)image為代求的圖像;CV_32F為圖像的深度(32為float類(lèi)型),255肯定不夠,故選擇大點(diǎn)
cv2.convertScaleAbs(grad_x)將計(jì)算出來(lái)的正負(fù)數(shù)全部轉(zhuǎn)換為正值,然后轉(zhuǎn)換到8位的圖像上去
效果圖如下:
三、Scharr算子(Sobel算子的增強(qiáng)版),但對(duì)噪聲更加敏感
import cv2 import numpy as np from matplotlib import pyplot as pltdef sobel(image):grad_x = cv2.Scharr(image,cv2.CV_32F,1,0)grad_y = cv2.Scharr(image,cv2.CV_32F,0,1)gradx = cv2.convertScaleAbs(grad_x)grady = cv2.convertScaleAbs(grad_y)cv2.imshow("gradient-x",gradx)cv2.imshow("gradient-y",grady)gradxy = cv2.addWeighted(gradx,0.5,grady,0.5,0)cv2.imshow("gradient",gradxy)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg") cv2.imshow("image",src) cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE) sobel(src)cv2.waitKey(0) cv2.destroyAllWindows()效果圖如下:
四、Laplacian算子(直接調(diào)用API)
import cv2 import numpy as np from matplotlib import pyplot as pltdef lapalian(image):dst = cv2.Laplacian(image,cv2.CV_32F)lpls = cv2.convertScaleAbs(dst)cv2.imshow("lapalian",lpls)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg") cv2.imshow("image",src) cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE) lapalian(src)cv2.waitKey(0) cv2.destroyAllWindows()效果圖如下:
五、Laplacian算子(自定義卷積核)
import cv2 import numpy as np from matplotlib import pyplot as pltdef lapalian(image):#kernel = np.array([[1,1,1],[1,-8,1],[1,1,1]])kernel = np.array([[0,1,0],[1,-4,1],[0,1,0]])dst = cv2.filter2D(image,cv2.CV_32F,kernel=kernel)lpls = cv2.convertScaleAbs(dst)cv2.imshow("lapalian",lpls)src = cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg") cv2.imshow("image",src) cv2.namedWindow("image",cv2.WINDOW_AUTOSIZE) lapalian(src)cv2.waitKey(0) cv2.destroyAllWindows()效果圖如下:
總結(jié)
- 上一篇: 江湖悠悠桃花怎么获得
- 下一篇: 十四、Canny边缘提取