Python 计算机视觉(十)—— OpenCV 图像锐化及边缘检测
參考的一些文章以及論文我都會給大家分享出來 —— 鏈接就貼在原文,論文我上傳到資源中去,大家可以免費(fèi)下載學(xué)習(xí),如果當(dāng)天資源區(qū)找不到論文,那就等等,可能正在審核,審核完后就可以下載了。大家一起學(xué)習(xí),一起進(jìn)步!加油!!
目錄
前言
(1)圖像銳化
(2)圖像邊緣檢測
a. 圖像邊緣
b. 邊緣檢測
1. 一階微分算算子、二階微分算子
2. 讀取圖像信息
3. Sobel 算子
4. Laplacian 算子
5. Scharr 算子
6. Canny 算子
7. 總結(jié)
8. 參考論文
?????
前言
(1)圖像銳化
? ? ? ?前一篇文章中我們進(jìn)行了對圖像的噪聲的濾除操作,使用的手段是進(jìn)行圖像平滑,我們提到圖像平滑是將圖像中的高頻部分進(jìn)行濾除,然而圖像中的高頻部分則是主要決定了圖像的一些細(xì)節(jié)部分,因此濾除高頻部分就代表著圖像會變得模糊,這對與圖像的處理來說不太友好,所以我們要適當(dāng)對平滑后的圖像進(jìn)行銳化操作,使得圖像的一些邊緣部分變得更加清晰,便于我們觀察圖像的信息。
(2)圖像邊緣檢測
a. 圖像邊緣
? ? ? ?圖像的大部分信息都存在于圖像的邊緣中 ,主要表現(xiàn)為圖像局部特征的不連續(xù)性,即圖像中灰度變化比較劇烈的地方。因此 ,我們把圖像的邊緣定義為圖像中灰度發(fā)生急劇變化的區(qū)域邊界。根據(jù)灰度變化的劇烈程度, 通常將邊緣劃分為階躍狀和屋頂狀兩種類型。階躍邊緣兩邊的灰度值變化明顯,而屋頂邊緣位于灰度值增加與減少的交界處。
b. 邊緣檢測
? ? ???邊緣檢測的目的是去發(fā)現(xiàn)圖像中關(guān)于形狀和反射或透射比的信息, 是圖像處理、圖像分析、模式識別、計算機(jī)視覺以及人類視覺的基本步驟之一。 其結(jié)果的正確性和可靠性將直接影響到機(jī)器視覺系統(tǒng)對客觀世界的理解。
? ? ? ?本篇文章主要進(jìn)行 Python 實(shí)際操作,不進(jìn)行一些概念的解釋和數(shù)學(xué)推導(dǎo),以后有時間專門出一篇特別篇進(jìn)行概念解釋。
1. 一階微分算算子、二階微分算子
? ? ? ? 前面我們提到,圖像邊緣分為階躍狀和屋頂狀兩種類型,其中階躍邊緣兩邊的灰度值變化明顯,而屋頂邊緣位于灰度值增加與減少的交界處。
? ? ? ?那么, 對階躍邊緣和屋頂邊緣分別求取一階、二階導(dǎo)數(shù)就可以表示邊緣點(diǎn)的變化。即對于一個階躍邊緣點(diǎn),其灰度變化曲線的一階導(dǎo)數(shù)在該點(diǎn)達(dá)到極大值, 二階導(dǎo)數(shù)在該點(diǎn)與零交叉(一階導(dǎo)數(shù)與二階導(dǎo)數(shù)的意義);對于一個屋頂邊緣點(diǎn),其灰度變化曲線的一階導(dǎo)數(shù)在該點(diǎn)與零交叉(因?yàn)樵擖c(diǎn)為一個局部最大值點(diǎn));二階導(dǎo)數(shù)在該點(diǎn)達(dá)到極大值。
2. 讀取圖像信息
? ? ? ?在我們這個計算機(jī)視覺的專欄文章里第一步永遠(yuǎn)是經(jīng)典的讀取圖像信息,而且是美女圖像信息:
""" Author:XiaoMa date:2021/10/29 """ import cv2 import matplotlib.pyplot as plt #讀取圖像信息 img0 = cv2.imread("E:\From Zhihu\For the desk\cvten2.jpg") img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5) img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) cv2.imwrite("E:\From Zhihu\For the desk\cvtenGray.jpg", img2) #保存灰度圖 h, w = img1.shape[:2] print(h, w) cv2.namedWindow("W0") cv2.imshow("W0", img1) cv2.waitKey(delay = 0)得到圖像信息如下:
?395 702
我們接下來要做的就是對圖像進(jìn)行邊緣檢測
3. Sobel 算子
#Sobel 算子 img3 = cv2.Sobel (img2, cv2.CV_64F, 0, 1, ksize=5) cv2.namedWindow("W3") cv2.imshow("W3", img3) cv2.waitKey(delay = 0)4. Laplacian 算子
#Laplacian 算子 img7 = cv2.Laplacian(img2, cv2.CV_64F) cv2.namedWindow("W7") cv2.imshow("W7", img7) cv2.waitKey(delay = 0)5. Scharr 算子
#Scharr 算子 img9 = cv2.Scharr(img2, cv2.CV_64F, 0, 1) cv2.namedWindow("W9") cv2.imshow("W9", img9) cv2.waitKey(delay = 0)6. Canny 算子
#canny 算子 img4 = cv2.Canny(img2, 100, 200) cv2.namedWindow("W4") cv2.imshow("W4", img4) cv2.waitKey(delay = 0)7. 總結(jié)
? ? ? ?這天時間比較緊,這篇博文在介紹圖像的銳化以及邊緣檢測時沒有涉及到過多的理論知識以及概念公式等,后面閑下來會加以補(bǔ)充或者專門寫一篇總結(jié)理論知識的文章,希望能幫到大家。參考論文按照慣例貼在下面。
8. 參考論文
?
總結(jié)
以上是生活随笔為你收集整理的Python 计算机视觉(十)—— OpenCV 图像锐化及边缘检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 计算机视觉(九)—— Op
- 下一篇: Python 计算机视觉(十一)—— O