matlab練習程序(BRIEF描述子)


BRIEF特征全稱:Binary Robust Independent Elementary Features。是一種能夠快速計算圖像特征描述符的方法,同樣能夠降低特征匹配的時間。

算法計算步驟如下:

1.首先對一張圖像計算其特征點,這里就用matlab自帶的harris角點檢測了,harris代碼細節可以參考這一篇博客

2.對圖像進行高斯濾波,這里選用9*9矩陣,主要是為了去除隨機噪點。

3.以特征點為中心,取SxS的鄰域窗口。在窗口內隨機選取一對(兩個)點,比較二者像素的大小,進行如下二進制賦值。

其中,p(x),p(y)分別是隨機點x=(u1,v1),y=(u2,v2)的像素值。

 4.選窗口內隨機點對的策略有以下五種方法,推薦第二種:

對應的鄰域隨機點對圖像如下(一條線段的兩個端點是一對):

5.最終就得到了多組二進制編碼,后續匹配可以利用編碼距離來確定特征點的相似度。

一定要注意的是后續匹配要選用相同的點對,所以這組點對是要保留的。

matlab代碼如下:

clear all;
close all;
clc;

R = 48;     %特征鄰域窗口直徑
K = 9;      %高斯濾波半徑
N = 256;    %特征位數

img=imread('lena.jpg');
imshow(img)
[h,w]=size(img);

p = detectHarrisFeatures(img);          %系統自帶的檢測harris角點
p = p.Location;

p = p(p(:,1)>R & p(:,1)<h-R & ...       %將太靠近邊界的特征點去掉,避免鄰域隨機點越界
    p(:,2)>R & p(:,2)<w-R,:);

H=fspecial('gaussian',[K K],2);         %高斯平滑
img=imfilter(img,H,'replicate');

s = normrnd(0,R/5,N,4);                 %生成鄰域中隨機點對GII
figure;                                 %顯示一下
for i=1:N
   plot(s(i,1:2),s(i,3:4));    
   hold on;
end

tao = zeros(length(p),N);
for i=1:length(p)           %生成所有特征點的brief描述子    
    px = floor(p(i,:) + s(:,1:2));      %懶得插值提亞像素值了,直接最鄰近
    py = floor(p(i,:) + s(:,3:4));
    
    for j=1:N
        if img(px(j,2),px(j,1)) < img(py(j,2),py(j,1)) 
            tao(i,j) = 1;
        else
            tao(i,j) = 0;
        end
    end
    
    img(floor(p(i,2)),floor(p(i,1))) = 255;
end
figure;                 %顯示harris角點
imshow(img,[])

figure;                 %顯示一下描述子
imshow(tao,[])

結果如下:

原圖:

Harris特征點:

鄰域隨機點對,這里使用GII:

BRIEF描述子,這里可視化了:

參考:https://blog.csdn.net/hujingshuang/article/details/46910259


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM