0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Sobel邊緣檢測與銳化的實現(xiàn)

新機器視覺 ? 來源:瘋狂的FPGA ? 作者:瘋狂的FPGA ? 2022-03-21 13:17 ? 次閱讀

1.圖像銳化原理介紹

在增強圖像之前一般會先對圖像進行平滑處理以減少或消除噪聲。圖像的能量主要集中在低頻部分,而噪聲和圖像邊緣信息的能量主要集中在高頻部分。因此,平滑處理會使原始圖像的邊緣和輪廓變得模糊。為了減少這類不利效果的影響,需要利用圖像銳化技術(shù),使圖像的邊緣變得清晰。圖像銳化處理主要有兩個目的:一是與圖像平滑處理相反,增強圖像邊緣,使模糊的圖像更加清晰,顏色變得鮮明突出,圖像的質(zhì)量有所改善,產(chǎn)生更適合人觀察和識別的圖像;二是經(jīng)過銳化處理后,目標(biāo)物體的邊緣鮮明,以便于計算機提取目標(biāo)物體的邊界、對圖像進行分割、目標(biāo)區(qū)域識別、區(qū)域形狀提取等,為圖像理解和分析打下基礎(chǔ)。 經(jīng)過平滑處理的圖像變得模糊的根本原因是因為圖像受到了平均或積分運算,因此可以對其進行逆運算(如微分運算)就可以使圖像變得清晰。微分運算是求信號的變化率,由傅立葉變換的微分性質(zhì)可知,微分運算具有加強高頻分量的作用。但需要注意的是,進行銳化處理的圖像必須有較高的性噪比,否則銳化后圖像性噪比反而更低,從而使得噪聲增加的比信號還要多,因此一般是先消除或減輕噪聲后再進行銳化處理,如圖1所示。

fdeb1c94-a8d3-11ec-952b-dac502259ad0.png

圖1 圖像銳化示意圖

物體的邊緣是以圖像局部特性不連續(xù)性的形式出現(xiàn)的,即邊緣意味著一個區(qū)域的結(jié)束和另一個區(qū)域的開始。圖像邊緣有方向和幅度兩個參數(shù)。通常,沿邊緣走向的像素變化平緩,而垂直于邊緣走向的像素變化劇烈。邊緣一般有兩類(圖2所示):(1)階躍狀邊緣,它兩邊的像素灰度值顯著不同;(2)屋頂狀邊緣,它位于像素灰度值從增加到減少(或從減少到增加)的變化轉(zhuǎn)折點。經(jīng)典的邊緣提取方法是考慮圖像的每個像素在某個領(lǐng)域內(nèi)的變化,利用邊緣鄰近一階或二階方向?qū)?shù)變化規(guī)律來檢測邊緣。圖像灰度值的顯著變化可以用一階差分替代一階微分的梯度來表示,分別以梯度向量的幅度和方向來表示。因此,圖像中陡峭邊緣的梯度值很大;灰度值變化平緩的地方,梯度值較小;灰度值相同的地方,梯度值為零。

下面開始介紹運用一階微分和二階微分運算來進行圖像邊緣檢測的原理。

fdff7a40-a8d3-11ec-952b-dac502259ad0.png

圖2 邊緣類型

1.1.一階微分邊緣檢測

一階微分主要是指梯度模運算,圖像的梯度模值包含了邊界及細節(jié)信息。圖像fe1138de-a8d3-11ec-952b-dac502259ad0.png在點fe1b9f22-a8d3-11ec-952b-dac502259ad0.png處的梯度定義為:

fe28fce4-a8d3-11ec-952b-dac502259ad0.png

由于數(shù)字圖像是離散的,所以可以用差分來替代微分,即:

fe38438e-a8d3-11ec-952b-dac502259ad0.png
fe4efcf0-a8d3-11ec-952b-dac502259ad0.png

梯度的幅值即模值,為:

fe5d2ffa-a8d3-11ec-952b-dac502259ad0.png

梯度的方向為:

fe720114-a8d3-11ec-952b-dac502259ad0.png

對圖像f使用梯度模算子進行運算后,可產(chǎn)生一幅梯度圖像g,圖像g和圖像f之間的像素關(guān)系為:

fe85113c-a8d3-11ec-952b-dac502259ad0.png

