Задание 1. Основы работы с изображениями

Обязательная часть задания

Должна быть разработана программа, реализующая следующий функционал:

  • Отражение изображения относительно горизонтальной, вертикальной и диагональных осей
  • Поворот изображения по и против часовой стрелки на произвольное число градусов, кратное 90
  • Извлечение фрагмента изображения
  • Автоматическое контрастирование
  • Обнаружение и коррекция чересстрочной развёртки

Обнаружение и коррекция чересстрочной развёртки

В результате неправильной сборки изображения с чересстрочной развёрткой строки с чётными и нечётными номерами могут быть переставлены, т.е. строки с номерами 2k оказываются на позициях 2k + 1, а строки с номерам 2k + 1 — на позициях 2k. Требуется обнаружить и устранить данный артефакт.

Рекомендуемый алгоритм для обнаружения чересстрочной развёртки: переставить строки, а затем из двух изображений выбрать то, у которого будет меньше суммарная вариация по вертикали.

Вариация считается следующим образом (j - номер строки):

Гарантируется, что для данной подзадачи число строк во входном изображении будет кратно двум.

Указания и пояснения

  • Пиксель с координатами (0, 0) находится в левом верхнем углу изображения, ось X направлена вправо, ось Y — вниз. Главная диагональ идёт из левого верхнего угла в правый нижний.
  • При извлечении фрагмента координаты могут выходить за границы исходного изображения и быть отрицательными. В этом случае изображение должно быть дополнено нулями.
  • Угол поворота может быть и нулевым, и отрицательным, и большим 360.
  • Автоматическое контрастирование предполагает линейное растяжение диапазона значений пикселей таким образом, чтобы самый тёмный пиксель принял значение 0, а самый светлый — 255.
  • Используйте попиксельные операции (for i, for j) вместо slicing'а и готовых функций transpose, rot90 и арифметических операций с целым массивом сразу.

Формат параметров командной строки

Программа должна поддерживать запуск из командной строки со строго определённым форматом команд:

python main.py (command) (parameters...) (input_file) (output_file)

Список команд:

mirror {h|v|d|cd}
  Отражение относительно горизонтальной оси (h), вертикальной оси (v), главной диагонали (d), побочной диагонали (cd)
extract (left_x) (top_y) (width) (height)
  Извлечение фрагмента изображения с параметрами: отступ слева (left_x, целое), отступ сверху (top_y, целое), ширина фрагмента (width, положительное), высота фрагмента (height, положительное)
rotate {cw|ccw} (angle) Поворот по (cw) или против (ccw) часовой стрелки на заданное количество градусов, например: rotate cw 90
autocontrast
  Автоматический контраст
fixinterlace
  Обнаружение и коррекция чересстрочной развёртки

Примеры изображений


Исходное изображение

Отражение относительно горизонтальной оси
mirror h ex.bmp ex_mirror_h.bmp

Отражение относительно вертикальной оси
mirror v ex.bmp ex_mirror_v.bmp

Отражение относительно главной диагонали
mirror d ex.bmp ex_mirror_d.bmp

Отражение относительно побочной диагонали
mirror cd ex.bmp ex_mirror_сd.bmp

Поворот на 90 градусов по часовой стрелке
rotate cw 90 ex.bmp ex_rotate90.bmp

Поворот на 180 градусов
rotate cw 180 ex.bmp ex_rotate180.bmp

Поворот на 90 градусов против часовой стрелки
rotate ccw 90 ex.bmp ex_rotate270.bmp

Извлечение фрагмента
extract -32 32 192 96 ex.bmp ex_fragm.bmp

Автоматический контраст
autocontrast ex.bmp ex_autocontrast.bmp

Некорректная чересстрочная развёртка

Коррекция чересстрочной развёртки
fixinterlace ex_interlace.bmp ex_result.bmp

Справочные материалы