Обязательная часть задания
Должна быть разработана программа, реализующая следующий функционал:
- Отражение изображения относительно горизонтальной, вертикальной и диагональных осей
- Поворот изображения по и против часовой стрелки на произвольное число градусов, кратное 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 |
Справочные материалы