『壹』 什麼是邊緣檢測
兩個具有不同灰度值的相鄰區域之間總存在邊緣,邊緣是灰度值不連續的表現。由於邊緣是圖像上灰度變化最劇烈的地方,傳統的邊緣檢測就是利用了這個特點,對圖像各個像素點進行微分或求二階微分來確定邊緣像素點。
以下是一段函數是關於邊緣檢測的一些演算法,希望對你有幫助。。
I=imread('D:10.jpg');%讀取圖像
I1=im2double(I);%將彩圖序列變成雙精度
I2=rgb2gray(I1);%將彩色圖變成灰色圖
[thr,sorh,keepapp]=ddencmp('den','wv',I2);
I3=wdencmp('gbl',I2,'sym4',2,thr,sorh,keepapp);%小波除噪
I4=medfilt2(I3,[99]);%中值濾波
I5=imresize(I4,0.8,'bicubic');%圖像大小
BW1=edge(I5,'sobel');%sobel圖像邊緣提取
BW2=edge(I5,'roberts');%roberts圖像邊緣提取
BW3=edge(I5,'prewitt');%prewitt圖像邊緣提取
BW4=edge(I5,'log');%log圖像邊緣提取
BW5=edge(I5,'canny');%canny圖像邊緣提取
h=fspecial('gaussian',5);%高斯濾波
BW6=edge(I5,'zerocross',[],h);%zerocross圖像邊緣提取
figure;
subplot(1,3,1);%圖劃分為一行三幅圖,第一幅圖
imshow(I2);%繪圖
title('原始圖像');%標注
subplot(1,3,2);%第二幅圖
imshow(I3);
title('消噪後圖像');
subplot(1,3,3);%第三幅圖
imshow(I4);
title('中值濾波圖像');
figure;
subplot(1,3,1);
imshow(BW1);
title('Sobel運算元');
subplot(1,3,2);
imshow(BW2);
title('Roberts運算元');
subplot(1,3,3);
imshow(BW3);
title('Prewitt運算元');
figure;
subplot(1,3,1);
imshow(BW4);
title('log運算元');
subplot(1,3,2);
imshow(BW5);
title('Canny運算元');
subplot(1,3,3);
imshow(BW6);
title('Zerocross');
『貳』 邊緣檢測的簡介
圖像邊緣檢測大幅度地減少了數據量,並且剔除了可以認為不相關的信息,保留了圖像重要的結構屬性。有許多方法用於邊緣檢測,它們的絕大部分可以劃分為兩類:基於查找一類和基於零穿越的一類。基於查找的方法通過尋找圖像一階導數中的最大和最小值來檢測邊界,通常是將邊界定位在梯度最大的方向。基於零穿越的方法通過尋找圖像二階導數零穿越來尋找邊界,通常是Laplacian過零點或者非線性差分表示的過零點。
『叄』 邊緣檢測運算元有哪些它們各有什麼優缺點
邊緣檢測運算元一階的有Roberts Cross運算元,Prewitt運算元,Sobel運算元,Canny運算元, Krisch運算元,羅盤運算元;而二階的還有Marr-Hildreth,在梯度方向的二階導數過零點。
Roberts運算元
一種利用局部差分運算元尋找邊緣的運算元,分別為4領域的坐標,且是具有整數像素坐標的輸人圖像;其中的平方根運算使得該處理類似於人類視覺系統中發生的過程。
Sobel運算元
一種一階微分運算元,它利用像素鄰近區域的梯度值來計算1個像素的梯度,然後根據一定的絕對值來取捨。
Prewitt運算元
Prewitt運算元是3*3運算元模板。2個卷積核dx ,不要形成了Prewitt運算元。與Sobel運算元的方法一樣,圖像中的每個點都用這2個核進行卷積,取最大值作為輸出值。
各個運算元的優缺點:
Robert運算元定位比較精確,但由於不包括平滑,所以對於雜訊比較敏感。
Prewitt運算元和Sobel運算元都是一階的微分運算元,而前者是平均濾波,後者是加權平均濾波且檢測的圖像邊緣可能大於2個像素。這兩者對灰度漸變低雜訊的圖像有較好的檢測效果,但是對於混合多復雜雜訊的圖像,處理效果就不理想了。
LOG濾波器方法通過檢測二階導數過零點來判斷邊緣點。LOG濾波器中的a正比於低通濾波器的寬度,a越大,平滑作用越顯著,去除雜訊越好,但圖像的細節也損失越大,邊緣精度也就越低。所以在邊緣定位精度和消除雜訊級間存在著矛盾,應該根據具體問題對雜訊水平和邊緣點定位精度要求適當選取。
『肆』 邊緣檢測的檢測邊緣
如果將邊緣認為是一定數量點亮度發生變化的地方,那麼邊緣檢測大體上就是計算這個亮度變化的導數。為簡化起見,我們可以先在一維空間分析邊緣檢測。在這個例子中,我們的數據是一行不同點亮度的數據。例如,在下面的1維數據中我們可以直觀地說在第4與第5個點之間有一個邊界:
除非場景中的物體非常簡單並且照明條件得到了很好的控制,否則確定一個用來判斷兩個相鄰點之間有多大的亮度變化才算是有邊界的閾值,並不是一件容易的事。實際上,這也是為什麼邊緣檢測不是一個微不足道問題的原因之一。
檢測方法
有許多用於邊緣檢測的方法, 他們大致可分為兩類:基於搜索和基於零交叉。
基於搜索的邊緣檢測方法首先計算邊緣強度, 通常用一階導數表示, 例如梯度模,然後,用計算估計邊緣的局部方向, 通常採用梯度的方向,並利用此方向找到局部梯度模的最大值。
基於零交叉的方法找到由圖像得到的二階導數的零交叉點來定位邊緣。 通常用拉普拉斯運算元或非線性微分方程的零交叉點。
濾波做為邊緣檢測的預處理通常是必要的,通常採用高斯濾波。
已發表的邊緣檢測方法應用計算邊界強度的度量,這與平滑濾波有本質的不同。 正如許多邊緣檢測方法依賴於圖像梯度的計算,他們用不同種類的濾波器來估計x-方向和y-方向的梯度。
計算一階導數
許多邊緣檢測操作都是基於亮度的一階導數——這樣就得到了原始數據亮度的梯度。使用這個信息我們能夠在圖像的亮度梯度中搜尋峰值。如果 I(x) 表示點 x 的亮度,I′(x) 表示點 x 的一階導數(亮度梯度),這樣我們就會發現:
對於更高性能的圖像處理來說,一階導數能夠通過帶有掩碼的原始數據(1維)卷積計算得到。
計算二階導數
其它一些邊緣檢測操作是基於亮度的二階導數。這實質上是亮度梯度的變化率。在理想的連續變化情況下,在二階導數中檢測過零點將得到梯度中的局部最大值。另一方面,二階導數中的峰值檢測是邊線檢測,只要圖像操作使用一個合適的尺度表示。如上所述,邊線是雙重邊緣,這樣我們就可以在邊線的一邊看到一個亮度梯度,而在另一邊看到相反的梯度。這樣如果圖像中有邊線出現的話我們就能在亮度梯度上看到非常大的變化。為了找到這些邊線,我們可以在圖像亮度的二階導數中尋找過零點。如果 I(x) 表示點 x 的亮度,I′′(x) 表示點 x 亮度的二階導數,那麼:
同樣許多演算法也使用卷積掩碼快速處理圖像數據:
步驟:
①濾波:邊緣檢測演算法主要是基於圖像強度的一階和二階導數,但導數的計算對雜訊很敏感,因此必須使用濾波器來改善與雜訊有關的邊緣檢測器的性能。需要指出,大多數濾波器在降低雜訊的同時也導致了邊緣強度的損失,因此,增強邊緣和降低雜訊之間需要折中。
②增強:增強邊緣的基礎是確定圖像各點鄰域強度的變化值。增強演算法可以將鄰域(或局部)強度值有顯著變化的點突顯出來。邊緣增強一般是通過計算梯度幅值來完成的。
③檢測:在圖像中有許多點的梯度幅值比較大,而這些點在特定的應用領域中並不都是邊緣,所以應該用某種方法來確定哪些點是邊緣點。最簡單的邊緣檢測判據是梯度幅值閾值判據。
④定位:如果某一應用場合要求確定邊緣位置,則邊緣的位置可在子像素解析度上來估計,邊緣的方位也可以被估計出來。在邊緣檢測演算法中,前三個步驟用得十分普遍。這是因為大多數場合下,僅僅需要邊緣檢測器指出邊緣出現在圖像某一像素點的附近,而沒有必要指出邊緣的精確位置或方向。
邊緣檢測的實質是採用某種演算法來提取出圖像中對象與背景間的交界線。我們將邊緣定義為圖像中灰度發生急劇變化的區域邊界。圖像灰度的變化情況可以用圖像灰度分布的梯度來反映,因此我們可以用局部圖像微分技術來獲得邊緣檢測運算元。經典的邊緣檢測方法,是通過對原始圖像中像素的某小鄰域構造邊緣檢測運算元來達到檢測邊緣這一目的的。
『伍』 圖像邊緣檢測有哪幾種方法
sobel運算元應該是算比較簡單的,canny也算是比較常用的 ,pca我見過一般都是人臉的檢測,別的地方用的,還真不多吧,可能我水平還是有限,我剛搜了一下就有一篇文章是是關於PCA用於圖像邊緣的檢測,日本琉球大學的,已經發給你了。PCA的主要作用就是對多角度的測量數據進行觀察,去掉無用的數據,只保留主元,減小計算量,最合適的地方就是人臉識別,人臉肯定是有扭動的角度的。csdn上不少pca代碼。
邊緣檢測還是常規點好,那些sobel,roberts,canny等等多麼強大好用,為啥必須用pca啊?有篇文章 關於pca來做圖像特徵的,可能有包含邊緣的部分,自己找著下載看吧,在SPRINGER上 .
『陸』 邊緣檢測的理論依據是什麼有哪些方法各有什麼特點
就是通過一些臨近像素相關演算法突出灰度變化比較大的部分。變化平緩的取值低,變化越劇烈取值越高。比如有卷積演算法,具體計算方法,有拉普拉斯運算元、高斯運算元等的應用。
『柒』 邊緣檢測的函數是什麼
右鍵方法名 --轉到定義如果沒有這個方法,那麼就是 Gmap.Manager中尚未定義GetRouteBetweenPoints方法。如果這個Gmap.Manager類有代碼可循,那麼補充這個方法代碼。如果Gmap.Manager這個類是第三方的一個DLL引用,無法編輯。那麼這個調用就是錯誤的。
『捌』 圖像分割和圖像邊緣檢測 到底是什麼區別呢
這個還是比較好區分的。首先說邊緣檢測,邊緣檢測是通過圖像的梯度變化將圖像中梯度變化明顯的地方檢測出來,針對的是邊緣信息。圖像分割是將目標分割出來,針對的是目標對象,邊緣檢測是空間域圖像分割的一種方法,屬於包含關系
『玖』 基於matlab邊緣提取的幾種方法的比較
I=imread('lena.bmp');% 提取圖像
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運算元進行邊緣檢測
h=fspecial('gaussian』,5);
BW6=edge(I,』canny』);
subplot(2,3,1), imshow(BW1);
title(『sobel edge check』);
subplot(2,3,2), imshow(BW2);
title(『sobel 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』);
subplot(2,3,6), imshow(BW6);
title(『gasussian&canny edge check』);%此為用高斯濾波後Canny運算元邊緣檢測結果
(注意:代碼中有一些標點是中文模式,若輸入代碼後標點顯示紅色,則為中文標點,改回來就行了)