從一張圖像中,把輪廓提取出來算法
邊緣檢測算子:Sobel Laplace Roberts Prewitt Canny 及 Marr-Hildrethblog
任何邊緣檢測算法都不可能在未經處理的原始數據上很好地處理,因此第一步是對原始數據與高斯平滑模板做卷積it
Canny邊緣檢測的基本思想是:首先對圖像選擇必定的Gauss(高斯)濾波器進行平滑濾波,而後採用非極值抑制技術進行處理獲得邊緣圖像模板
Canny算子法實現的方式爲:圖像先用2D高斯濾波模板進行卷積以消除噪聲,再對濾波後圖像中的每一個像素計算其梯度的大小和方向class
(1)降噪im
(2)尋找梯度技術
(3)跟蹤邊緣數據
Canny算法分爲4個步驟:
(1)濾波平滑噪聲
任何邊緣檢測算法都不可能在未經處理的原始數據上工做,第一步是對原始數據與高斯mask做卷積,獲得的圖像與原始圖像有些輕微模糊,用高斯濾波器來處理高斯平滑的圖像
(2)利用已有的一階偏導算子計算梯度
Canny算法的基本思想是尋找一副圖像中灰度強度變化最強的位置,變化最強即梯度位置,平滑後的圖像中每一個像素點能夠由Sobel算子(一種卷積運算)來得到
(3)非極大值抑制
這一步是將模糊(blurred)的邊界變得清晰(sharp),保留了每一個像素點上的梯度強度大的極大值,而刪掉其餘值
(4)雙閾值法抑制假邊緣,鏈接真邊緣
強邊界用白色表示,弱邊界用灰色表示,經過這樣來去除噪聲點di
CV_EXPORTS_W void Canny(InputArray image,
OutputArray edges,
double threshold1, double threshold2,
int apertureSize=3,
bool L2gradient=false)block
輸入和輸出圖像
底閾值和高閾值,值越大,找到的邊緣越少
表示應用Sobel算子的孔徑大小,默認值爲3
表示一個計算圖像梯度幅值的表示,默認值爲false
cv::Mat im; cv::Mat result cv::Canny(im, result, 50, 150);
Roberts 算子是一種利用局部差分算子尋找邊緣的算子
Roberts 算子在邊緣檢測的效果中因爲沒有通過圖像平滑處理的,所以圖像噪聲通常得不到很好的抑制,也所以影響到計算定位時容易丟失一部分的邊緣。可是Roberts 算子的定位精度較高,對具備陡峭的低噪聲圖像響應較好