其中G為梯度模算子。由于梯度圖像g反映了圖像f的灰度變化分布信息,因此可以對其進行某種適當(dāng)?shù)奶幚砗妥儞Q,或?qū)⒆儞Q后的梯度圖像和原圖像組合作為f銳化后的圖像。運用一階微分運算的邊緣檢測算子包括Robert算子、Prewitt算子和Sobel算子等等,將在后續(xù)小節(jié)中對Robert和Sobel邊緣檢測算法的實現(xiàn)進行介紹。

1.2.二階微分邊緣檢測

二階微分定義為fe91029e-a8d3-11ec-952b-dac502259ad0.png考慮坐標(biāo)旋轉(zhuǎn)變換,設(shè)P點旋轉(zhuǎn)前坐標(biāo)為fea66bac-a8d3-11ec-952b-dac502259ad0.png,順時針旋轉(zhuǎn)θ°后得febc81bc-a8d3-11ec-952b-dac502259ad0.png,如圖3所示,則有:

fecc416a-a8d3-11ec-952b-dac502259ad0.png

圖3 坐標(biāo)旋轉(zhuǎn)變換

fee3ad46-a8d3-11ec-952b-dac502259ad0.png
fef868da-a8d3-11ec-952b-dac502259ad0.png
ff061796-a8d3-11ec-952b-dac502259ad0.png

函數(shù)fe1138de-a8d3-11ec-952b-dac502259ad0.pngff2da216-a8d3-11ec-952b-dac502259ad0.png的一階偏導(dǎo)數(shù)為

ff3953d6-a8d3-11ec-952b-dac502259ad0.png

函數(shù)fe1138de-a8d3-11ec-952b-dac502259ad0.pngff680406-a8d3-11ec-952b-dac502259ad0.png的一階偏導(dǎo)數(shù)為

ff7c299a-a8d3-11ec-952b-dac502259ad0.png

函數(shù)fe1138de-a8d3-11ec-952b-dac502259ad0.pngff2da216-a8d3-11ec-952b-dac502259ad0.png的二階偏導(dǎo)數(shù)為

ffb0b6ce-a8d3-11ec-952b-dac502259ad0.png

函數(shù)fe1138de-a8d3-11ec-952b-dac502259ad0.pngff680406-a8d3-11ec-952b-dac502259ad0.png的二階偏導(dǎo)數(shù)為

ffe3903a-a8d3-11ec-952b-dac502259ad0.png

將函數(shù)fe1138de-a8d3-11ec-952b-dac502259ad0.pngff2da216-a8d3-11ec-952b-dac502259ad0.pngff680406-a8d3-11ec-952b-dac502259ad0.png的二階偏導(dǎo)數(shù)相加得

002b47c2-a8d4-11ec-952b-dac502259ad0.png

后續(xù)小節(jié)將要介紹的Laplacian邊緣檢測算法正是基于二階微分運算。

由此可見,二階微分具有各向同性、旋轉(zhuǎn)不變性的特征,從而滿足不同走向的圖像邊緣的銳化要求。由于數(shù)字圖像是離散的,所以可以用差分來替代微分,即:

003cac56-a8d4-11ec-952b-dac502259ad0.png
004f7160-a8d4-11ec-952b-dac502259ad0.png
00619f3e-a8d4-11ec-952b-dac502259ad0.png

后續(xù)小節(jié)將要介紹的Laplacian邊緣檢測算法正是基于二階微分運算。

1.3.一階微分與二階微分邊緣檢測對比

一階微分和二階微分運算都可以用來檢測圖像邊緣,但它們對邊緣的檢測原理和檢測效果是有差異的,如下所示:(1)對于突變型的細節(jié),通過一階微分的極值點和二階微分的過零點均可以檢測出來,如圖4所示。

006dec30-a8d4-11ec-952b-dac502259ad0.png

圖4 突變型細節(jié)

(2)對于細線型的細節(jié),通過一階微分的過零點和二階微分的極值點均可以檢測出來,如圖5所示。

0085e056-a8d4-11ec-952b-dac502259ad0.png

圖5 細線型細節(jié)

(3)對于漸變型的細節(jié),一般情況下突變幅度小、定位難、不易檢測,但二階微分的信息比一階微分的信息多,如圖6所示。

009e909c-a8d4-11ec-952b-dac502259ad0.png

圖6 漸變型細節(jié)

從圖像的景物細節(jié)的灰度分布特性可知,有些灰度變化特性一階微分的描述不是很明確,為此,采用二階微分能夠獲得更豐富的景物細節(jié)。

