基於matlab的SUSAN特徵檢測實現

2021-08-31 16:10:15 字數 2310 閱讀 8193

susan運算元是乙個原理簡單、易於了解的運算元。由於其指數基於對周邊象素的 灰度比較,完全不涉及梯度的運算,因此其抗雜訊能力很強,運算量也比較小;同時,susan運算元還是乙個各向同性的運算元;最後,通過控制引數t和g,可以根據具體情況很容易地對不同對比度、不同形狀的影象通過設定恰當的t和g進行控制。比如影象的對比度較大,則可選取較大的t值,而影象的對比度較小,則可選取較小的t值。總之,susan運算元是乙個非常難得的運算元,不僅具有很好的邊緣檢測效能;而且對角點檢測也具有很好的效果。

關於susan的檢測原理請參考:(這裡不再過多贅述。

接下來帶給大家我用matlab對susan運算元的實現過程,請看**;

% detectsusanfeayures.m    author:ephemeroptera  date:2018\11\12 

%7x7 圓周template的區域性位址

% [-1,-3] [0,-3] [1,-3]

% [-2,-2] [-1,-2] [0,-2] [1,-2] [2,-2]

% [-3,-1] [-2,-1] [-1,-1] [0,-1] [1,-1] [2,-1] [3, -1]

% [-3, 0] [-2, 0] [-1, 0] [0, 0] [1, 0] [2, 0] [3 , 0]

% [-3 ,1] [-2, 1] [-1, 1] [0, 1] [1, 1] [2 ,1] [3 , 1]

% [-2, 2] [-1, 2] [0, 2] [1 ,2] [2 ,2]

% [-1 ,3] [0, 3] [1, 3]

%%formula:c(r,r0)= 1 if |i(r)-i(r0)|<=t;

% 0 if |i(r)-i(r0)|>t;

% usan(r0)=σc(r,r0);

%設定圓周模板半徑和滑動視窗的步長

radius=3;xstep=1;ystep=1;

template=fspecial('disk',radius);

template(template>0.01)=1; %模板二值化

template(template<0.01)=0;

%提取圓周模板的邏輯位址

[tem_x,tem_y]=find(template==1);

tem_x=tem_x-radius-1;

tem_y=tem_y-radius-1;

t=45; %usan判定閾值

i = imread('cameraman.tif');

w=size(i,2);h=size(i,1); %影象大小

nucleas_x=radius+1:xstep:w-radius; %模板圓心即nucleas運動範圍

nucleas_y=radius+1:ystep:h-radius;

usan=zeros(size(i,1),size(i,2)); %初始化usan累加器

%網格遍歷

tic;

for y=nucleas_y

for x=nucleas_x

for e=1:length(tem_x) %圓周模板上進行判定

delta=i(y+tem_y(e),x+tem_x(e))-i(y,x);

if delta0)=1;

figure(1),imshow(bin,),title('susan 邊緣檢測');

%角點檢測(非極大值抑制)

corners=;

for i=2:h-1

for j=2:w-1

if r(i,j)>max([max(r(i-1,j-1:j+1)),r(i,j-1) ,r(i,j+1), max(r(i+1,j-1:j+1))])

corners=[corners;[i,j]];

endend

end% i = insertmarker(i,corners);

figure(2);imshow(i);hold on;

set(gca,'xaxislocation','top','yaxislocation','left','ydir','reverse');

scatter(corners(:,2),corners(:,1),'x','g'),title('susan 角點檢測');

hold off;

程式實現結果如下:

matlab練習程式(SUSAN檢測)

susan運算元既可以檢測角點也可以檢測邊緣,不過角點似乎比不過harris,邊緣似乎比不過canny。不過思想還是有點意思的。主要思想就是 首先做乙個和原影象等大的目標影象。然後用乙個圓形的模板,用模板去遍歷原影象每個畫素,把模板內的每個畫素都和模板中心畫素比較,如果灰度小於乙個閾值,那麼就對目標...

matlab練習程式(SUSAN檢測)

susan運算元既可以檢測角點也可以檢測邊緣,不過角點似乎比不過harris,邊緣似乎比不過canny。不過思想還是有點意思的。主要思想就是 首先做乙個和原影象等大的目標影象。然後用乙個圓形的模板,用模板去遍歷原影象每個畫素,把模板內的每個畫素都和模板中心畫素比較,如果灰度小於乙個閾值,那麼就對目標...

基於matlab的FFT分析

離散傅利葉變換dft的計算公式如下,fft為dft的一種快速演算法。n 64時 fs 100 取樣頻率 n 64 資料點數 n 0 n 1 抽樣間隔ts 1 fs,所以t n ts n fs為時間序列 t n fs 時間序列 x 0.5 sin 2 pi 15 t 2 sin 2 pi 40 t y...