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...