2.Sobel邊緣檢測與銳化的實現(xiàn)

2.1.Sobel邊緣檢測算法理論

Robert算子只采用梯度微分銳化圖像,會讓噪聲、條紋得到增強,而Sobel邊緣檢測算子則在一定程度上解決了這個問題,它是一種先求平均、再求微分、最后求梯度的算子,其算子形式如下所示。顯然,Sobel算子只考慮了源像素點周圍8個相鄰像素點的水平和垂直方向的像素突變,而沒有加入源像素點灰度值的計算。

00af36ea-a8d4-11ec-952b-dac502259ad0.png

00bc1856-a8d4-11ec-952b-dac502259ad0.png

Sobel算子的水平和垂直模板如圖12所示,分別對水平邊緣和垂直邊緣的影響最大。

00cef516-a8d4-11ec-952b-dac502259ad0.png

圖12 Sobel算子模板

Sobel算子在一個方向求微分,而在另一個方向求平均,因而對噪聲相對不敏感,具有抑制噪聲的作用。由于像素平均相當(dāng)于對圖像進行低通濾波,所以Sobel算子對邊緣的定位不如Robert算子。但與Robert算子相比,Sobel算子有一定的抗干擾性,圖像效果比較干凈。

利用算子模板可求得水平和垂直方向的梯度00e4d0fc-a8d4-11ec-952b-dac502259ad0.png00f39e3e-a8d4-11ec-952b-dac502259ad0.png,再通過梯度合成便可獲得邊緣檢測結(jié)果0104abd4-a8d4-11ec-952b-dac502259ad0.png,如下所示:

01182e8e-a8d4-11ec-952b-dac502259ad0.png

有時,為了簡化運算,可以用下面式子來近似替代。

0126967c-a8d4-11ec-952b-dac502259ad0.png

Sobel邊緣檢測的過程如圖13所示,獲得了比較粗的邊界,但邊緣定位精度不夠高,,有時可能對非邊緣像素的響應(yīng)大于某些邊緣處的響應(yīng)或者響應(yīng)差別不是很大,造成漏檢或誤檢。當(dāng)對精度要求不是很高時,是一種較為常用的邊緣檢測方法。將邊緣檢測結(jié)果與原圖疊加便可以得到銳化后的圖像,如圖14所示。

0138bd02-a8d4-11ec-952b-dac502259ad0.png

圖13 Sobel邊緣檢測

015010ce-a8d4-11ec-952b-dac502259ad0.png

圖14 Sobel銳化

2.2.Sobel邊緣檢測Matlab實現(xiàn)

前面已經(jīng)對Sobel邊緣檢測算法進行了介紹,現(xiàn)在基于Matlab軟件對其進行仿真。創(chuàng)建函數(shù)Sobel_Edge_Detector用于實現(xiàn)Sobel算子對圖像進行邊緣檢測,相關(guān)的matlab代碼如下所示(詳見Sobel_Edge_Detector.m)。

% 灰度圖像Sobel邊緣檢測算法實現(xiàn)

% IMG為輸入的灰度圖像

% Q為輸出的灰度圖像

function Q = Sobel_Edge_Detector(IMG)

[h,w] = size(IMG);% 獲取圖像的高度h和寬度w

Q = zeros(h,w);% 初始化Q為全0的h*w大小的圖像

% -------------------------------------------------------------------------

%WxWyPixel

% [-1-2-1][+10-1][P1P2P3]

% [000][+20-2][P4P5P6]

% [+1+2+1][+10-1][P7P8P9]

Wx = [-1,-2,-1;0,0,0;1,2,1];% Weight x

Wy = [1,0,-1;2,0,-2;1,0,-1];% Weight y

IMG = double(IMG);

for i = 1 : h

forj = 1 : w

if(i<2|| i>h-1 || j<2 || j>w-1)

Q(i,j)= 0;% 邊緣像素不處理

else

%Gx = sum(Wx.*IMG(i-1:i+1,j-1:j+1),'all');

Gx= Wx(1,1)*IMG(i-1,j-1) + Wx(1,2)*IMG(i-1,j) + Wx(1,3)*IMG(i-1,j+1) +...

Wx(2,1)*IMG(i,j-1)+ Wx(2,2)*IMG(i,j) + Wx(2,3)*IMG(i,j+1) +...

Wx(3,1)*IMG(i+1,j-1)+ Wx(3,2)*IMG(i+1,j) + Wx(3,3)*IMG(i+1,j+1);

%Gy = sum(Wy.*IMG(i-1:i+1,j-1:j+1),'all');

Gy= Wy(1,1)*IMG(i-1,j-1) + Wy(1,2)*IMG(i-1,j) + Wy(1,3)*IMG(i-1,j+1) +...

Wy(2,1)*IMG(i,j-1)+ Wy(2,2)*IMG(i,j) + Wy(2,3)*IMG(i,j+1) +...

Wy(3,1)*IMG(i+1,j-1)+ Wy(3,2)*IMG(i+1,j) + Wy(3,3)*IMG(i+1,j+1);

%Q(i,j) = sqrt(Gx^2 + Gy^2);

Q(i,j)= abs(Gx) + abs(Gy);

end

end

end

Q=uint8(Q);

上述Matlab代碼中需要注意以下幾點:

(1)函數(shù)輸入IMG是uint8數(shù)據(jù)類型的圖像,而計算時存在負數(shù)和小數(shù),需要用浮點數(shù)來表示,所以將IMG由uint8數(shù)據(jù)類型轉(zhuǎn)為double數(shù)據(jù)類型;

(2)對圖像邊緣的像素不進行處理,直接輸出0;

(3)將函數(shù)輸出Q由double數(shù)據(jù)類型轉(zhuǎn)為uint8數(shù)據(jù)類型。

接下來編寫頂層M文件,相關(guān)的Maltab代碼如下所示(詳見Sobel_Sharpen_Test.m),Sobel銳化處理流程如圖15所示。

clear all;

close all;

clc;

% -------------------------------------------------------------------------

% Read PC image to Matlab

IMG1 = imread('../../0_images/Lenna.jpg');% 讀取jpg圖像

IMG1 = rgb2gray(IMG1);

subplot(131);imshow(IMG1);title('【1】原圖');

% -------------------------------------------------------------------------

IMG2 = Sobel_Edge_Detector(IMG1);

subplot(132);imshow(IMG2);title('【2】Sobel邊緣檢測結(jié)果');

% -------------------------------------------------------------------------

IMG3 = IMG1 + IMG2;

subplot(133);imshow(IMG3);title('【3】Sobel銳化圖像');

0167cb60-a8d4-11ec-952b-dac502259ad0.png

圖15 Sobel銳化處理流程

執(zhí)行頂層M文件可得到圖16所示的結(jié)果,其中【2】是進行Sobel邊緣檢測得到的效果圖,可以看出Sobel算子對邊緣有較強的響應(yīng),與Robert算子相比,對邊緣的響應(yīng)更加強烈,得到的邊緣更加寬;【3】是原圖與邊緣檢測結(jié)果疊加后的效果圖,相比原圖,邊緣和細節(jié)更加突出,但圖像有些失真。

017f89c6-a8d4-11ec-952b-dac502259ad0.png

圖16 Sobel邊緣檢測與銳化

原文標(biāo)題:常用銳化算法及Sobel銳化的介紹

文章出處:【微信公眾號:機器視覺智能檢測】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4612

    瀏覽量

    92909
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1084

    瀏覽量

    40470
  • 檢測
    +關(guān)注

    關(guān)注

    5

    文章

    4488

    瀏覽量

    91478

原文標(biāo)題:常用銳化算法及Sobel銳化的介紹

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于FPGA的Sobel邊緣檢測工作原理

    Sobel 邊緣檢測的工作原理是檢測圖像在水平和垂直方向上的梯度變化。為此,將兩個卷積濾波器應(yīng)用于原始圖像,然后組合這些卷積濾波器的結(jié)果以確定梯度的大小。
    發(fā)表于 12-14 11:34 ?1433次閱讀

    基于FPGA的實時邊緣檢測系統(tǒng)設(shè)計,Sobel圖像邊緣檢測,F(xiàn)PGA圖像處理

    60 為閾值得到圖8(a)和(b)。 通過對比可以看出,使用 FPGA 進行Sobel邊緣檢測能夠實現(xiàn)與 MATLAB 相近的檢測效果,驗
    發(fā)表于 05-24 07:45

    基于 DSP5509 進行數(shù)字圖像處理中 Sobel 算子邊緣檢測的硬件連接電路圖

    以下是基于 DSP5509 進行數(shù)字圖像處理中 Sobel 算子邊緣檢測的硬件設(shè)計方案: 一、總體架構(gòu) 圖像采集:使用合適的圖像傳感器,如 CMOS 傳感器,通過相應(yīng)的接口(如 SPI、I2C 等
    發(fā)表于 09-25 15:25

    基于FPGA的Sobel邊緣檢測實現(xiàn)

    我們在此基礎(chǔ)上修改,從而實現(xiàn),基于FPGA的動態(tài)圖片的Sobel邊緣檢測、中值濾波、Canny算子邊緣
    發(fā)表于 08-29 15:41

    基于FPGA的邊緣檢測Sobel算法

    轉(zhuǎn)帖摘要: 針對嵌入式軟件無法滿足數(shù)字圖像實時處理速度問題,提出用硬件加速器的思想,通過FPGA實現(xiàn)Sobel邊緣檢測算法。通過乒乓操作、并行處理數(shù)據(jù)和流水線設(shè)計,大大提高算法的處理速
    發(fā)表于 11-29 08:57

    源碼交流=圖像處理 實現(xiàn)圖像去噪、濾波、銳化、邊緣檢測

    之后的圖像NO.7:Sobel邊緣檢測之后的圖像【改進分析】暫無【源碼下載】https://www.lanzous.com/iajjk5i密碼:8czs【程序展示】% 功能:MATLAB實現(xiàn)
    發(fā)表于 04-01 19:03

    Labview圖像處理——邊緣檢測

    邊緣的灰度值過度較為明顯,梯度算子可以得到較好的邊緣檢測結(jié)果。邊緣提取其實也是一種濾波,不同的算子有不同的提取效果。比較常用的方法有三種,Sobel
    發(fā)表于 12-01 12:16

    邊緣檢測的幾種微分算子

    一、邊緣檢測邊緣檢測的幾種微分算子:一階微分算子:Roberts、Sobel、Prewitt二階微分算子:Laplacian、Log/Mar
    發(fā)表于 07-26 08:29

    【米爾MYS-8MMX開發(fā)板免費試用】-VI.Sobel邊緣檢測(ZMJ)

    【米爾MYS-8MMX開發(fā)板】-VI.Sobel邊緣檢測(ZMJ)1.功能簡介本案例使用 GStreamer API 通過 ARM Cotrex-A53 從 USB 攝像頭獲取 MJPEG 格式視頻
    發(fā)表于 09-10 15:41

    迅為iTOP-RK3568開發(fā)板Sobel 算子邊緣檢測

    ,是最為常用的邊緣檢測算子,但是得到的邊緣較粗,可能出現(xiàn)偽邊緣。 cv2.Sobel 函數(shù)功能: 使用
    發(fā)表于 09-18 10:27

    sobel_FPGA l邊緣檢測

    sobel_FPGA l邊緣檢測.源代碼。
    發(fā)表于 05-03 16:42 ?9次下載

    基于CORDIC的高速Sobel算法實現(xiàn)

    為提高圖像邊緣檢測的處理速度,提出一種基于CORDIC的高速Sobel算法實現(xiàn)。
    的頭像 發(fā)表于 10-05 09:54 ?3568次閱讀
    基于CORDIC的高速<b class='flag-5'>Sobel</b>算法<b class='flag-5'>實現(xiàn)</b>

    FPGA圖像處理的Sobel邊緣檢測

    Sobel邊緣檢測 Sobel邊緣檢測原理教材網(wǎng)上一大堆,核心為卷積處理。
    的頭像 發(fā)表于 03-22 09:45 ?2961次閱讀
    FPGA圖像處理的<b class='flag-5'>Sobel</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測</b>

    SpinalHDL里如何實現(xiàn)Sobel邊緣檢測

    書接上文,趁著今天休假,采用SpinalHDL做一個小的demo,看看在SpinalHDL里如何優(yōu)雅的實現(xiàn)Sobel邊緣檢測。
    的頭像 發(fā)表于 08-26 08:59 ?1290次閱讀

    圖像銳化Sobel、Laplacian算子基礎(chǔ)知識介紹

    Sobel 算子是一種用于邊緣檢測的離散微分算子,它結(jié)合了高斯平滑和微分求導(dǎo)
    的頭像 發(fā)表于 09-13 09:52 ?1421次閱讀
    圖像<b class='flag-5'>銳化</b>的<b class='flag-5'>Sobel</b>、Laplacian算子基礎(chǔ)知識介紹