Новосибирский Государственный Университет
Опубликован: 20.08.2013 | Доступ: свободный | Студентов: 865 / 38 | Длительность: 14:11:00
Самостоятельная работа 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).

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