MATLAB Alpha Shape演算法檢測邊緣點

2021-08-21 19:09:26 字數 2054 閱讀 4852

α-shapes的具體演算法流程如下:

①從點集ps中任意選擇一點p1開始,將與之距離小於2×α的點組成的新的點集ps2 如示意圖4.3左圖中的所有點,從ps2中任意選取一點p2 ,利用公式(4.1)和(4.2)求出過p1、p2 點的圓心p12。

②遍歷點集ps2,依次求出(p1、p2 除外)其它點到p12的距離d:

a.如果求出的所有d均大於半徑α,如示意圖4.3(a)中的上方兩圓,其內沒有其他點,則可以判斷出點p1和p2 是邊緣輪廓點,p1 p2 是邊界線段;

b.如果當求出的d中有小於半徑α的值時,如圖4.3(a)中的下方兩圓,在圓內有其他點,則可以判斷不是邊緣輪廓點,停止遍歷,轉到③。

③選擇ps2中的下乙個點按步驟①、②進行判斷,直到ps2中的全部點全部判斷結束。

④取ps 中下乙個點按步驟①、②、③進行判斷,直到ps中的全部點判斷結束。

當上述步驟運算結束後,離散點集ps的邊緣輪廓點就被檢測出來了,如圖4.3(b)可以看出用α-shapes方法不光可以檢測出凸多邊形的邊緣輪廓點,還可以檢測凹多邊形的邊緣輪廓點,對有空洞的建築物也可以進行邊緣輪廓點的檢測。

在我的程式中y表示橫座標,z表示縱座標。有興趣的專家可以稍作修改後參考看看。

% alpha shape演算法檢測邊緣點

data=load('matlab.mat');

% data=lasreadall(points);%點雲讀取

alpha=0.05;%輸入alpha值

y=(data.pp(1,:));

z=(data.pp(2,:));

s1=[y;z];%點集s1

n=length(y);

d=zeros(n);

ys=zeros(n);

zs=zeros(n);

for i=1:n

for j=1:n

p=s1(:,i)-s1(:,j);

d(i,j)=sqrt(p(1)^2+p(2)^2);

if d(i,j)<2*alpha

ys(i,j)=y(j);

zs(i,j)=z(j);

endend

endclear i j

a=cell(1,n);b=cell(1,n);e=;f=;

for i=1:n

a=(0);

b=(0);

e=ys(i,:);

f=zs(i,:);

e(e==0)=;

f(f==0)=;

a=a+e;

b=b+f;

endy=;z=;d=;y0=0;z0=0;

for i=1:n

y=a;

z=b;

s2=[y;z];

m1=length(y);

for j1=1:m1

if s2(:,j1)==[y(i);z(i)]

s2(:,j1)=;

clear y z

y=s2(1,:);

z=s2(2,:);

m2=length(y);

break;

endend

for j2=1:m2

ss=(y(i)-y(j2))^2+(z(i)-z(j2))^2;

h=sqrt(alpha*alpha/ss-0.25);

y0=y(i)+0.5*(y(j2)-y(i))+h*(z(j2)-z(i));

z0=z(i)+0.5*(z(j2)-z(i))+h*(y(i)-y(j2));

d=zeros(1,m2);

for k=1:m2

d(k)=sqrt((y(k)-y0)^2+(z(k)-z0)^2);

endif min(d)>=alpha

y(i)=smooth(y(i));

z(i)=smooth(z(i));

plot(y(i),z(i),'g','linewidth',3)

hold on

break;

% else plot(y(i),z(i),'b.')

endend

endaxis equal;

邊緣檢測演算法

邊緣是由灰階等高線定義的,穿過等高線時,灰階會迅速變化,沿著等高線走,灰階值的變化會更加輕柔,有可能是隨機變化的,因此邊緣具有乙個可以測量的方向。邊緣畫素和雜訊畫素相比周圍的畫素都有明顯的變化,而邊緣畫素互相連線,構成等高線,因此可以通過這一特性區分邊緣畫素和雜訊畫素。1 數位化 影象的取樣不可能使...

邊緣檢測常見演算法

索貝爾運算元 sobel operator 主要用作邊緣檢測,在技術上,它是一離散性差分運算元,用來運算影象亮度函式的灰度之近似值。在影象的任何一點使用此運算元,將會產生對應的灰度向量或是其法向量 sobel卷積因子為 該運算元包含兩組3x3的矩陣,分別為橫向及縱向,將之與影象作平面卷積,即可分別得...

Sobel邊緣檢測演算法

索貝爾運算元 sobel operator 主要用作邊緣檢測,在技術上,它是一離散性差分運算元,用來運算影象亮度函式的灰度之近似值。在影象的任何一點使用此運算元,將會產生對應的灰度向量或是其法向量 sobel 卷積因子為 該運算元包含兩組 3x3的矩陣,分別為橫向及縱向,將之與影象作平面卷積,即可分...