diff --git a/README.md b/README.md index c1103dd..afb76b1 100644 --- a/README.md +++ b/README.md @@ -23,18 +23,20 @@ __Цель данной работы__ - реализовать набор пр __Основные задачи__ - 1. Разработать программную реализацию сглаживания посредством вычисления - среднего по окрестности. Границы обработать посредством зеркального - отображения пикселей (`gfedcb|abcdefgh|gfedcba`). 1. Реализовать линейный фильтр с произвольным ядром. Граница дополнена - нулевыми значениями. + нулевыми значениями. Ведущий элемент в центре ядра. 1. Разработать реализацию медианного фильтра. При вычислении использовать - только пиксели внутри изображения. - 1. Реализовать горизонтальный фильтр Собеля. Границы обработать посредством - зеркального отображения пикселей (`gfedcb|abcdefgh|gfedcba`). + только пиксели внутри изображения. Размер ядра - нечетная величина, ведущий + элемент ядра находится в центре ядра. __Дополнительные задачи__ - + 1. Разработать программную реализацию сглаживания посредством вычисления + среднего по окрестности. Границы обработать посредством зеркального + отображения пикселей (`gfedcb|abcdefgh|gfedcba`). Угловые пиксели + отображаются зеркально вдоль главной и побочной диагоналей. + 1. Реализовать горизонтальный фильтр Собеля. Границы обработать посредством + зеркального отображения пикселей (`gfedcb|abcdefgh|gfedcba`). Угловые + пиксели отображаются зеркально вдоль главной и побочной диагоналей. 1. Расширить реализацию класса матриц следующими операциями и тестами к ним: 1. Транспонирование матрицы. 1. Умножение матриц (в виде перегрузки операции). @@ -55,17 +57,23 @@ __Дополнительные задачи__ 1. Создать рабочую ветку для размещения реализаций фильтров (раздел [Общие инструкции по работе с Git][git-intro]). 1. Создать собственного наследника `FiltersSurname` от абстрактного класса фильтров. - 1. Реализовать последовательно все чисто виртуальные методы базового класса - - методы фильтрации, перечисленные в разделе [Основные задачи][tasks]. - 1. При реализации каждого фильтра следует пересобрать проект и проверить - работоспособность тестов. Изменения необходимо постоянно фиксировать, - выкладывая в рабочую ветку на сервер (раздел - [Общие инструкции по работе с Git][git-intro]). - 1. Сделать Pull Request в upstream-репозиторий. - 1. Выбрать и решить одну из задач списка [Дополнительные задачи][tasks]. - Необходимо проконтролировать, чтобы задача не была выбрана другими - участниками школы. В противном случае, в основной репозиторий попадет - первая полностью готовая реализация. + 1. Реализовать в наследнике последовательно чисто виртуальные методы + базового класса - методы фильтрации, перечисленные в разделе + [Основные задачи][tasks] (линейный и медианный фильтры). + 1. При реализации каждого фильтра следует пересобрать проект и проверить + работоспособность тестов. + Рекомендации: + - Отключить тесты для фильтров, которые не реализованы в вашем классе + до настоящего момента (вставьте `DISABLED_` перед названием теста). + - Изменения необходимо постоянно фиксировать, выкладывая + в рабочую ветку на сервер (раздел + [Общие инструкции по работе с Git][git-intro]). + 1. Сделать Pull Request в репозиторий upstream. + 1. Выбрать и решить одну из задач списка + [Дополнительные задачи][tasks]. + Начиная с третьей задачи, необходимо проконтролировать, чтобы задача + не была выбрана другими участниками школы. В противном случае, + в основной репозиторий попадет первая полностью готовая реализация. ## Общая структура проекта @@ -471,22 +479,19 @@ __Примечание:__ генератор проекта должен сов 1. Создать собственного наследника `FiltersYourName` от абстрактного класса фильтров. 1. Создать файл `filters_YOUR_NAME.cpp` (файл с реализацией в файловой системе) для собственных реализаций фильтров. - 1. В качестве шаблона необходимо воспользоваться `filters_opencv.cpp`. - Можно скопировать класс без реализации методов из файла - `filters_opencv.cpp` в файл `filters_YOUR_NAME.cpp`, заменив - название класса `FiltersOpenCV` на `FiltersYourName` (ниже приведен + 1. Добавьте в созданный файл класс `FiltersYourName` (ниже приведен фрагмент кода). ```cpp class FiltersYourName : public Filters { - public: - virtual void boxFilter(const Matrix &src, Matrix& dst, const int kSize = 3) - { } + public: virtual void filter2d(const Matrix &src, Matrix& dst, const Matrix &kernel) { } virtual void median(const Matrix &src, Matrix &dst, const int kSize = 3) { } + virtual void boxFilter(const Matrix &src, Matrix& dst, const int kSize = 3) + { } virtual void SobelOx(const Matrix &src, Matrix &dst) { } }; @@ -504,7 +509,7 @@ __Примечание:__ генератор проекта должен сов 1. В функции `Filters* createFilters(FILTERS_IMPLEMENTATIONS impl)` (файл `filters_factory.cpp`) необходимо добавить еще одну ветку у оператора- переключателя `switch`, по которой будет проходить исполнение программы, - если создан объект класса фильтров `YOUR_NAME`. + если создается объект класса фильтров `YOUR_NAME`. 1. В файл `filters_YOUR_NAME.cpp` необходимо поместить реализацию функции создания объекта класса фильтров с вашей реализацией `Filters* createFiltersYourName()`. Указание: для примера можно @@ -513,14 +518,14 @@ __Примечание:__ генератор проекта должен сов ```cpp Filters* createFiltersYourName() { - Filters* filters = new createFiltersYourName(); + Filters* filters = new FiltersYourName(); return filters; } ``` 1. После выполнения перечисленных действий проект должен успешно компилироваться, но тесты с вашей реализацией фильтров будут падать. - 1. Реализовать последовательно все чисто виртуальные методы базового класса - + 1. Реализовать последовательно чисто виртуальные методы базового класса - методы фильтрации, перечисленные в разделе [Основные задачи][tasks]. Обратите внимание, что у каждого фильтра свой способ обработки краевых пикселей на изображении. @@ -540,9 +545,9 @@ __Примечание:__ генератор проекта должен сов работоспособность тестов на Travis-CI и позволить преподавателям сделать ревью Вашего кода. 1. Выбрать и решить одну из задач списка [Дополнительные задачи][tasks]. - Необходимо проконтролировать, чтобы задача не была выбрана другими - участниками школы. В противном случае, в основной репозиторий попадет - первая полностью готовая реализация. + Начиная с третьей задачи, необходимо проконтролировать, чтобы задача + не была выбрана другими участниками школы. В противном случае, + в основной репозиторий попадет первая полностью готовая реализация. diff --git a/samples/matrix_sample.cpp b/samples/matrix_sample.cpp index c176d27..0f5e1b8 100644 --- a/samples/matrix_sample.cpp +++ b/samples/matrix_sample.cpp @@ -1,6 +1,7 @@ #include "matrix.hpp" #include "filters.hpp" + using namespace std; int main()