Main Content

bagOfFeatures

Bag-of-visual-words 객체

설명

시각 기반의 동시적 위치추정 및 지도작성(vSLAM)에서 영상 범주 분류, 영상 검색 또는 루프 폐쇄 검출에 사용할 용도로 bag-of-visual-words를 만들 수 있습니다.

생성

설명

예제

bag = bagOfFeatures(imds)는 bag-of-features 객체를 반환합니다. bag 출력 객체는 imds 입력값의 샘플을 사용하여 생성됩니다. 기본적으로, imds의 영상에서 추출된 SURF 특징에서 시각 단어집이 생성됩니다.

bag = bagOfFeatures(imds,'CustomExtractor',extractorFcn)은 사용자 지정 특징 추출기 함수를 사용하여 imds의 영상에서 특징을 추출하는 bag-of-features를 반환합니다. extractorFcn은 사용자 지정 특징 추출 함수에 대한 함수 핸들입니다.

bag = bagOfFeatures(imds,Name=Value)는 위에 열거된 구문의 인수 조합 외에 하나 이상의 이름-값 인수를 사용하여 옵션을 지정합니다. 예를 들어 bag = bagOfFeatures(imds,Verbose=true)Verbosetrue로 추가로 설정합니다.

이 객체는 여러 MATLAB® 워커를 사용하는 병렬 연산을 지원합니다. Computer Vision Toolbox 기본 설정 대화 상자에서 병렬 연산을 활성화합니다. Computer Vision Toolbox™ 기본 설정을 열려면 탭의 환경 섹션에서 기본 설정을 클릭하십시오. 그런 다음 Computer Vision Toolbox를 선택합니다.

입력 인수

모두 확장

영상으로, ImageDatastore 객체로 지정됩니다. bagOfFeaturesimds 객체에 포함된 영상에서 동일한 개수만큼씩 가장 강한 특징을 추출합니다. 가장 강한 특징의 개수는 다음과 같이 정의됩니다.

number of strongest features = min(각 세트에서 발견된 특징 개수) x StrongestFraction

이 객체는 StrongestFeatures 속성에서 StrongestFraction 값을 얻습니다.

사용자 지정 특징 추출기 함수로, 함수 핸들로 지정됩니다. 이 사용자 지정 함수는 객체의 시각 단어집을 학습할 수 있도록 특징을 추출합니다.

함수 extractorFcn은 다음과 같이 파일에 대한 함수 핸들로 지정해야 합니다.

extractorFcn = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,CustomExtractor=extractorFcn)
여기서 exampleBagOfFeaturesExtractor는 MATLAB 함수입니다. 예를 들면 다음과 같습니다.
function [features,featureMetrics,location] = exampleBagOfFeaturesExtractor(img)
...
함수는 경로 또는 현재 작업 디렉터리에 있어야 합니다. 인수는 다음과 같이 정의됩니다.

인수 입력값/출력값설명
img입력값
  • 이진 영상, 회색조 영상 또는 트루컬러 영상.

  • 입력 영상은 bagOfFeatures로 전달된 원래의 영상 세트에서 가져옵니다.

features출력값

  • binaryFeatures 객체.

  • 영상 특징으로 구성된 M×N 숫자형 행렬. 여기서 M은 특징의 개수이고 N은 각 특징 벡터의 길이입니다.

  • 특징 길이 N은 0보다 크고 bagOfFeatures 생성 과정 동안 처리된 모든 영상에 대해 동일해야 합니다.

  • 영상에서 특징을 추출할 수 없는 경우 빈 특징 행렬과 빈 특징 메트릭 벡터를 제공하십시오. 예를 들어 특징 추출에 대한 키포인트를 찾지 못한 경우 빈 행렬 및 벡터를 사용하십시오.

  • 실수 숫자형 비희소(nonsparse) 형식.

featureMetrics출력값

  • 각 특징 벡터의 강도를 나타내는 특징 메트릭으로 구성된 M×1 벡터.

  • bagOfFeatures 프레임워크에서 'SelectStrongest' 기준을 적용하는 데 사용됩니다.

  • 실수 숫자형 비희소(nonsparse) 형식.

location출력값

  • 1부터 시작하는 [x y] 값으로 구성된 M×2 행렬.

  • [x y] 값은 소수일 수 있습니다.

  • 실수 숫자형 비희소(nonsparse) 형식.

사용자 지정 추출기 함수와 그 입력 및 출력 요구 사항에 대한 자세한 내용은 Create a Custom Feature Extractor 항목을 참조하십시오.

