Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KVA-1-05_Shepovalov_AO.doc
Скачиваний:
29
Добавлен:
02.12.2018
Размер:
952.83 Кб
Скачать

1.1Алгоритмы поворота изображения

Пусть:

O - это центр поворота,

M - некая точка исходного изображения.

Для каждой точки M нужно найти угол alpha между отрезком OM и горизонталью и длину r отрезка OM.

Рисунок 2Точка М исходного изображения

Теперь, чтобы повернуть изображение на угол beta, нужно каждой точке M присвоить цвет точки исходного изображения с координатами x,y, где

x = xo + r * cos(alpha + beta)

y = yo + r * sin(alpha + beta)

xo,yo - центр поворота, r - длина отрезка OM

Рисунок 3Образ точки M при повороте на угол beta

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

При использовании декартовой системы координат используется следующий алгоритм поворота.

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

Положительным углам при этом соответствует вращение вектора против часовой стрелки в обычной, правосторонней системе координат, и по часовой в левосторонней системе координат.

1.2 Функция ImageRotate

В КТС Mathematica для поворота изображения используется стандартная функция ImageRotate.

ImageRotate выполняет следующие действия:

  • поворачивает изображение против часовой стрелки на 90 °.

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

  • поворачивает изображение против часовой стрелки на угол, заданный в радианах.

  • возвращает изображение определенного размера.

Особенности функции ImageRotate:

  • Возможные спецификации по стороне: Сверху, снизу, слева, справа.

  • ImageRotate поворачивает изображение вокруг его центра.

  • ImageRotate вычисляет цвета пикселей нового изображения исходя из цветов соседних пикселей исходного изображения

  • ImageRotate позволяет сохранить или изменить фон поворачиваемого изображения.

  • По умолчанию ImageRotate автоматически выбирает наиболее подходящий алгоритм интерполяции. Этот алгоритм может быть также указан вручную.

У функции ImageRotate, возможные спецификации для размера включают в себя:

  • W - ширина выходного изображения

  • {W, H} - ширина и высота выходного изображения

  • Автоматический

  • Все

  • Полный - использование размеров исходного изображения

2 Реализация вычислений

2.1 Функция поворота изображения

Введём следующие обозначения переменных и параметров функции:

  • tfi - угол поворота в градусах, который запрашивается у пользователя

  • fi - пересчитанный угол поворота в радианах

  • ima[index][num] – исходное изображение

  • imagetemp – конечное изображение

  • xn, yn – координаты точек нового изображения

  • width – ширина нового изображения

  • height – высота нового изображения

  • trgb – цвет пикселя нового изображения

Рисунок 3Фрагмент кода функции поворота изображения

2.2 Использование ImageRotate

3 Результаты вычислений

3.1 Пример поворота изображения

Рассмотрим пример работы функции поворота на следующем изображении:

Рисунок 4Исходное изображение

Сначала откроем изображение, выбрав Файл->Открыть:

Рисунок 5Файл->Открыть

Укажем местоположение файла:

Рисунок 6Указание места размещения файла

Рисунок 7Общий интерфейс программы

Далее необходимо выполнить следующие команды: Действие->Поворот.

Рисунок 8 – Действие->Поворот

В появившемся диалоговом меню необходимо ввести требуемый угол поворота в градусах против часовой стрелки и нажать OK:

Рисунок 9 – Диалоговое окно, запрашивающее величину угла поворота

Программа выполнит поворот изображения и выдаст его на рабочий экран:

Рисунок 10 – Итоговое изображение

Для сохранения изображения нужно выполнить последовательность команд Файл->Сохранить или Файл->Сохранить как. В первом случае файл с исходным изображением будет обновлён новым, а во втором будет создан новый отдельный файл с заданным именем:

Рисунок 11 – Файл->Сохранить как

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]