邊緣識別演算法
Ⅰ 邊緣檢測是什麼意思
兩個具有不同灰度值的相鄰區域之間總存在邊緣,邊緣是灰度值不連續的表現。由於邊緣是圖像上灰度變化最劇烈的地方,傳統的邊緣檢測就是利用了這個特點,對圖像各個像素點進行微分或求二階微分來確定邊緣像素點。
以下是一段函數是關於邊緣檢測的一些演算法,希望對你有幫助。。
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,[9 9]); %中值濾波
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');
Ⅱ 常見的邊緣演算法有哪幾種,試論述各種方法的優缺點
一、冒泡排序
已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與 a[2]的值,若a[1]大於a[2]則交換 兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比 較a[3]與a[4],以此 類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組數據中最大的。再對a[1]~a[n- 1]以相同方法 處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,以此類推。共處理 n-1 輪 後a[1]、a[2]、……a[n]就以升序排列了。
優點:穩定;
缺點:慢,每次只能移動相鄰兩個數據。
二、選擇排序
每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數 據元素排完。
選擇排序是不穩定的排序方法。
n 個記錄的文件的直接選擇排序可經過n-1 趟直接選擇排序得到有序結果:
①初始狀態:無序區為R[1..n],有序區為空。
②第1 趟排序 在無序區R[1..n]中選出關鍵字最小的記錄R[k],將它與無序區的第1 個記錄R[1]交換,使R[1..1]和R[2..n]分別變 為記錄個數增加1 個的新有序區和記錄個數減少1 個的新無序區。
③第i 趟排序
第i 趟排序開始時,當前有序區和無序區分別為R[1..i-1]和R(1≤i≤n-1)。該趟 排序從當前無序區中選出關鍵字最 小的記錄 R[k],將它與無序區的第1 個記錄R 交換,使R[1..i]和R 分別變為記錄個數增加1 個的新有序區和記錄個數減少 1 個的新無序區。
這樣,n 個記錄的文件的直接選擇排序可經過n-1 趟直接選擇排序得到有序結果。
優點:移動數據的次數已知(n-1 次);
缺點:比較次數多。
三、插入排序
已知一組升序排列數據a[1]、a[2]、……a[n],一組無序數據b[1]、 b[2]、……b[m],需將二者合並成一個升序數列。 首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值, 若b[1]仍然大於a[2],則繼續跳過,直 到b[1]小於a 數組中某一數據a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來 a[x]的位置這就完成了b[1] 的插入。b[2]~b[m]用相同方法插入。(若無數組a,可將b[1]當作n=1 的數組a)
優點:穩定,快;
缺點:比較次數不一定,比較次數越少,插入點後的數據移動越多,特別是當數據總量龐大的時候,但用鏈表可以解決 這個問題。
四、縮小增量排序
由希爾在1959 年提出,又稱希爾排序(shell 排序)。
已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。發現當n 不大時,插入 排序的效果很好。首先取一增 量d(d<n),將a[1]、a[1+d]、a[1+2d]……列為第一組,a[2]、a[2+d]、 a[2+2d]……列為第二組……,a[d]、a[2d]、a[3d]……="" 列為最後一組以次類推,在各組內用插入排序,然後取d'<d,重復上述操="" 作,直到d="1。"
優點:快,數據移動少;=""
缺點:不穩定,d="" 的取值是多少,應取多少個不同的值,都無法確切知道,只能憑經驗來取。=""
五、快速排序=""
快速排序是冒泡排序的改進版,是目前已知的最快的排序方法。
="" 已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先任取數據a[x]="" 作為基準。比較a[x]與其它數據並="" 排序,使a[x]排在數據的第k="" 位,並且使a[1]~a[k-1]中的每一個數="" 據a[x],然後采 用分治的策略分別對a[1]~a[k-1]和a[k+1]~a[n] 兩組數據進行快速排序。
優點:極快,數據移動少;
缺點:不穩定。