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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于MATLAB的Sobel边缘检测算法实现

發(fā)布時(shí)間:2024/7/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于MATLAB的Sobel边缘检测算法实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  圖像邊緣就是圖像灰度值突變的地方,也就是圖像在該部分的像素值變化速度非常之快,就比如在坐標(biāo)軸上一條曲線有剛開始的平滑突然來個(gè)大轉(zhuǎn)彎,在變化出的導(dǎo)數(shù)非常大。

Sobel算子主要用作邊緣檢測,它是一離散型差分算子,用來計(jì)算圖像亮度函數(shù)灰度之近似值。

  邊緣是指其周圍像素灰度急劇變化的那些像素的集合。邊緣存在于目標(biāo)、背景和區(qū)域之間,所以,邊緣是圖像分割所依賴的最重要的依據(jù)。由于邊緣是位置的標(biāo)志,對(duì)灰度的變化不敏感,因此,邊緣也是圖像匹配的重要的特征。

  Sobel邊緣檢測的核心在于像素矩陣的卷積,卷積對(duì)于數(shù)字圖像處理非常重要,很多圖像處理算法都是做卷積來實(shí)現(xiàn)的。卷積運(yùn)算的本質(zhì)就是對(duì)指定的圖像區(qū)域的像素值進(jìn)行加權(quán)求和的過程,其計(jì)算過程為圖像區(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。最后通過如下公式來計(jì)算改變灰度的大小。

?

但是通常為了提高效率,使用不開平方的近似值,雖然這樣做會(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類型的,避免精度損失。

Sobel邊緣檢測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:COL 23 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 end 27 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 Filter 37 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-1 44 for c = 2:COL-1 45 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 end 55 end 56 57 figure; 58 imshow(Median_Img); 59 60 %Sobel_Edge_Detect 61 62 Median_Img = double(Median_Img); 63 Sobel_Threshold = 150; 64 Sobel_Img = zeros(ROW,COL); 65 for r = 2:ROW-1 66 for c = 2:COL-1 67 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 else 74 Sobel_Img(r,c)=255; 75 end 76 end 77 end 78 79 figure; 80 imshow(Sobel_Img);

處理后的圖片效果

中值濾波后的lena

Sobel邊沿檢測后的lena

??? 為了使圖像邊緣更加明朗,可以在Sobel的基礎(chǔ)上再進(jìn)行腐蝕膨脹處理,腐蝕膨脹處理,下一篇繼續(xù)分享。

?

轉(zhuǎn)載請(qǐng)注明出處:NingHeChuan(寧河川)

個(gè)人微信訂閱號(hào):開源FPGA

如果你想及時(shí)收到個(gè)人撰寫的博文推送,可以掃描左邊二維碼(或者長按識(shí)別二維碼)關(guān)注個(gè)人微信訂閱號(hào)

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:https://www.cnblogs.com/ninghechuan/p/9529936.html?

轉(zhuǎn)載于:https://www.cnblogs.com/ninghechuan/p/9529936.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的基于MATLAB的Sobel边缘检测算法实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。