源碼

本來(lái)還在看亞像素的計(jì)算方法 發(fā)現(xiàn)了這個(gè)超好用的源碼 不僅有了亞像素的精確計(jì)算整體的計(jì)算速度也不慢

MatLab 源碼

% Harris角點(diǎn)提取算法并精確至亞像素級(jí)

t=input('請(qǐng)輸入你要處理的圖像全名(含擴(kuò)展名):','s');  % 提示輸入要處理的圖像
tic;                                                 %計(jì)時(shí)開始
Image = imread(t);                                   % 讀取圖像
Image = rgb2gray(Image);                             % 轉(zhuǎn)化為灰度圖像    
HdImage=Image;                                       % 轉(zhuǎn)化后的灰度圖像
fx = [-1 0 1;-1 0 1;-1 0 1];                         % x方向的Prewitt算子,用于對(duì)x方向?yàn)V波 
Ix = filter2(fx,HdImage);                            % 對(duì)x方向?yàn)V波 
fy = [-1 -1 -1;0 0 0;1 1 1];                         % y方向的Prewitt算子,用于對(duì)y方向?yàn)V波 
Iy = filter2(fy,HdImage);                            % 對(duì)y方向?yàn)V波 
Ix2 = Ix.^2;                                         % .^2用來(lái)求數(shù)組的平方
Iy2 = Iy.^2;                                         % .^2用來(lái)求數(shù)組的平方
Ixy = Ix.*Iy;                                        % 數(shù)組相乘
h= fspecial('gaussian',[9 9],2);                     % 產(chǎn)生9*9的高斯窗口,sigma=2,產(chǎn)生的窗口越大,得到的角點(diǎn)越少(7-11)
A = filter2(h,Ix2);                                  % 用產(chǎn)生的高斯窗口處理Ix2得到A 
B = filter2(h,Iy2);                                  % 用產(chǎn)生的高斯窗口處理Iy2得到B 
C = filter2(h,Ixy);                                  % 用產(chǎn)生的高斯窗口處理Ixy得到C
height = size(HdImage,1);                            % 計(jì)算圖像的第一維的元素?cái)?shù),即行數(shù)
width = size(HdImage,2);                             % 計(jì)算圖像的第二維的元素?cái)?shù),即列數(shù)
CRF = zeros(height,width);                           % 生成一個(gè)和圖像大小一致的全0的double型數(shù)組,用來(lái)保存角點(diǎn)響應(yīng)函數(shù)值
CRFmax = 0;                                          % 保存圖像中最大的角點(diǎn)響應(yīng)函數(shù)值 
%M = [A(i,j) C(i,j);C(i,j) B(i,j)];             
%CRF(i,j) = det(M)-0.05*(trace(M))^2;                % 計(jì)算角點(diǎn)響應(yīng)函數(shù)值,k的取值一般在0.04--0.06   
CRF=(A.*B - C.^2) - 0.05*(A + B).^2;                 %代碼的優(yōu)化把for循環(huán)改為向量循環(huán),k=0.05 
CRFmax=max(max(CRF));                                %找到最大的角點(diǎn)響應(yīng)函數(shù)(用來(lái)設(shè)置閾值時(shí)用)
l=ordfilt2(CRF,7^2,ones(7));                         %生成在7*7的窗口進(jìn)行非最大值抑制(排序?yàn)V波器)
k=(l==CRF)&(CRF>0.003*CRFmax);                       %設(shè)定閾值為0.01*CRFmax,只有是局部最大值并且角點(diǎn)響應(yīng)函數(shù)值大于閾值才是角點(diǎn)
[v, u] = find(k);                                    % 找到角點(diǎn)是的位置,并保存
count = size(u,1);                                   % 用來(lái)記錄角點(diǎn)的個(gè)數(shù)
disp('檢測(cè)到的角點(diǎn)個(gè)數(shù)為:')  
disp(count)                                          % 輸出角點(diǎn)個(gè)數(shù) 
figure,imshow(HdImage);                              % 顯示灰度圖像
hold on; 
plot(u,v,'r.');                                      % 在灰度圖像上用紅色‘.‘標(biāo)出角點(diǎn)的位置

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                   以下程序把角點(diǎn)精確到亞像素級(jí),所用窗口為3*3+5*5                              %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

u1=ones(count,1);                                    %保存改進(jìn)后的角點(diǎn)坐標(biāo)
v1=ones(count,1);                                    %保存改進(jìn)后的角點(diǎn)坐標(biāo)
HdImage=double(HdImage); 
for i=1:count
    H=zeros(1,2);                                    %保存梯度
    m=zeros(1,2);
    n=0;
    if((u(i)+3<=width)&(v(i)+3<=height)&(u(i)>3)&(v(i)>3))
        for p=(v(i)-1):(v(i)+1)
            for q=(u(i)-1):(u(i)+1)
                H=[HdImage(p,q+1)-HdImage(p,q),HdImage(p+1,q)-HdImage(p,q)];
                m=m+H*H'*[q,p];
                n=n+H*H';
            end;
        end;
        for p=(v(i)-2):1:(v(i)+2)
            for q=(u(i)-2):1:(u(i)+2)
                H=[HdImage(p,q+1)-HdImage(p,q),HdImage(p+1,q)-HdImage(p,q)];
                m=m+H*H'*[q,p];
                n=n+H*H';
            end;
        end;
    g=m/n;
    u1(i,1)=g(1);
    v1(i,1)=g(2);
    else
    u1(i,1)=u(i,1);
    v1(i,1)=v(i,1);
    end
end; 
hold on; 
plot(u1,v1,'g.');                                      % 在灰度圖像上用綠色‘.‘標(biāo)出角點(diǎn)優(yōu)化后的位置
disp('角點(diǎn)的坐標(biāo)為: u--v          改進(jìn)后    ')
disp([u,v,u1,v1])                                      %顯示原始的和改進(jìn)后的角點(diǎn)坐標(biāo)
toc                                                    %計(jì)時(shí)結(jié)束
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,401評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,635評(píng)論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,128評(píng)論 1 323
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,365評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,881評(píng)論 1 334
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,733評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,935評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,172評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評(píng)論 1 282
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,595評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,908評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容