91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Matlab如何實現圖像邊緣提取

發布時間:2021-12-30 17:43:53 來源:億速云 閱讀:769 作者:小新 欄目:大數據

這篇文章主要介紹了Matlab如何實現圖像邊緣提取,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。


什么是圖像邊緣

所謂圖像邊緣(Edlge)是指圖像局部特性的不連續性,例如,灰度級的突變,顏色的突變,紋理結構的突變等。邊緣廣泛存在于目標與目標、物體與背景、區域與區域(含不同色彩)之間,它是圖像分割所依賴的重要特征。

小白今天主要介紹幾種典型的圖像灰度值突變的邊緣檢測方法,其原理也適用用于其他特性突變的邊緣檢測。圖像的邊緣通常與圖像灰度的一階導數的不連續性有關。圖像灰度的不連續性可分為兩類:階躍不連續,即圖像灰度在不連續處的兩邊的像素灰度有明顯的差異。線條不連續,即圖像灰度突然從一個值變化到另一個值,保持一個較小的行程又返回到原來的值。但是在實際中,階躍和線條邊緣圖像是較少見的,由于空間分辨率(尺度空間)、圖像傳感器等原因會使階躍邊緣變成斜坡形邊緣,線條邊緣變成房頂形邊緣。它們的灰度變化不是瞬間的而是跨越一定距離的。幾種邊緣類型,可以通過下面的圖片有個更清晰的認識。Matlab如何實現圖像邊緣提取

Sobel算子

在前面的關于圖像濾波的講解中,小白為大家介紹了sobel算子模板,但是沒有講解其具體作用。這次的講解中,小白將為大家講解什么是sobel算子。

sobel算子是一階的梯度算子,也就是對信號求取一階導數,對噪聲具有平滑作用,提供較為精確的邊緣方向信息,但是邊緣定位精度不夠高;但是該種方法比較簡單,容易實現,也比較容易理解。

對一個連續函數求導是一件比較容易的事情,但是圖像中的數據都是數字化之后的數據,是離散的,因此對于求導就需要使用差分方式:前面的像素灰度值減去后面像素的灰度值,并將結果大于一定閾值的設為邊緣,否則就不是邊緣。我們用數學公式表示就是:I(x,y)-I(x-n,y)。公式給出的是兩個像素在同一行中,兩個像素也可以在同一列中,而且方向也可以更改。

根據之前的模板來看的話,只有一個維度的求導可以用如下的模板表示:

Matlab如何實現圖像邊緣提取               Matlab如何實現圖像邊緣提取

可以用上面兩個模板分別對原圖像求取橫著和豎著邊緣,之后對兩者求并集,便是圖像整體的邊緣。但是細心的小伙伴肯定會發現,模板之后兩個元素,以哪個元素作為模板的中心呢?為了解決這個問題,研究者將其進行了擴展,變為以下的模板:

Matlab如何實現圖像邊緣提取      Matlab如何實現圖像邊緣提取

模板長度變為奇數便可以解決模板沒有“中心”的問題。后續經過各種演化,最終變為前面幾講中提到的模板的樣子。小伙伴在使用的過程中可以直接使用其模板就可以,而且Matlab也是帶有sobel邊緣提取的函數,不需要小伙伴自己編寫復雜的程序。

Matlab如何實現圖像邊緣提取

常用的sobel邊緣提取模板


Roberts算子


其實很多種算子都借鑒了sobel方法的思想,Roberts算子檢測方法對具有陡峭的低噪聲的圖像處理效果較好,但是利用roberts算子提取邊緣的結果是邊緣比較粗,因此邊緣的定位不是很準確。我們直接給出Roberts算子的模板:

Matlab如何實現圖像邊緣提取

通過模板我們也能看出來,該算法是采用檢測斜著方向的梯度變化來判定圖像的邊緣。

Canny算子

Canny算子是目前邊緣檢測最常用的算法,效果也是最理想的。但是Canny邊緣檢測算法不是簡單的模板卷積而已,通過梯度方向和雙閾值法來檢測邊緣點,具體算法講解,可以通過點擊”原文閱讀“來了解更多:

Canny方法不容易受噪聲干擾,能夠檢測到真正的弱邊緣。優點在于,使用兩種不同的閾值分別檢測強邊緣和弱邊緣,并且當弱邊緣和強邊緣相連時,才將弱邊緣包含在輸出圖像中。

Matlab邊緣提取

Matlab提供多種邊緣檢測方法,通過函數edge(image,'method')來實現圖像的邊緣提取,通過修改參數‘method’來實現不同濾波方法。具體的邊緣檢測代碼如下:

I=imread('lena.bmp');%  提取圖像
I=rgb2gray(I);%將彩色圖轉換灰度圖
BW1=edge(I,'sobel'); %用SOBEL算子進行邊緣檢測
BW2=edge(I,'roberts');%用Roberts算子進行邊緣檢測
BW3=edge(I,'prewitt'); %用prewitt算子進行邊緣檢測
BW4=edge(I,'log'); %用log算子進行邊緣檢測
BW5=edge(I,'canny'); %用canny算子進行邊緣檢測
subplot(2,3,1), imshow(BW1);
title('sobel edge check');
subplot(2,3,2), imshow(BW2);
title('roberts edge check');
subplot(2,3,3), imshow(BW3);
title('prewitt edge check');
subplot(2,3,4), imshow(BW4);
title('log edge check');
subplot(2,3,5), imshow(BW5);
title('canny edge check');

將上述代碼復制到Matalb里,把圖像地址改成自己想要提取邊緣的圖像,運行之后便可的得到圖像邊緣。小白在自己的電腦上運行程序的結果如下圖。在程序里也利用其他算子提取了邊緣,方便小伙伴的對比。

Matlab如何實現圖像邊緣提取


感謝你能夠認真閱讀完這篇文章,希望小編分享的“Matlab如何實現圖像邊緣提取”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤壁市| 聊城市| 辽阳市| 陆丰市| 潼南县| 兰坪| 麦盖提县| 奉节县| 拜泉县| 财经| 繁昌县| 桦甸市| 青冈县| 仲巴县| 浙江省| 竹北市| 新泰市| 盐池县| 武乡县| 沂水县| 惠来县| 泸州市| 大宁县| 大安市| 岳阳市| 石屏县| 邵东县| 黔江区| 灵宝市| 绍兴县| 深州市| 容城县| 贺兰县| 兴文县| 永春县| 襄汾县| 南郑县| 玉树县| 筠连县| 吉林市| 古浪县|