1.邊緣檢測
(1)Roberts邊緣算子
(2)Sobel算子
(3)Prewitt算子
(4)拉普拉斯(Laplacian)算子
(5)LOG(Laplacian-Gauss)算子
(6)坎尼(Canny)算子
(7)利用霍夫(Hough)變換
圖像分割技術(shù)圖像分割是把圖像分割成若干個特定的、具有獨特性質(zhì)的區(qū)域并提取出感興趣的目標(biāo)的技術(shù)和過程。在對圖像的研究和應(yīng)用中,人們往往僅對圖像的某些部分感興趣(目標(biāo)或背景),他們一般對應(yīng)圖像中特定的、具有獨特性質(zhì)的區(qū)域。
**(1)多種特征融合的分割方法:**除利用圖像的原始灰度特征外,我們還可以利用圖像的梯度特征、幾何特征(形態(tài)、坐標(biāo)、距離、方向、曲率等)、變換特征(傅里葉譜、小波特征、分形特征等)及統(tǒng)計學(xué)特征(紋理、不變矩、灰度均值等)等高層次特征。
**(2)多種分割方法結(jié)合的分割方法:**由于目標(biāo)成像的不確定性以及目標(biāo)的多樣性,單一的分割方法很難對含復(fù)雜目標(biāo)的圖像取得理想的分割結(jié)果。
一、邊緣檢測
邊緣(Edge)是指圖像局部亮度變化最顯著的部分。邊緣主要存在于目標(biāo)、目標(biāo)與背景、區(qū)域與區(qū)域(包括不同色彩)之間,是圖像分割、紋理特征提取和形狀特征提取等圖像分析的重要基礎(chǔ)。
(1)Roberts邊緣算子
一種斜向偏差分的梯度計算方法,梯度的大小代表邊緣的強度,梯度的方向與邊緣走向垂直。Roberts操作實際上是求旋轉(zhuǎn)±45°兩個方向上微分值的和。Roberts邊緣算子定位精度高,在水平和垂直方向效果較好,但對噪聲敏感。
兩個卷積核Gx=[1 0 0 -1],Gy=[0 1 -1 0]
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
i=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
I=im2gray(i);
BW1=edge(I, 'Roberts',0.04); %Roberts算子檢測邊緣
subplot(1,2,1),
imshow(I);
title('原圖像')
subplot(1,2,2),
imshow(BW1);
title('Roberts算子檢測邊緣')
(2)Sobel算子
Sobel算子是一組方向算子,從不同的方向檢測邊緣。Sobel算子不是簡單的求平均再差分,而是加強了中心像素上下左右四個方向像素的權(quán)重,運算結(jié)果是一副邊緣圖像。Sobel算子通常對灰度漸變和噪聲較多的圖像處理得較好。
兩個卷積核Gx=[-1 0 1 -2 0 2 -1 0 1],Gy=[1 2 1 0 0 0-1 -2 -1]
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
i=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
I=im2gray(i);
BW1=edge(I, 'Sobel',0.04); %Sobel算子檢測邊緣
subplot(1,2,1),
imshow(I);
title('原圖像')
subplot(1,2,2),
imshow(BW1);
title('Sobel算子檢測邊緣')
(3)Prewitt算子
Prewitt邊緣算子是一種邊緣樣板算子,利用像素點上下、左右鄰點灰度差,在邊緣處達(dá)到極值檢測邊緣,對噪聲具有平滑作用。由于邊緣點像素的灰度值與其領(lǐng)域點像素的灰度值有顯著不同,在實際應(yīng)用中通常采用微分算子和模板匹配方法檢測圖像的邊緣。Prewitt算子不僅能檢測邊緣點,而且能抑制噪聲的影響,因此對灰度和噪聲較多的圖像處理得較好。
兩個卷積核Gx=[-1 0 1 -2 0 2 -1 0 1],Gy=[1 2 1 0 0 0-1 -2 -1]
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
i=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
I=im2gray(i);
BW1=edge(I, 'prewitt',0.04); % 0.04為梯度閾值
subplot(1,2,1)
imshow(I);
title('原圖像')
subplot(1,2,2),
imshow(BW1);
title('Prewitt算子檢測邊緣')
(4)拉普拉斯(Laplacian)算子
如果所求的一階導(dǎo)數(shù)高于某一閾值,則可確定該點為邊緣點,這樣做會導(dǎo)致檢測的邊緣點太多。一種更好的方法就是求梯度局部最大值對應(yīng)的點,并認(rèn)定它們是邊緣點,若用閾值來進(jìn)行邊緣檢測,則在a和b之間的所有點都被記為邊緣點。但通過去除一階導(dǎo)數(shù)中的非局部最大值,可以檢測出更精確的邊緣。
(5)LOG(Laplacian-Gauss)算子
高斯濾波和拉普拉斯邊緣檢測結(jié)合在一起,形成LOG算法,也稱之為拉普拉斯高斯算法。LOG算子是對Laplacian算子的一種改進(jìn),它需要考慮5×5鄰域的處理,從而獲得更好的檢測效果。
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
i=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
I=im2gray(i);
BW1=edge(I, 'log',0.003,2); %sigma=2
subplot(1,3,1);
imshow(I);
title('原圖像')
subplot(1,3,2);
imshow(BW1);
title(' sigma =2的LOG算子檢測的邊緣')
BW1=edge(I, 'log',0.003,3); % sigma=3
subplot(1,3,3);
imshow(BW1);
title('sigma =3的LOG算子檢測的邊緣')
(6)坎尼(Canny)算子
檢測階躍邊緣的基本思想是在圖像中找出具有局部最大梯度幅值的像素點。檢測階躍邊緣的大部分工作集中在尋找能夠用于實際圖像的梯度數(shù)字逼近。
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
i=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
I=im2gray(i);
BW1=edge(I, 'canny',0.2); %Canny算子邊緣檢測
subplot(1,2,1);
imshow(I);
title('原圖像')
subplot(1,2,2);
imshow(BW1);
title('Canny算子邊緣檢測')
%%所有都放一起比較
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
i=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
I=im2gray(i);
BW1=edge(I, 'Roberts',0.04); %Roberts算子
BW2=edge(I, 'Sobel',0.04); %Sobel算子
BW3=edge(I, 'Prewitt',0.04); %Prewitt算子
BW4=edge(I, 'LOG',0.004); % LOG算子
BW5=edge(I, 'Canny',0.04); % Canny算子
subplot(2,3,1),
imshow(I);
title('原圖像');
subplot(2,3,2),
imshow(BW1)
title('Roberts ')
subplot(2,3,3),
imshow(BW2)
title(' Sobel ')
subplot(2,3,4),
imshow(BW3)
title(' Prewitt ')
subplot(2,3,5),
imshow(BW4)
title(' LOG ')
subplot(2,3,6),
imshow(BW5)
title('Canny ')
Roberts算子提取邊緣的結(jié)果邊緣較粗,邊緣定位不很準(zhǔn)確,Sobel算子和Prewitt算子對邊緣的定位就準(zhǔn)確了一些,而采用拉普拉斯高斯算子進(jìn)行邊緣提取的結(jié)果要明顯優(yōu)于前三種算子,特別是邊緣比較完整,位置比較準(zhǔn)確。相比而言,Canny算子提取的邊緣最為完整,而且邊緣的連續(xù)性很好,效果優(yōu)于以上其他算子,這主要是因為它進(jìn)行了“非極大值抑制”和形態(tài)學(xué)連接操作的結(jié)果。
(7)利用霍夫(Hough)變換
檢測圖像邊緣的算法Hough變換本來是應(yīng)用于直線檢測中的,充分體現(xiàn)了Hough變換具有明了的幾何解析性、一定的抗干擾能力以及易于實現(xiàn)并行處理等優(yōu)點。文章來源:http://www.zghlxwxcb.cn/news/detail-462656.html
clc; %clc的作用就是清屏幕
clear; %clear是刪除所有的變量
close all; %close all是將所有打開的圖片關(guān)掉。
I=imread('E:\我的桌面\MATLAB\練習(xí)\3.jpg'); %讀取圖像
rotI=rgb2gray(I);
subplot(2,2,1);
imshow(rotI);
title('灰度圖像');
axis([50,250,50,200]);
grid on;
axis on;
BW=edge(rotI, 'prewitt'); %prewitt算子邊緣檢測
subplot(2,2,2);
imshow(BW);
title('prewitt算子邊緣檢測后圖像');
axis([50,250,50,200]);
grid on;
axis on;
[H, T, R]=hough(BW); %霍夫變換
subplot(2,2,3);
imshow(H, [], 'XData', T, 'YData', R, 'InitialMagnification', 'fit');
title('霍夫變換圖');
xlabel('\theta'), ylabel('\rho');
axis on , axis normal, hold on;
P=houghpeaks(H,5, 'threshold', ceil(0.3*max(H(:))));
x=T(P(:,2)); y=R(P(:,1));
plot(x, y, 's', 'color', 'white');
lines=houghlines(BW, T, R, P, 'FillGap',5, 'MinLength',7);
subplot(2,2,4); , imshow(rotI);
title('霍夫變換圖像檢測');
axis([50,250,50,200]);
grid on;
axis on;
hold on;
max_len=0;
for k=1:length(lines)
xy=[lines(k).point1; lines(k).point2];
plot(xy(:,1), xy(:,2), 'LineWidth',2, 'Color', 'green');
plot(xy(1,1), xy(1,2), 'x', 'LineWidth',2, 'Color', 'yellow');
plot(xy(2,1), xy(2,2), 'x', 'LineWidth',2, 'Color', 'red');
len=norm(lines(k).point1-lines(k).point2);
if(len>max_len)
max_len=len;
xy_long=xy;
end
end
plot(xy_long(:,1), xy_long(:,2), 'LineWidth',2, 'Color', 'cyan');
文章來源地址http://www.zghlxwxcb.cn/news/detail-462656.html
到了這里,關(guān)于matlab中圖像分割技術(shù)之一邊緣檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!