MATLAB 명령줄에 다음 명령을 입력하여 예제 함수 파일을 열고 템플릿으로 사용할 수 있습니다.

edit('exampleBagOfFeaturesExtractor.m')

속성

모두 확장

사용자 지정 특징 추출기 함수로, 함수에 대한 핸들로 지정됩니다. 사용자 지정 특징 추출기 함수는 bagOfFeatures에 대한 시각 단어집을 학습하는 데 사용되는 특징을 추출합니다. 'CustomExtractor'와 사용자 지정 특징 추출 함수에 대한 함수 핸들 extractorFcn을 지정해야 합니다.

함수 extractorFcn은 다음과 같이 파일에 대한 함수 핸들로 지정해야 합니다.

extractorFcn = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,CustomExtractor=extractorFcn)
여기서 exampleBagOfFeaturesExtractor는 다음과 같은 MATLAB 함수입니다.
function [features,featureMetrics] = exampleBagOfFeaturesExtractor(img)
...
함수는 경로 또는 현재 작업 디렉터리에 있어야 합니다.

사용자 지정 추출기 함수와 그 입력 및 출력 요구 사항에 대한 자세한 내용은 Create a Custom Feature Extractor 항목을 참조하십시오. MATLAB 명령줄에 다음 명령을 입력하여 예제 함수 파일을 열고 템플릿으로 사용할 수 있습니다.

edit('exampleBagOfFeaturesExtractor.m')

단어집 트리 속성으로, [numLevels branchingFactor] 형식의 요소를 2개 가진 벡터로 지정됩니다. numLevels는 단어집 트리의 수준 수를 지정하는 정수입니다. branchingFactor는 단어집이 트리의 연속된 수준에서 확장될 수 있는 크기를 제어하는 인자를 지정하는 정수입니다. 단어집 트리로 나타낸 시각 단어의 최대 개수는 branchingFactor^numLevels입니다. numLevels의 일반적인 값은 1에서 6 사이입니다. branchingFactor의 일반적인 값은 10에서 500 사이입니다. 경험적 분석을 통해 최적 값을 선택하십시오.

더 큰 단어집을 생성하려면 분기 생성 인자를 늘리십시오. 단어집을 늘리면 분류 및 영상 검색 정확도가 향상되지만 영상을 인코딩하는 데 소요되는 시간도 늘어납니다. 여러 수준을 갖는 단어집 트리를 사용하여 대략 10,000개 이상의 시각 단어로 구성된 단어집을 생성할 수 있습니다. 다중 수준 트리는 규모가 큰 단어집을 사용하여 영상을 인코딩하는 데 필요한 시간을 줄여 주지만 생성하는 데 시간이 오래 걸립니다. 100~1000개의 시각 단어만 포함하는 단어집에 대해서는 1개의 수준을 갖는 트리를 사용할 수 있습니다.

가장 강한 특징의 비율로, 'StrongestFeatures'와 함께 [0,1] 범위의 값이 쉼표로 구분되어 지정됩니다. 이 값은 imds 입력값의 각 레이블에서 사용할 가장 강한 특징의 비율을 나타냅니다.

화면에 진행률을 표시하며, 'Verbose'와 함께 논리값 true 또는 false가 쉼표로 구분되어 지정됩니다.

SURF 특징 추출을 위해 점 위치를 선택하기 위한 선택 방법으로, 'PointSelection'과 함께 "Grid" 또는 "Detector"가 쉼표로 구분되어 지정됩니다. 특징 추출은 두 단계로 이루어집니다. 첫 번째 단계로 사용자가 PointSelection 속성을 사용하여 점 위치를 선택하는 방법을 선택합니다(SURF "Detector" 또는 "Grid"). 그러면 두 번째 단계로 특징이 추출됩니다. 점 선택 방법으로 무엇을 선택하든 특징 추출에서는 SURF 추출기를 사용합니다.

PointSelection"Detector"로 설정하면 SURF(Speeded Up Robust Feature) 검출기를 사용하여 특징점이 선택됩니다. 그렇지 않은 경우에는 'GridStep'으로 정의된 간격을 사용하여 미리 정의된 그리드에서 점이 선택됩니다. 이 속성은 CustomExtractor 속성을 사용하여 사용자 지정 추출기를 지정하지 않은 경우에만 적용됩니다.

그리드 스텝 크기(단위: 픽셀)로, "Grid"와 함께 1×2 [x y] 벡터가 쉼표로 구분되어 지정됩니다. 이 속성은 PointSelection"Grid"로 설정하고, 한편으로 CustomExtractor 속성을 사용하여 사용자 지정 추출기를 지정하지 않은 경우에만 적용됩니다. x 방향과 y 방향의 스텝은 균일한 그리드 간격을 정의합니다. 그리드 선이 교차하는 지점은 특징 추출이 수행되는 위치를 정의합니다.

