圖像的邊緣是圖像的基本特徵,邊緣點是灰度階躍變化的像素點,即灰度值的導數較大或極大的地方,邊緣檢測是圖像識別的第一步。html
用圖像的一階微分和二階微分來加強圖像,本質上計算的就是灰度的變化狀況,而邊緣也就是灰度變化的地方。所以,這些傳統的一階微分算子如Robert、Sobel、prewitt等,以及二階微分算子Laplacian等等本質上都是能夠用於檢測邊緣的。這些算子均可以稱爲邊緣檢測算子。算法
邊緣檢測能夠大幅度的減小數據量,剔除那些不相關的信息,保留圖像重要的結構屬性,通常的邊緣檢測的步驟有:spa
原始圖像-->平滑圖像-->銳化圖像-->邊緣斷定-->二值化-->邊緣鏈接-->邊緣圖像.net
1) 平滑濾波:由於梯度計算容易受噪聲影響,因此先使用濾波平滑圖像去除噪聲。code
2) 銳化濾波:爲了檢測邊界,須要肯定鄰域中灰度變換,銳化突出了回答變換的區域。htm
3) 邊緣斷定:經過閾值或灰度變換,剔除某些處理點,查找邊緣點。blog
4) 邊緣鏈接:將間斷的邊緣鏈接成有意義的完整邊緣,同時去除假邊緣。ci
2.1梯度算子文檔
Robert算子利用局部差分算子尋找邊緣,邊緣定位精度較高但容易丟失一部分邊緣,同時因爲沒有對圖像進行平滑處理所以不具有抑制噪聲的能力。該算子對邊緣陡峭且噪聲較少的圖像效果較好。get
Sobel算子和prewitt算子都考慮了鄰域信息,至關於對圖像先作加權平滑處理,而後再作微分運算,因此對噪聲有必定的抑制能力,但不排除檢測結果中出現虛假邊緣,而且容易出現多像素寬度的邊緣。
2.2高斯-拉普拉斯算子
拉普拉斯算子是二階微分算子,對噪聲敏感,Laplace算子對孤立象素的響應要比對邊緣或線的響應要更強烈,所以只適用於無噪聲圖象。存在噪聲狀況下,使用Laplacian算子檢測邊緣以前須要先進行低通濾波。高斯-拉普拉斯算子,又稱LoG算子,就是爲了補充這種缺陷被創立的,它先進行高斯低通濾波,而後再進行拉普拉斯二階微分銳化。
2.3 Canny邊緣檢測算子
在圖像邊緣檢測中,抑制噪聲和邊緣精準定位是沒法同時知足的,一些邊緣檢測算法經過平滑濾波去除噪聲的同時,也增長了邊緣檢測的不肯定性,而提升邊緣檢測算子對邊緣的敏感性的同時,也提升了對噪聲的敏感性。Canny算子力圖在抗噪聲干擾和精準定位之間尋求最佳折中方案。
Canny算法主要有4個步驟:
基於梯度的算子邊緣檢測:
BW=edge(img, type, thresh, direction, ‘nothinning’)
img:輸入圖像
type:算子類型,有sobel,Prwitt,roberts,log, canny
thresh:敏感度閾值,灰度低於此閾值的邊緣不會被檢測到,默認是空矩陣,自動計算閾值。
direction:指定感興趣的邊緣方向,horizontal,vertical,both
最後一個可選參數,thinning會進行邊緣細化,不填就會跳過該步驟
imgPath = 'E:\opencv_pic\src_pic\pic7.bmp'; img = imread(imgPath); Img=rgb2gray(img); Img_canny = edge(Img,'canny'); %canny Img_roberts = edge(Img,'roberts'); %reberts Img_prewitt = edge(Img,'prewitt'); %prewitt Img_sobel=edge(Img,'sobel'); %sobel Img_log=edge(Img,'log'); %log subplot(2,3,1),imshow(Img), title('原始圖像'); subplot(2,3,2),imshow(Img_canny), title('Img canny'); subplot(2,3,3),imshow(Img_roberts),title('Img roberts'); subplot(2,3,4),imshow(Img_prewitt),title('Img prewitt'); subplot(2,3,5),imshow(Img_sobel),title('Img sobel'); subplot(2,3,6),imshow(Img_log),title('Img LoG');
放大觀察,candy效果最優,Log次之。Log算子檢測邊緣的結果要比roberts和sobel算子好些,邊緣比較完整,抗噪能力較好。roberts、pewitt、sobel算子模板相對較大、抑制了噪聲,但也去掉了部分邊緣,致使定位精度不高。
若是圖形有噪聲,img = imnoise(img,'salt & pepper', 0.03),對原始圖上添加些椒鹽噪聲。再次計算結果以下,只有canny和LoG算法由於先作了低通濾波能夠獲得比較清晰的邊緣。
一、邊緣檢測
http://www.javashuo.com/article/p-xggzfriv-bm.html
二、圖像邊緣檢測——二階微分算子(上)Laplace算子、LOG算子、DOG算子
https://blog.csdn.net/u014485485/article/details/78364573
尊重原創技術文章,轉載請註明。