Опубликован: 20.08.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Новосибирский Государственный Университет
Самостоятельная работа 4:

Классификация изображений с использованием bag-of-words методов

6.4. Приложение Г. Исходный код заголовочного файла модуля, содержащего реализацию основных стадий bag-of-words подхода

#include <opencv2/features2d/features2d.hpp> 
#include <opencv2/ml/ml.hpp> 
#include <vector> 
#include <string> 
 
cv::Mat TrainVocabulary(const std::vector<std::string>& 
filesList, const std::vector<bool>& is_voc, const 
cv::Ptr<cv::FeatureDetector>& keypointsDetector, const 
cv::Ptr<cv::DescriptorExtractor>& descriptorsExtractor, int 
vocSize); 
 
cv::Mat ExtractFeaturesFromImage( 
cv::Ptr<cv::FeatureDetector> keypointsDetector, 
cv::Ptr<cv::BOWImgDescriptorExtractor> bowExtractor, const 
std::string& fileName); 
 
void ExtractTrainData(const std::vector<std::string>& 
filesList, const std::vector<bool>& isTrain, const cv::Mat& 
responses, 
  const cv::Ptr<cv::FeatureDetector>& 
keypointsDetector, const 
cv::Ptr<cv::BOWImgDescriptorExtractor>& bowExtractor, 
cv::Mat& trainData, cv::Mat& trainResponses); 
 
cv::Ptr<CvRTrees> TrainClassifier(const cv::Mat& trainData, 
const cv::Mat& trainResponses); 
int Predict(const cv::Ptr<cv::FeatureDetector> 
keypointsDetector, const 
cv::Ptr<cv::BOWImgDescriptorExtractor> bowExtractor, 
  const cv::Ptr<CvRTrees> classifier, const 
std::string& fileName); 
 
cv::Mat PredictOnTestData(const std::vector<std::string>& 
filesList, const std::vector<bool>& isTrain, 
  const cv::Ptr<cv::FeatureDetector> keypointsDetector, 
const cv::Ptr<cv::BOWImgDescriptorExtractor> bowExtractor, 
const cv::Ptr<CvRTrees> classifier); 
 
cv::Mat GetTestResponses(const cv::Mat& responses, const 
std::vector<bool>& isTrain); 
 
float CalculateMisclassificationError(cv::Mat& responses, 
cv::Mat& predictions); 
    

6.5. Приложение Д. Исходный код модуля, содержащего реализацию основных стадий bag-of-words подхода

#include "bow.h" 
#include <opencv2/highgui/highgui.hpp> 
 
using namespace cv; 
using namespace std; 
 
Mat TrainVocabulary(const vector<string>& filesList, const 
vector<bool>& is_voc, 
  const Ptr<FeatureDetector>& keypointsDetector, const 
Ptr<DescriptorExtractor>& descriptorsExtractor, int 
vocSize) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
 
} 
 
Mat ExtractFeaturesFromImage( 
    Ptr<FeatureDetector> keypointsDetector, 
    Ptr<BOWImgDescriptorExtractor> bowExtractor, 
    const string& fileName) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
 
void ExtractTrainData(const vector<string>& filesList, 
  const vector<bool>& isTrain, 
  const Mat& responses, 
  const Ptr<FeatureDetector>& keypointsDetector, 
  const Ptr<BOWImgDescriptorExtractor>& bowExtractor, 
  Mat& trainData, 
  Mat& trainResponses) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
 
Ptr<CvRTrees> TrainClassifier(const Mat& trainData, 
const Mat& trainResponses) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
 
int Predict(const Ptr<FeatureDetector> keypointsDetector, 
  const Ptr<BOWImgDescriptorExtractor> bowExtractor, 
  const Ptr<CvRTrees> classifier, 
  const string& fileName) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
 
Mat PredictOnTestData(const vector<string>& filesList, 
  const vector<bool>& isTrain, 
  const Ptr<FeatureDetector> keypointsDetector, 
  const Ptr<BOWImgDescriptorExtractor> bowExtractor, 
  const Ptr<CvRTrees> classifier) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
 
Mat GetTestResponses(const Mat& responses, 
const vector<bool>& isTrain) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
 
float CalculateMisclassificationError(Mat& responses, 
      Mat& predictions) 
{ 
  /* 
  TODO: реализовать функциональность, 
  описаннную в разделе 3.1.2 
  */ 
} 
    
Александра Максимова
Александра Максимова

При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка?
 

Алена Борисова
Алена Борисова

В лекции по обработке полутоновых изображений (http://www.intuit.ru/studies/courses/10621/1105/lecture/17979?page=2) увидела следующий фильтр:


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

В описании говорится, что он "делает изображение более чётким, потому что, как видно из конструкции фильтра, в однородных частях изображение не изменяется, а в местах изменения яркости это изменение усиливается".

Что вижу я в конструкции фильтра (скорее всего ошибочно): F(x, y) = 2 * I(x, y) - 1/9 I(x, y) = 17/9 * I(x, y), где F(x, y) - яркость отфильтрованного пикселя, а I(x, y) - яркость исходного пикселя с координатами (x, y). Что означает обычное повышение яркости изображения, при этом без учета соседних пикселей (так как их множители равны 0).

Объясните, пожалуйста, как данный фильтр может повышать четкость изображения?

Сергей Кротов
Сергей Кротов
Россия
Дмитрий Донсков
Дмитрий Донсков
Россия, Москва, Московский Авиационный Институт