Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Michael Ryazanov                     2:5030/1006.64 03 Jul 2002  17:47:00
 To : Alexander Hritonenkov
 Subject : Re: Повернуть изображение
 -------------------------------------------------------------------------------- 
 
 
  AH> Кто что посоветует для поворота изображения на произвольный угол?
  AH> Как вы сами понимаете, важны и скорость, и качество получаемой картинки.
 
    Тогда аппаратным образом. Там и билинейная фильтрация, и что угодно. :-)
 
  AH> Что может быть тут полезно?
  AH> Полярные координаты? Или лучше матрица поворота?
  AH> Hy да ладно, поворот - это еще только половина беды.
  AH> Вторая половина - использование прозрачности.
  AH> Ведь получающиеся в результате преобразования координаты будут уже не
  AH> целыми числами, значит надо как-то "размазать" точку по квадрату 2х2, в
  AH> который попадет эта точка после поворота. Или как?
 
    Всё наоборот -- надо вычислять для каждой точки результата влияющие на неё
 точки оригинала.
 
  AH> Кто что посоветует?
 
    Без сглаживания есть такой более-менее быстрый метод. Поскольку (u, v --
 координаты оригинала)
 
 u =    x cos a + y sin a
 v =  - x sin a + y cos a
 
 и x, y при сканировании увеличиваются на единицу:
 
 for (int y = y0; y < y1; ++y)
    for (int x = x0; x < x1; ++x) {
 
 то u, v будут увеличиваться на соответствующие cos a и sin a:
 
 float c = cos a,
       s = sin a;
 float u0 =   x0 * c + y0 * s,
       v0 = - x0 * s + y0 * c;
 for (int y = y_0; y < y_1; ++y) {
    float u = u0,
          v = v0;
    for (int x = x_0; x < x_1; ++x) {
       res[x][y] = orig[u][v];
       u += c;
       v -= s;
    }
    u0 += s;
    v0 += c;
 }
 
 таким образом, умножений в цикле вообще не будет.
    float там написано по смыслу, а фактически это обычно тип с фиксированной
 запятой.
    Если делать не так грубо, то вместо orig[u][v] надо писать соответствующую
 линейную комбинацию из четырёх orig[u+0,1][v+0,1] с весами, определяемыми
 дробными частями u, v.
 
                                                                       |V|uxau/\
 --- -- - ъ
  * Origin:             Ф И З Ф А К - Ч Е М П И О H !           (2:5030/1006.64)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Повеpнyть изобpажение   Alexander Hritonenkov   01 Jul 2002 19:28:10 
 Re: Повеpнyть изобpажение   Sergey Andrianov   02 Jul 2002 17:07:46 
 Re: Повернуть изображение   Michael Ryazanov   03 Jul 2002 17:47:00 
 Re: Повеpнyть изобpажение   Petr Nemtsev   04 Jul 2002 06:02:39 
 Re: Повеpнyть изобpажение   V.Scorpion   05 Jul 2002 14:59:45 
Архивное /ru.algorithms/45633d233e99.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional