Задание 1: Основы работы с изображениями
Обязательная часть задания
Должна быть разработана программа, реализующая следующий функционал:
- Отражение изображения по вертикали и по горизонтали
- Извлечение фрагмента изображения
- Поворот изображений по и против часовой стрелки на произвольное число градусов, кратное 90
- Расширение изображения с помощью дублирования пикселей, нечётного и чётного продолжения
- Свёртка с фильтром Гаусса с произвольным выбором параметра — радиуса σ
- Вычисление модуля градиента как корень из суммы квадратов свёрток с первой производной фильтра Гаусса по горизонтали и вертикали
Дополительная часть задания
Реализовать следующий функционал:
- Вычисление гистограммы
- Эквализация гистограммы
Требования
- Недопустимо использовать готовые библиотечные функции. Можно: любые векторные и матричные операции, включая вычисление свёртки. Ядро фильтра Гаусса должно быть вычислено самостоятельно.
- При выводе результата значения, выходящие за пределы диапазона [0, 255], должны быть усечены до 0 или 255. В промежуточных вычислениях данного усечения быть не должно.
- При вычислении модуля градиента должно быть произведено контрастирование — расширение диапазона с [0, gmax] до [0, 255], где gmax — максимальное значение модуля градиента среди всего изображения. При этом не должно быть потерь, связанных с округлением, на промежуточных этапах.
- При вычислении свёрток не должен меняться размер изображения. При обращении к пикселям, лежащим за пределами изображения, должно быть проведено расширение изображения.
- Результат вычисления гистограммы — текстовый файл, состоящий из 256 строк, в каждой строке — количество пикселей, имеющих интенсивность, равную номеру строки, начиная с 0.
Формат параметров командной строки
Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:
python main.py (command) (parameters...) (input_file) (output_file)
Список команд:
mirror {x|y}
| |
Отражение по горизонтали или по вертикали, в зависимости от указанного параметра |
extract (left_x) (top_y) (width) (height)
| |
Извлечение фрагмента изображения |
rotate {cw|ccw} (angle) |
|
Поворот по или против часовой стрелки на заданное количество градусов, например: rotate cw 90 |
extend {dup|even|odd} (size)
| |
Расширение изображения на size пикселей с каждой стороны с использованием дублирования пикселей, чётного и нечётного продолжения соответственно |
gauss (sigma) |
|
Фильтр Гаусса, параметр sigma — вещественный параметр фильтра |
gradient (sigma) |
|
Модуль градиента |
calc_hist |
|
Вычисление гистограммы |
eq_hist |
|
Эквализация гистограммы |
Замечания
- Для массива [3, 4, 5, 6] чётным продолжением будет являться [5, 4, 3, 4, 5, 6, 5, 4], а нечётным — [1, 2, 3, 4, 5, 6, 7, 8]
- В команде extract первыми аргументами передаются координаты левого верхнего пикселя
Примеры изображений
Исходное изображение |
Отражение по горизонтали mirror x in.bmp out.bmp |
Отражение по вертикали mirror y in.bmp out.bmp |
Извлечение фрагмента extract 5 6 143 85 in.bmp out.bmp |
Поворот rotate cw 90 in.bmp out.bmp |
Поворот rotate cw 180 in.bmp out.bmp |
Расширение (дублирование) extend dup 7 in.bmp out.bmp |
Чётное продолжение extend even 7 in.bmp out.bmp |
Нечётное продолжение extend odd 7 in.bmp out.bmp |
Фильтр Гаусса (σ = 2) gauss 2 in.bmp out.bmp |
Фильтр Гаусса (σ = 3) gauss 3 in.bmp out.bmp |
Фильтр Гаусса (σ = 5) gauss 5 in.bmp out.bmp |
Модуль градиента (σ = 3) gradient 3 in.bmp out.bmp |
Выравнивание гистограммы eq_hist in.bmp out.bmp |
|
Справочные материалы
|
|
|