海明嵌入Hamming Embedding生成Binary Signature之matlab程序代码
生活随笔
收集整理的這篇文章主要介紹了
海明嵌入Hamming Embedding生成Binary Signature之matlab程序代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
% This code generates 128-bit hamming code "bs" for SIFT features %128-D % "bs": binary signature
%
% Bug fixed by Liang Zheng on 01/26/2015. %% load previous data
feat_file = '100000.siftgeo'; % folder of holidays features %holidays特征
word_file = '100000_word.mat'; % holidays visual word %visual_word:3*1125 double
P = importdata('projection_matrix_128bits.mat');% load projection matrix %映射矩陣 %P:128*128 double %mat文件怎么計算來的??
thres = importdata('thres_20k_128bits.mat');% load median matrix中位數矩陣 %thres:128*20000 double% a matrix for converting 01 strings into 0-255 uint8 data %轉換01串-> 0~255 % 將二進制轉為uint8的十進制
% uint8 data
nbits = 128; %nbits:number of bits for SIFT feature
m = 2.^(0:7); %m = [1 2 4 8 ... 128] % (0:7)是個向量 [0, 1, 2, 3, 4, 5, 6, 7]
M = m; % [1 2 4 8 ... 128]
for i = 2:nbits/8 %2~128/8 % 2~16 % 循環15次,最后得到的矩陣大小是 <16,(8*16)>即<16, 128>% 斜對角串聯,每次增加一行,增加size(m, 2)=8列,每次斜對角方向增加一個m,其他部位填充0M = blkdiag (M, m); %Block diagonal concatenation of matrix input arguments
end
bin2compactbin = M;% for each image, calculate the HE signatures of its features 計算特征的HE
% signature
[data, meta] = siftgeo_read(feat_file); % load features %feat_file = '100000.siftgeo'; data: n*128
data = data'; %轉置后,data:128*n % rootSIFT
sum_val = sum(data); %sum_val: 1*128 %1、求和
for i = 1:128data(i, :) = data(i, :)./sum_val; %2、 ./ 點除
end
data = single(sqrt(data)); %3、根方,并轉為single類型visual_word = importdata(word_file); % load visual word %word_file = '100000_word.mat'; %visual_word:3*1125 %對應descriptors的visual words
nsift = size(visual_word, 2); %nsift = 1125, 1125個sift keypoints,size(visual_word, 1)是MA(kNN),size(visual_word, 2)是sift descriptors的個數%% feature projection and binarization %特征映射與二值化
temp_data = P*data; % projected feature %data是RootSIFT特征 %% P = importdata('projection_matrix_128bits.mat');
kNN = 3; % number of visual words assigned to each SIFT feature %visual word就是index,賦給每個SIFT feature的visual words
hamming_data = zeros(128, nsift*kNN);% note, multiple assignment is implied here. kNN = 3. %注意 MA = kNN = 3,即每個feature對應3個visual words, hamming_data:128*(nsift*kNN)
if ~isempty(visual_word) %非空for i = 1:kNN %1~3vw_index = visual_word(i, :); %visual_word:3*1125, 取每一行i,vw_index: 1*1125thresh = thres(:,vw_index); %thres = importdata('thres_20k_128bits.mat'); thres:128*20000,截取thres矩陣,新得到的thres:128*1125IDX = i:3:((nsift-1)*3+i); %nsift是rootSFIT個數,1125, i:3:(1124*3+i)hamming_data(:, IDX) = temp_data - thresh; % projected data minus median matrixendhamming_data(hamming_data > 0) = 1; %hamming_data > 0的部分置為1,其余部分置為0hamming_data(hamming_data <=0 ) = 0;% bs: binary signaturebs = uint8 (bin2compactbin*hamming_data); % convert 01 strings into uint8 data %bin2compactbin = M;
else %visual_word為空bs = [];
end% save file. bs is used as the binary signature of SIFT features
write_file = '100000_he.txt';
fid = fopen(write_file, 'w'); %創建100000_he.txt文件
fwrite(fid, bs, 'uint8'); %將binary signature寫入100000_he.txt
fclose(fid);
總結
以上是生活随笔為你收集整理的海明嵌入Hamming Embedding生成Binary Signature之matlab程序代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jeff Atwood倾情推荐——程序员
- 下一篇: 所有编程皆为Web编程