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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎關注 『youcans 的 OpenCV 例程 200 篇』 系列,持續更新中
歡迎關注 『youcans 的 OpenCV學習課』 系列,持續更新中


【youcans 的 OpenCV 例程200篇】150. 邊緣檢測梯度算子


2. 點、線和邊緣檢測

本節基于圖像灰度的不連續性,討論根據灰度的突變檢測邊界,以此為基礎進行圖像分割。

  • 邊緣像素是圖像中灰度突變的像素,而邊緣是相連邊緣像素的集合。
  • 線是一條細邊緣線段,其兩側的背景灰度與線段的像素灰度存在顯著差異。
  • 孤立的點是一個被背景像素圍繞的前景像素,或一個被前景像素圍繞的背景像素。

導數可以用來檢測灰度的局部突變:

  • 一階導數通常產生粗邊緣;
  • 二階導數對精細細節(如細線、孤立點和噪聲)的響應更強;
  • 二階導數在灰度斜坡和臺階過渡處會產生雙邊緣響應,即二階導數在進入和離開邊緣時的符號相反;
  • 二階導數的符號可用于確定邊緣的過渡是從亮到暗還是從暗到亮。

計算圖像中每個像素位置的一階導數和二階導數的方法是空間卷積。對一個 3*3 模板,計算模板區域內灰度值與模板系數的卷積。


2.4 邊緣檢測的常用梯度算子

邊緣檢測的基本方法通常是基于一階導數和二階導數的,因此需要進行圖像的梯度計算。圖像的梯度可以用一階導數和二階偏導數來求解。

以矩陣形式表達的數字圖像 f,任意位置 (x,y) 的梯度 ?f\nabla f?f 定義為向量:
?f=grad(f)=[gxgy]=[?f/?x?f/?x]\nabla f = grad(f) =\begin{bmatrix} g_x \\ g_y \end{bmatrix} =\begin{bmatrix} \partial f /\partial x \\ \partial f /\partial x \end{bmatrix} ?f=grad(f)=[gx?gy??]=[?f/?x?f/?x?]
梯度算子的前向差分公式為:
gx(x,y)=?f(x,y)?x=f(x+1,y)?f(x,y)gy(x,y)=?f(x,y)?y=f(x,y+1)?f(x,y)g_x(x,y) = \dfrac{\partial f(x,y)}{\partial x} = f(x+1,y) - f(x,y) \\ g_y(x,y) = \dfrac{\partial f(x,y)}{\partial y} = f(x,y+1) - f(x,y) \\ gx?(x,y)=?x?f(x,y)?=f(x+1,y)?f(x,y)gy?(x,y)=?y?f(x,y)?=f(x,y+1)?f(x,y)
梯度向量的幅度 M 和角度 α\alphaα 為:
M(x,y)=∣∣?f∣∣=gx2+gy2α(x,y)=arctan[gy/gx]M(x,y) = ||\nabla f|| = \sqrt {g_x^2 + g_y^2} \\ \alpha (x,y) = arctan[g_y / g_x] M(x,y)=?f=gx2?+gy2??α(x,y)=arctan[gy?/gx?]
在實際編程中,為了減少計算量,常用絕對值來近似梯度幅度:
M(x,y)≈∣gx∣+∣gy∣M(x,y) \approx |g_x| + |g_y| M(x,y)gx?+gy?
根據梯度算子的定義和基本公式,可以發展多種不同的計算算法,稱為梯度算子。對于圖像的梯度計算,通常采用模板(卷積核)對原圖像進行卷積運算來實現。

Robert 梯度算子:
簡單的交叉差分算法,利用局部差分算子尋找邊緣,采用對角線相鄰兩像素差作為梯度值檢測邊緣。形式簡單,計算速度快,但對噪聲敏感,無法抑制噪聲。

Prewitt 算子:
利用兩個方向模板與圖像進行鄰域卷積,一個方向模板檢測水平邊緣,另一個檢測垂直邊緣。能夠抑制噪聲,但對邊緣的定位較 Roberts 算子差。

Sobel 算子:
是高斯平滑和微分求導的聯合運算,抗噪聲能力強。考慮了距離對權值的影響,距離越遠的像素的影響越小。可以通過快速卷積實現,簡單有效,應用廣泛。

Isotropic Sobel 算子:
權值反比于中心距,具有各向同性,沿不同方向檢測邊緣時梯度幅度一致。

Scharr 算子:
是 Sobel 算子在 ksize=3 時的優化,在平滑部分中心元素占的權重更大,相當于使用更瘦高的平滑模板。與 Sobel 的速度相同,精度更高。

Lapacian 算子:
二階微分算子,具有各向同向性,與坐標軸無關(無法檢測方向)。對噪聲非常敏感,可以先進行閾值處理或平滑處理。

這些基本的一階、二階微分算子如 Robert、Sobel、Prewitt、Laplacian 等,本質上都可以用于檢測邊緣,也被稱為邊緣檢測算子。進一步地,考慮邊緣和噪聲的性質,可以改進邊緣檢測算子,如 Marr-Hildreth 算子、Canny 算子。


例程 11.4:邊緣檢測梯度算子

# 11.4 邊緣檢測的梯度算子 (Roberts 算子, Prewitt 算子, Sobel 算子, Laplacian 算子)img = cv2.imread("../images/Fig1016a.tif", flags=0) # 讀取為灰度圖像# 自定義卷積核# Roberts 邊緣算子kernel_Roberts_x = np.array([[1, 0], [0, -1]])kernel_Roberts_y = np.array([[0, -1], [1, 0]])# Prewitt 邊緣算子kernel_Prewitt_x = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]])kernel_Prewitt_y = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]])# Sobel 邊緣算子kernel_Sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])kernel_Sobel_y = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]])# Laplacian 邊緣算子kernel_Laplacian_K1 = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])kernel_Laplacian_K2 = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])# 卷積運算imgBlur = cv2.blur(img, (3,3)) # Blur 平滑后再做 Laplacian 變換imgLaplacian_K1 = cv2.filter2D(imgBlur, -1, kernel_Laplacian_K1)imgLaplacian_K2 = cv2.filter2D(imgBlur, -1, kernel_Laplacian_K2)imgRoberts_x = cv2.filter2D(img, -1, kernel_Roberts_x)imgRoberts_y = cv2.filter2D(img, -1, kernel_Roberts_y)imgRoberts = np.uint8(cv2.normalize(abs(imgRoberts_x) + abs(imgRoberts_y), None, 0, 255, cv2.NORM_MINMAX))imgPrewitt_x = cv2.filter2D(img, -1, kernel_Prewitt_x)imgPrewitt_y = cv2.filter2D(img, -1, kernel_Prewitt_y)imgPrewitt = np.uint8(cv2.normalize(abs(imgPrewitt_x) + abs(imgPrewitt_y), None, 0, 255, cv2.NORM_MINMAX))imgSobel_x = cv2.filter2D(img, -1, kernel_Sobel_x)imgSobel_y = cv2.filter2D(img, -1, kernel_Sobel_y)imgSobel = np.uint8(cv2.normalize(abs(imgSobel_x) + abs(imgSobel_y), None, 0, 255, cv2.NORM_MINMAX))plt.figure(figsize=(12, 8))plt.subplot(341), plt.title('Origin'), plt.imshow(img, cmap='gray'), plt.axis('off')plt.subplot(345), plt.title('Laplacian_K1'), plt.imshow(imgLaplacian_K1, cmap='gray'), plt.axis('off')plt.subplot(349), plt.title('Laplacian_K2'), plt.imshow(imgLaplacian_K2, cmap='gray'), plt.axis('off')plt.subplot(342), plt.title('Roberts'), plt.imshow(imgRoberts, cmap='gray'), plt.axis('off')plt.subplot(346), plt.title('Roberts_X'), plt.imshow(imgRoberts_x, cmap='gray'), plt.axis('off')plt.subplot(3,4,10), plt.title('Roberts_Y'), plt.imshow(imgRoberts_y, cmap='gray'), plt.axis('off')plt.subplot(343), plt.title('Prewitt'), plt.imshow(imgPrewitt, cmap='gray'), plt.axis('off')plt.subplot(347), plt.title('Prewitt_X'), plt.imshow(imgPrewitt_x, cmap='gray'), plt.axis('off')plt.subplot(3,4,11), plt.title('Prewitt_Y'), plt.imshow(imgPrewitt_y, cmap='gray'), plt.axis('off')plt.subplot(344), plt.title('Sobel'), plt.imshow(imgSobel, cmap='gray'), plt.axis('off')plt.subplot(348), plt.title('Sobel_X'), plt.imshow(imgSobel_x, cmap='gray'), plt.axis('off')plt.subplot(3,4,12), plt.title('Sobel_Y'), plt.imshow(imgSobel_y, cmap='gray'), plt.axis('off')plt.tight_layout()plt.show()


(本節完)


版權聲明:

youcans@xupt 原創作品,轉載必須標注原文鏈接:(https://blog.csdn.net/youcans/article/details/124073181)

Copyright 2022 youcans, XUPT
Crated:2022-4-10


歡迎關注 『youcans 的 OpenCV 例程 200 篇』 系列,持續更新中
歡迎關注 『youcans 的 OpenCV學習課』 系列,持續更新中

【youcans 的 OpenCV 例程200篇】01. 圖像的讀取(cv2.imread)
【youcans 的 OpenCV 例程200篇】02. 圖像的保存(cv2.imwrite)
【youcans 的 OpenCV 例程200篇】03. 圖像的顯示(cv2.imshow)
【youcans 的 OpenCV 例程200篇】04. 用 matplotlib 顯示圖像(plt.imshow)
【youcans 的 OpenCV 例程200篇】05. 圖像的屬性(np.shape)
【youcans 的 OpenCV 例程200篇】06. 像素的編輯(img.itemset)
【youcans 的 OpenCV 例程200篇】07. 圖像的創建(np.zeros)
【youcans 的 OpenCV 例程200篇】08. 圖像的復制(np.copy)
【youcans 的 OpenCV 例程200篇】09. 圖像的裁剪(cv2.selectROI)
【youcans 的 OpenCV 例程200篇】10. 圖像的拼接(np.hstack)
【youcans 的 OpenCV 例程200篇】11. 圖像通道的拆分(cv2.split)
【youcans 的 OpenCV 例程200篇】12. 圖像通道的合并(cv2.merge)
【youcans 的 OpenCV 例程200篇】13. 圖像的加法運算(cv2.add)
【youcans 的 OpenCV 例程200篇】14. 圖像與標量相加(cv2.add)
【youcans 的 OpenCV 例程200篇】15. 圖像的加權加法(cv2.addWeight)
【youcans 的 OpenCV 例程200篇】16. 不同尺寸的圖像加法
【youcans 的 OpenCV 例程200篇】17. 兩張圖像的漸變切換
【youcans 的 OpenCV 例程200篇】18. 圖像的掩模加法
【youcans 的 OpenCV 例程200篇】19. 圖像的圓形遮罩
【youcans 的 OpenCV 例程200篇】20. 圖像的按位運算
【youcans 的 OpenCV 例程200篇】21. 圖像的疊加
【youcans 的 OpenCV 例程200篇】22. 圖像添加非中文文字
【youcans 的 OpenCV 例程200篇】23. 圖像添加中文文字
【youcans 的 OpenCV 例程200篇】24. 圖像的仿射變換
【youcans 的 OpenCV 例程200篇】25. 圖像的平移
【youcans 的 OpenCV 例程200篇】26. 圖像的旋轉(以原點為中心)
【youcans 的 OpenCV 例程200篇】27. 圖像的旋轉(以任意點為中心)
【youcans 的 OpenCV 例程200篇】28. 圖像的旋轉(直角旋轉)
【youcans 的 OpenCV 例程200篇】29. 圖像的翻轉(cv2.flip)
【youcans 的 OpenCV 例程200篇】30. 圖像的縮放(cv2.resize)
【youcans 的 OpenCV 例程200篇】31. 圖像金字塔(cv2.pyrDown)
【youcans 的 OpenCV 例程200篇】32. 圖像的扭變(錯切)
【youcans 的 OpenCV 例程200篇】33. 圖像的復合變換
【youcans 的 OpenCV 例程200篇】34. 圖像的投影變換
【youcans 的 OpenCV 例程200篇】35. 圖像的投影變換(邊界填充)
【youcans 的 OpenCV 例程200篇】36. 直角坐標與極坐標的轉換
【youcans 的 OpenCV 例程200篇】37. 圖像的灰度化處理和二值化處理
【youcans 的 OpenCV 例程200篇】38. 圖像的反色變換(圖像反轉)
【youcans 的 OpenCV 例程200篇】39. 圖像灰度的線性變換
【youcans 的 OpenCV 例程200篇】40. 圖像分段線性灰度變換
【youcans 的 OpenCV 例程200篇】41. 圖像的灰度變換(灰度級分層)
【youcans 的 OpenCV 例程200篇】42. 圖像的灰度變換(比特平面分層)
【youcans 的 OpenCV 例程200篇】43. 圖像的灰度變換(對數變換)
【youcans 的 OpenCV 例程200篇】44. 圖像的灰度變換(伽馬變換)
【youcans 的 OpenCV 例程200篇】45. 圖像的灰度直方圖
【youcans 的 OpenCV 例程200篇】46. 直方圖均衡化
【youcans 的 OpenCV 例程200篇】47. 圖像增強—直方圖匹配
【youcans 的 OpenCV 例程200篇】48. 圖像增強—彩色直方圖匹配
【youcans 的 OpenCV 例程200篇】49. 圖像增強—局部直方圖處理
【youcans 的 OpenCV 例程200篇】50. 圖像增強—直方圖統計量圖像增強
【youcans 的 OpenCV 例程200篇】51. 圖像增強—直方圖反向追蹤
【youcans 的 OpenCV 例程200篇】52. 圖像的相關與卷積運算
【youcans 的 OpenCV 例程200篇】53. Scipy 實現圖像二維卷積
【youcans 的 OpenCV 例程200篇】54. OpenCV 實現圖像二維卷積
【youcans 的 OpenCV 例程200篇】55. 可分離卷積核
【youcans 的 OpenCV 例程200篇】56. 低通盒式濾波器
【youcans 的 OpenCV 例程200篇】57. 低通高斯濾波器
【youcans 的 OpenCV 例程200篇】58. 非線性濾波—中值濾波
【youcans 的 OpenCV 例程200篇】59. 非線性濾波—雙邊濾波
【youcans 的 OpenCV 例程200篇】60. 非線性濾波—聯合雙邊濾波
【youcans 的 OpenCV 例程200篇】61. 導向濾波(Guided filter)
【youcans 的 OpenCV 例程200篇】62. 圖像銳化——鈍化掩蔽
【youcans 的 OpenCV 例程200篇】63. 圖像銳化——Laplacian 算子
【youcans 的 OpenCV 例程200篇】64. 圖像銳化——Sobel 算子
【youcans 的 OpenCV 例程200篇】65. 圖像銳化——Scharr 算子
【youcans 的 OpenCV 例程200篇】66. 圖像濾波之低通/高通/帶阻/帶通
【youcans 的 OpenCV 例程200篇】67. 空間域圖像增強的綜合應用
【youcans 的 OpenCV 例程200篇】68. 空間域圖像增強的綜合應用
【youcans 的 OpenCV 例程200篇】69. 連續非周期信號的傅立葉系數
【youcans 的 OpenCV 例程200篇】70. 一維連續函數的傅里葉變換
【youcans 的 OpenCV 例程200篇】71. 連續函數的取樣
【youcans 的 OpenCV 例程200篇】72. 一維離散傅里葉變換
【youcans 的 OpenCV 例程200篇】73. 二維連續傅里葉變換
【youcans 的 OpenCV 例程200篇】74. 圖像的抗混疊
【youcans 的 OpenCV 例程200篇】75. Numpy 實現圖像傅里葉變換
【youcans 的 OpenCV 例程200篇】76. OpenCV 實現圖像傅里葉變換
【youcans 的 OpenCV 例程200篇】77. OpenCV 實現快速傅里葉變換
【youcans 的 OpenCV 例程200篇】78. 頻率域圖像濾波基礎
【youcans 的 OpenCV 例程200篇】79. 頻率域圖像濾波的基本步驟
【youcans 的 OpenCV 例程200篇】80. 頻率域圖像濾波詳細步驟
【youcans 的 OpenCV 例程200篇】81. 頻率域高斯低通濾波器
【youcans 的 OpenCV 例程200篇】82. 頻率域巴特沃斯低通濾波器
【youcans 的 OpenCV 例程200篇】83. 頻率域低通濾波:印刷文本字符修復
【youcans 的 OpenCV 例程200篇】84. 由低通濾波器得到高通濾波器
【youcans 的 OpenCV 例程200篇】85. 頻率域高通濾波器的應用
【youcans 的 OpenCV 例程200篇】86. 頻率域濾波應用:指紋圖像處理
【youcans 的 OpenCV 例程200篇】87. 頻率域鈍化掩蔽
【youcans 的 OpenCV 例程200篇】88. 頻率域拉普拉斯高通濾波
【youcans 的 OpenCV 例程200篇】89. 帶阻濾波器的傳遞函數
【youcans 的 OpenCV 例程200篇】90. 頻率域陷波濾波器
【youcans 的 OpenCV 例程200篇】91. 高斯噪聲、瑞利噪聲、愛爾蘭噪聲
【youcans 的 OpenCV 例程200篇】92. 指數噪聲、均勻噪聲、椒鹽噪聲
【youcans 的 OpenCV 例程200篇】93. 噪聲模型的直方圖
【youcans 的 OpenCV 例程200篇】94. 算術平均濾波器
【youcans 的 OpenCV 例程200篇】95. 幾何均值濾波器
【youcans 的 OpenCV 例程200篇】96. 諧波平均濾波器
【youcans 的 OpenCV 例程200篇】97. 反諧波平均濾波器
【youcans 的 OpenCV 例程200篇】98. 統計排序濾波器
【youcans 的 OpenCV 例程200篇】99. 修正阿爾法均值濾波器
【youcans 的 OpenCV 例程200篇】100. 自適應局部降噪濾波器
【youcans 的 OpenCV 例程200篇】101. 自適應中值濾波器
【youcans 的 OpenCV 例程200篇】102. 陷波帶阻濾波器的傳遞函數
【youcans 的 OpenCV 例程200篇】103. 陷波帶阻濾波器消除周期噪聲干擾
【youcans 的 OpenCV 例程200篇】104. 運動模糊退化模型
【youcans 的 OpenCV 例程200篇】105. 湍流模糊退化模型
【youcans 的 OpenCV 例程200篇】106. 退化圖像的逆濾波
【youcans 的 OpenCV 例程200篇】107. 退化圖像的維納濾波
【youcans 的 OpenCV 例程200篇】108. 約束最小二乘方濾波
【youcans 的 OpenCV 例程200篇】109. 幾何均值濾波
【youcans 的 OpenCV 例程200篇】110. 投影和雷登變換
【youcans 的 OpenCV 例程200篇】111. 雷登變換反投影重建圖像
【youcans 的 OpenCV 例程200篇】112. 濾波反投影重建圖像
【youcans 的 OpenCV 例程200篇】113. 形態學操作之腐蝕
【youcans 的 OpenCV 例程200篇】114. 形態學操作之膨脹
【youcans 的 OpenCV 例程200篇】115. 形態學操作之開運算
【youcans 的 OpenCV 例程200篇】116. 形態學操作之閉運算
【youcans 的 OpenCV 例程200篇】117. 形態學操作之頂帽運算
【youcans 的 OpenCV 例程200篇】118. 形態學操作之底帽運算
【youcans 的 OpenCV 例程200篇】119. 圖像的形態學梯度
【youcans 的 OpenCV 例程200篇】120. 擊中-擊不中變換
【youcans 的 OpenCV 例程200篇】121. 擊中-擊不中用于特征識別
【youcans 的 OpenCV 例程200篇】122. 形態算法之邊界提取
【youcans 的 OpenCV 例程200篇】123. 形態算法之孔洞填充
【youcans 的 OpenCV 例程200篇】124. 孔洞填充的泛洪算法
【youcans 的 OpenCV 例程200篇】125. 形態算法之提取連通分量
【youcans 的 OpenCV 例程200篇】126. 形態算法之凸殼
【youcans 的 OpenCV 例程200篇】127. 形態算法之細化
【youcans 的 OpenCV 例程200篇】128. 形態算法之骨架 (skimage)
【youcans 的 OpenCV 例程200篇】129. 形態算法之骨架 (重建開運算)
【youcans 的 OpenCV 例程200篇】130. 形態學之提取水平和垂直線
【youcans 的 OpenCV 例程200篇】131. 形態學重建之豎線字符提取
【youcans 的 OpenCV 例程200篇】132. 形態學重建之孔洞填充算法
【youcans 的 OpenCV 例程200篇】133. 形態學重建之邊界清除
【youcans 的 OpenCV 例程200篇】134. 形態學重建之細胞計數
【youcans 的 OpenCV 例程200篇】135. 形態學重建之粒度測定
【youcans 的 OpenCV 例程200篇】136. 灰度腐蝕和灰度膨脹
【youcans 的 OpenCV 例程200篇】137. 灰度開運算和灰度閉運算原理
【youcans 的 OpenCV 例程200篇】138. 灰度開運算和灰度閉運算
【youcans 的 OpenCV 例程200篇】139. 灰度頂帽變換校正陰影
【youcans 的 OpenCV 例程200篇】140. 灰度底帽變換校正光照
【youcans 的 OpenCV 例程200篇】141. 灰度底帽變換的三維地形圖
【youcans 的 OpenCV 例程200篇】142. 基于灰度形態學的圖像平滑
【youcans 的 OpenCV 例程200篇】143. 基于灰度形態學的粒度測定
【youcans 的 OpenCV 例程200篇】144. 基于灰度形態學的紋理分割
【youcans 的 OpenCV 例程200篇】145. 形態學之邊緣和角點檢測
【youcans 的 OpenCV 例程200篇】146. 基于灰度形態學的復雜背景圖像重建
【youcans 的 OpenCV 例程200篇】147. 圖像分割之孤立點檢測
【youcans 的 OpenCV 例程200篇】148. 圖像分割之線檢測
【youcans 的 OpenCV 例程200篇】149. 圖像分割之邊緣模型
【youcans 的 OpenCV 例程200篇】150. 邊緣檢測梯度算子

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子的全部內容,希望文章能夠幫你解決所遇到的問題。

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