Bag - of - Visual - Works SIFT 구현 (matlab 버 전)

1. Bag - of - Visual - Works SIFT feature 지식
  • https://blog.csdn.net/wsj998689aa/article/details/47089153 BOW 원리 설명, C + + 구현
  • http://yongyuan.name/blog/CBIR-BoW-for-image-retrieval-and-practice.html BOW 원리 설명, Python 실현 (이 편 추천!)
  • http://www.vlfeat.org/install-matlab.html matlab 도구 상자 다운로드 (sift, kmeans 함수 포함)
  • 2. BoW 코드 구축 본 단계
    (copy 상기 링크 2 의 절차 설명)
    훈련 집합 에 M 폭 의 그림 이 있다 고 가정 하고 훈련 이미지 집합 을 미리 처리 합 니 다. 이미지 강화, 분할, 이미지 통일 형식, 통일 규격 등 을 포함 합 니 다. 1. SIFT 특징 을 추출 합 니 다. 그림 마다 SIFT 특징 을 추출 합 니 다. (그림 마다 몇 개의 SIFT 특징 을 추출 합 니까?)... 모든 SIFT 특징 은 128 차원 의 설명자 벡터 로 M 폭 이미지 에서 N 개의 SIFT 특징 을 추출한다 고 가정 합 니 다. 2. K - means 로 2 에서 추출 한 N 개의 SIFT 특징 을 집합 합 니 다. K - Means 알고리즘 은 샘플 간 유사 성 을 바탕 으로 하 는 간접 집합 방법 입 니 다. 이 알고리즘 은 K 를 매개 변수 로 N 개의 대상 을 K 개의 클 러 스 터 로 나 누 어 클 러 스 터 내 에서 비교적 높 은 싱크로 율 을 가지 게 하고 클 러 스 터 간 의 싱크로 율 을 가지 게 합 니 다.유사 도가 낮 습 니 다. 집합 중심 에는 k 개 (BOW 모델 에서 집합 중심 은 시각 어 라 고 부 릅 니 다) 가 있 습 니 다. 코드 북 의 길이 도 k 입 니 다. 각 그림 의 모든 SIFT 특징 을 이 k 개의 시각 단어의 거리 로 계산 하고 이 를 가장 가 까 운 시각 단어 에 투사 합 니 다 (곧 이 시각 단어의 대응 단어 주파수 + 1).이 단 계 를 마 친 후, 모든 그림 은 시각 단어 서열 에 대응 하 는 주파수 벡터 가 되 었 습 니 다. 3. 구조 코드 북. 코드 본 벡터 귀 일 화 는 각 그림 의 SIFT 특징 개수 가 정 해 지지 않 기 때문에 귀 일 화 를 필요 로 합 니 다. 테스트 이미지 도 예비 처 리 를 거 쳐 SIFT 특징 을 추출 하여, 이러한 특징 을 코드 본 벡터 에 투사 하고, 코드 본 벡터 를 획일 화 하 며, 마지막 으로 계산 해 야 합 니 다.훈련 코드 북 과 의 거 리 는 최근 거리 에 대응 하 는 훈련 이미지 가 테스트 이미지 와 일치 하 다 고 생각 합 니 다.
    3. matlab 구현
    위 링크 3 의 vlfet 도구 상 자 를 설치 해 야 합 니 다.
    clear all
    [~,Image_names_train,~] = textread('trainset_txt_img_cat.txt','%s%s%[^
    ]'
    ) ; % [~,Image_names_test,~] = textread('testset_txt_img_cat.txt','%s%s%[^
    ]'
    ); % n_train = size(Image_names_train,1); n_test = size(Image_names_test,1); numClusters = 128; D = []; train_flag = []; test_flag = []; %% ,SIFT for i=1:n_train img = Image_names_train{i}; t = strcat(img,'.jpg'); Image = imread(t); mysize = size(Image); if numel(mysize)>2 Image = rgb2gray(Image); end Image = im2single(Image); [~,Di] = vl_sift(Image); D = [D Di]; train_flag(i) = size(Di,2); end for i=1:n_test img = Image_names_test{i}; t = strcat(img,'.jpg'); Image = imread(t); mysize = size(Image); if numel(mysize)>2 Image = rgb2gray(Image); end Image = im2single(Image); [~,Di] = vl_sift(Image); D = [D Di]; test_flag(i) = size(Di,2); end %% D = im2single(D); [centers] = vl_kmeans(D, numClusters); % + K flag_sum = 0; for i = 1:n_train H = zeros(1,numClusters); Di = D(:,flag_sum+1: flag_sum + train_flag(i)); flag_sum = flag_sum + train_flag(i); for j=1:train_flag(i) [~, k] = min(vl_alldist(Di(:,j), centers)) ; % SIFT k H(k) = H(k) + 1; % ( +1) end my_I_tr(i,:) = 1/train_flag(i) * H; % SIFT , 。 end for i = 1:n_test H = zeros(1,numClusters); Di = D(:,flag_sum+1: flag_sum + test_flag(i)); flag_sum = flag_sum + test_flag(i); for j=1:test_flag(i) [~, k] = min(vl_alldist(Di(:,j), centers)) ; H(k) = H(k) + 1; end my_I_te(i,:) = 1/test_flag(i) * H; end

    좋은 웹페이지 즐겨찾기