수직 방향 SURF 설명자를 추출할 패치 크기로, 'BlockWidth'와 함께 N개의 블록 너비로 구성된 1×N 벡터가 쉼표로 구분되어 지정됩니다. 이 속성은 CustomExtractor 속성을 사용하여 사용자 지정 추출기를 지정하지 않은 경우에만 적용됩니다. 벡터의 각 요소는 함수가 수직 방향 SURF 설명자를 추출할 정사각형 블록의 크기에 대응합니다. 다중 스케일 특징을 추출하려면 정사각형 크기를 여러 개 사용하십시오. 지정한 모든 정사각형은 그리드에서 각각의 추출 점에 사용됩니다. 이 속성은 PointSelection"Grid"로 설정한 경우에만 적용됩니다. 블록 너비는 특징의 스케일에 대응합니다. 최소 BlockWidth는 32픽셀입니다.

SURF 특징 벡터의 방향으로, 논리형 스칼라로 지정됩니다. 이 속성은 CustomExtractor 속성을 사용하여 사용자 지정 추출기를 지정하지 않은 경우에만 적용됩니다. SURF 특징 벡터의 방향을 추정할 필요가 없는 경우 이 속성을 true로 설정하십시오. 회전 정보를 캡처하는 데 영상 설명자가 필요한 경우에는 false로 설정하십시오.

객체 함수

encodeCreate histogram of visual word occurrences

예제

모두 축소

영상 데이터저장소를 만듭니다.

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource',...
    'foldernames');

bag-of-features를 만듭니다. 이 과정은 완료하는 데 몇 분 정도 걸릴 수 있습니다.

bag = bagOfFeatures(imds);
Creating Bag-Of-Features.
-------------------------
* Image category 1: books
* Image category 2: cups
* Selecting feature point locations using the Grid method.
* Extracting SURF features from the selected feature point locations.
** The GridStep is [8 8] and the BlockWidth is [32 64 96 128].

* Extracting features from 12 images...done. Extracted 230400 features.

* Keeping 80 percent of the strongest features from each category.

* Creating a 500 word visual vocabulary.
* Number of levels: 1
* Branching factor: 500
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 184320
* Number of clusters          : 500
* Initializing cluster centers...100.00%.
* Clustering...completed 54/100 iterations (~2.53 seconds/iteration)...converged in 54 iterations.

* Finished creating Bag-Of-Features

영상 하나에 대해 시각 단어가 나타나는 횟수를 보여주는 히스토그램을 계산합니다. 히스토그램을 특징 벡터로 저장합니다.

img = readimage(imds, 1);
featureVector = encode(bag,img);
Encoding images using Bag-Of-Features.
--------------------------------------
* Encoding an image...done.

영상 데이터저장소를 만듭니다.

setDir  = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource',...
    'foldernames');

사용자 지정 특징 추출기를 지정합니다.

extractor = @exampleBagOfFeaturesExtractor;
bag = bagOfFeatures(imds,'CustomExtractor',extractor)
Creating Bag-Of-Features.
-------------------------
* Image category 1: books
* Image category 2: cups
* Extracting features using a custom feature extraction function: exampleBagOfFeaturesExtractor.

* Extracting features from 12 images...done. Extracted 230400 features.

* Keeping 80 percent of the strongest features from each category.

* Creating a 500 word visual vocabulary.
* Number of levels: 1
* Branching factor: 500
* Number of clustering steps: 1

* [Step 1/1] Clustering vocabulary level 1.
* Number of features          : 184320
* Number of clusters          : 500
* Initializing cluster centers...100.00%.
* Clustering...completed 50/100 iterations (~3.08 seconds/iteration)...converged in 50 iterations.

* Finished creating Bag-Of-Features
bag = 
  bagOfFeatures with properties:

      CustomExtractor: @exampleBagOfFeaturesExtractor
       NumVisualWords: 500
       TreeProperties: [1 500]
    StrongestFeatures: 0.8000

참고 문헌

[1] Csurka, G., D. Christopher, F. Lixin, W. Jutta, and B. Cédric. "Visual categorization with bags of keypoints." Workshop on statistical learning in computer vision, ECCV, 2004, pp. 1-2.

[2] Nister, D., and H. Stewenius. "Scalable Recognition with a Vocabulary Tree." Proceedings of the IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2006, vol. 2, pp. 2161–2168.

확장 기능

버전 내역

R2014b에 개발됨