摘要:提供三種類型的梯度濾波器或高通濾波器,,和和導(dǎo)數(shù)算子是結(jié)合了高斯平滑與微分運(yùn)算的結(jié)合方法,所以它的抗噪聲能力很強(qiáng)用戶可以設(shè)定求導(dǎo)方向,水平或者垂直通過(guò)參數(shù)和也可以指定卷積核大小,通過(guò)參數(shù)如果,那么一個(gè)的濾波器會(huì)被使用,該濾波器會(huì)得到比濾波
Image Gradients
OpenCV提供三種類型的梯度濾波器或高通濾波器,Sobel,Scharr和Laplacian.
1 Sobel 和 Scharr 導(dǎo)數(shù)Sobel算子是結(jié)合了高斯平滑與微分運(yùn)算的結(jié)合方法,所以它的抗噪聲能力很強(qiáng).
用戶可以設(shè)定求導(dǎo)方向,水平或者垂直(通過(guò)參數(shù)yorder和xorder).也可以指定卷積核大小,通過(guò)參數(shù)ksize.如果ksize=-1,那么一個(gè)3*3的scharr濾波器會(huì)被使用,該濾波器會(huì)得到比Sobel濾波器更好的效果.
2該方法計(jì)算了圖像的拉普拉斯導(dǎo)數(shù):
$$ Delta src = frac{partial ^2{src}}{partial x^2} + frac{partial ^2{src}}{partial y^2} $$
每個(gè)求導(dǎo)數(shù)的方法都是使用Sobel求導(dǎo)方法,如果ksize=1,那么會(huì)使用下面核函數(shù)進(jìn)行濾波.
$$ kernel = egin{bmatrix} 0 & 1 & 0 1 & -4 & 1 0 & 1 & 0 end{bmatrix} $$
代碼:
import cv2 from matplotlib import pyplot as plt img = cv2.imread("img.jpg",0) laplacian = cv2.Laplacian(img,cv2.CV_64F) sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5) sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5) plt.subplot(2,2,1),plt.imshow(img,cmap = "gray") plt.title("Original"), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,2),plt.imshow(laplacian,cmap = "gray") plt.title("Laplacian"), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,3),plt.imshow(sobelx,cmap = "gray") plt.title("Sobel X"), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,4),plt.imshow(sobely,cmap = "gray") plt.title("Sobel Y"), plt.xticks([]), plt.yticks([]) plt.show()NOTE
在我們的上一個(gè)示例中,輸出數(shù)據(jù)類型為cv.CV_8U或np.uint8.但是這有一個(gè)小問(wèn)題.將黑到白轉(zhuǎn)換視為正斜率(它具有正值),而將白到黑轉(zhuǎn)換視為負(fù)斜率(它具有負(fù)值). 因此,當(dāng)您將數(shù)據(jù)轉(zhuǎn)換為np.uint8時(shí),所有負(fù)斜率都為零.
如果想要兩種邊界都檢測(cè)到,最高的辦法就是將輸出數(shù)據(jù)類型設(shè)置更高,cv2.CV_16S,cv2.CV_64F等等,然后取絕對(duì)值轉(zhuǎn)換為cv2.CV_8.
代碼:
import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread("img5.png",0) # Output dtype = cv.CV_8U sobelx8u = cv2.Sobel(img,cv2.CV_8U,1,0,ksize=5) # Output dtype = cv.CV_64F. Then take its absolute and convert to cv.CV_8U sobelx64f = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5) abs_sobel64f = np.absolute(sobelx64f) sobel_8u = np.uint8(abs_sobel64f) plt.subplot(1,3,1),plt.imshow(img,cmap = "gray") plt.title("Original"), plt.xticks([]), plt.yticks([]) plt.subplot(1,3,2),plt.imshow(sobelx8u,cmap = "gray") plt.title("Sobel CV_8U"), plt.xticks([]), plt.yticks([]) plt.subplot(1,3,3),plt.imshow(sobel_8u,cmap = "gray") plt.title("Sobel abs(CV_64F)"), plt.xticks([]), plt.yticks([]) plt.show()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42009.html
摘要:雖然邊低于,但它連接到邊,因此也被視為有效邊,我們得到完整的曲線。但邊緣雖然高于并且與邊緣的區(qū)域相同,但它沒(méi)有連接到任何真實(shí)邊緣,因此被丟棄。 Canny Edge Detection Canny邊緣檢測(cè)是一種流行的邊緣檢測(cè)算法.它是由John F. Canny開(kāi)發(fā)的, 這是一個(gè)多階段算法. 減少噪音由于邊緣檢測(cè)易受圖像中的噪聲影響,因此第一步是使用5x5高斯濾波器去除圖像中的噪...
摘要:使用,進(jìn)行基本的圖像處理提取紅色圓圈輪廓并繪制效果圖源碼寫(xiě)這篇博客源于博友的提問(wèn),想提取圖片中的紅色圓圈坐標(biāo),并繪制封閉的輪廓。還是使用一系列圖像處理,得到了比較理想的結(jié)果。 ...
閱讀 2074·2021-10-12 10:12
閱讀 793·2021-09-24 09:47
閱讀 1194·2021-08-19 11:12
閱讀 3471·2019-08-29 13:06
閱讀 689·2019-08-26 11:43
閱讀 2571·2019-08-23 17:20
閱讀 1154·2019-08-23 16:52
閱讀 2601·2019-08-23 14:27