圖像邊緣就是圖像灰度值突變的地方,也就是圖像在該部分的像素值變化速度非常之快,就比如在坐標(biāo)軸上一條曲線(xiàn)有剛開(kāi)始的平滑突然來(lái)個(gè)大轉(zhuǎn)彎,在變化出的導(dǎo)數(shù)非常大。
Sobel算子主要用作邊緣檢測(cè),它是一離散型差分算子,用來(lái)計(jì)算圖像亮度函數(shù)灰度之近似值。
邊緣是指其周?chē)袼鼗叶燃眲∽兓哪切┫袼氐募稀_吘壌嬖谟谀繕?biāo)、背景和區(qū)域之間,所以,邊緣是圖像分割所依賴(lài)的最重要的依據(jù)。由于邊緣是位置的標(biāo)志,對(duì)灰度的變化不敏感,因此,邊緣也是圖像匹配的重要的特征。
Sobel邊緣檢測(cè)的核心在于像素矩陣的卷積,卷積對(duì)于數(shù)字圖像處理非常重要,很多圖像處理算法都是做卷積來(lái)實(shí)現(xiàn)的。卷積運(yùn)算的本質(zhì)就是對(duì)指定的圖像區(qū)域的像素值進(jìn)行加權(quán)求和的過(guò)程,其計(jì)算過(guò)程為圖像區(qū)域中的每個(gè)像素值分別與卷積模板的每個(gè)元素對(duì)應(yīng)相乘,將卷積的結(jié)果作求和運(yùn)算,運(yùn)算到的和就是卷積運(yùn)算的結(jié)果。
矩陣的卷積公式如下。
3x3的窗口M與卷積模板C的卷積運(yùn)算如下。
Gx和Gy是sobel的卷積因子,將這兩個(gè)因子和原始圖像做如下卷積。
Sobel卷積因子
其中A代表原始圖像。
得到圖像中的每一個(gè)點(diǎn)的橫向縱向灰度值Gx、Gy。最后通過(guò)如下公式來(lái)計(jì)算改變灰度的大小。
但是通常為了提高效率,使用不開(kāi)平方的近似值,雖然這樣做會(huì)損失精度,,
將Sobel算子的實(shí)現(xiàn)劃分為五個(gè)步驟:
(1) 計(jì)算Gx與Gy與模板每行的乘積。
(2) 兩個(gè)3x3矩陣的卷積即將每一行每一列對(duì)應(yīng)相乘然后相加。
(3) 求得3*3模板運(yùn)算后的Gx、Gy。
(4) 求Gx^2 + Gy^2的平方根或者直接對(duì)Gx和Gy取絕對(duì)值后求和。
(5)設(shè)置一個(gè)閾值,運(yùn)算后的像素值大于該閾值輸出為全1,小于該閾值輸出為全0。
平方根和絕對(duì)值函數(shù)
sqrt(x) 計(jì)算平方根abs(x) 取數(shù)值的絕對(duì)值和復(fù)數(shù)的幅值
在對(duì)圖像數(shù)據(jù)進(jìn)行運(yùn)算時(shí)最好將圖像數(shù)據(jù)轉(zhuǎn)化成double類(lèi)型的,避免精度損失。
Sobel邊緣檢測(cè)MATLAB實(shí)現(xiàn)
Sobel Edge Detect
1 %RGB_YCbCr 2 clc; 3 clear all; 4 close all; 5 6 RGB_data = imread('lena.jpg');% 7 8 R_data = RGB_data(:,:,1); 9 G_data = RGB_data(:,:,2);10 B_data = RGB_data(:,:,3);11 12 %imshow(RGB_data);13 14 [ROW,COL, DIM] = size(RGB_data); 15 16 Y_data = zeros(ROW,COL);17 Cb_data = zeros(ROW,COL);18 Cr_data = zeros(ROW,COL);19 Gray_data = RGB_data;20 21 for r = 1:ROW 22 for c = 1:COL23 Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);24 Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;25 Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r, c) + 128;26 end27 end 28 29 Gray_data(:,:,1)=Y_data;30 Gray_data(:,:,2)=Y_data;31 Gray_data(:,:,3)=Y_data;32 33 figure;34 imshow(Gray_data);35 36 %Median Filter37 imgn = imnoise(Gray_data,'salt & pepper',0.02); 38 39 figure;40 imshow(imgn);41 42 Median_Img = Gray_data;43 for r = 2:ROW-144 for c = 2:COL-145 median3x3 =[imgn(r-1,c-1) imgn(r-1,c) imgn(r-1,c+1)46 imgn(r,c-1) imgn(r,c) imgn(r,c+1)47 imgn(r+1,c-1) imgn(r+1,c) imgn(r+1,c+1)];48 sort1 = sort(median3x3, 2, 'descend');49 sort2 = sort([sort1(1), sort1(4), sort1(7)], 'descend');50 sort3 = sort([sort1(2), sort1(5), sort1(8)], 'descend');51 sort4 = sort([sort1(3), sort1(6), sort1(9)], 'descend');52 mid_num = sort([sort2(3), sort3(2), sort4(1)], 'descend');53 Median_Img(r,c) = mid_num(2);54 end55 end56 57 figure;58 imshow(Median_Img);59 60 %Sobel_Edge_Detect61 62 Median_Img = double(Median_Img);63 Sobel_Threshold = 150;64 Sobel_Img = zeros(ROW,COL);65 for r = 2:ROW-166 for c = 2:COL-167 Sobel_x = Median_Img(r-1,c+1) + 2*Median_Img(r,c+1) + Median_Img(r+1,c+1) - Median_Img(r-1,c-1) - 2*Median_Img(r,c-1) - Median_Img(r+1,c-1);68 Sobel_y = Median_Img(r-1,c-1) + 2*Median_Img(r-1,c) + Median_Img(r-1,c+1) - Median_Img(r+1,c-1) - 2*Median_Img(r+1,c) - Median_Img(r+1,c+1);69 Sobel_Num = abs(Sobel_x) + abs(Sobel_y);70 %Sobel_Num = sqrt(Sobel_x^2 + Sobel_y^2);71 if(Sobel_Num > Sobel_Threshold)72 Sobel_Img(r,c)=0;73 else74 Sobel_Img(r,c)=255;75 end76 end77 end78 79 figure;80 imshow(Sobel_Img);
處理后的圖片效果
中值濾波后的lena
Sobel邊沿檢測(cè)后的lena
為了使圖像邊緣更加明朗,可以在Sobel的基礎(chǔ)上再進(jìn)行腐蝕膨脹處理,腐蝕膨脹處理
-
matlab
+關(guān)注
關(guān)注
186文章
2981瀏覽量
231050 -
卷積
+關(guān)注
關(guān)注
0文章
95瀏覽量
18549 -
圖像邊緣
+關(guān)注
關(guān)注
0文章
10瀏覽量
7344
原文標(biāo)題:基于MATLAB的Sobel邊緣檢測(cè)算法實(shí)現(xiàn)
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
算法系列:基于 FPGA 的圖像邊緣檢測(cè)系統(tǒng)設(shè)計(jì)(sobel算法)
基于FPGA的實(shí)時(shí)邊緣檢測(cè)系統(tǒng)設(shè)計(jì),Sobel圖像邊緣檢測(cè),F(xiàn)PGA圖像處理
【Z-turn Board試用體驗(yàn)】+ 基于Z-turn的圖像邊緣檢測(cè)系統(tǒng)(三)
【Banana Pi M1+申請(qǐng)】閾值自適應(yīng)視頻邊緣檢測(cè)算法的嵌入式快速實(shí)現(xiàn)
基于FPGA的Sobel邊緣檢測(cè)的實(shí)現(xiàn)
基于FPGA的邊緣檢測(cè)和Sobel算法
圖像邊緣檢測(cè)算法體驗(yàn)步驟(Photoshop,Matlab)
基于Qualcomm FastCv的邊緣檢測(cè)算法詳解
基于視覺(jué)圖像的微小零件邊緣檢測(cè)算法研究
Labview圖像處理——邊緣檢測(cè)
迅為iTOP-RK3568開(kāi)發(fā)板Sobel 算子邊緣檢測(cè)
基于改進(jìn)Canny的圖像邊緣檢測(cè)算法
![基于改進(jìn)Canny的<b class='flag-5'>圖像</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測(cè)算法</b>](https://file.elecfans.com/web2/M00/49/42/poYBAGKhwJaAdfefAAAZ10WBxCM793.jpg)
評(píng)論