На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Аффинное преобразование растра
    Привет!

    Имеется растровая картинка (прямоугольная) в виде массива точек {r, g, b}, имеется матрица преобразования из одной системы координат в другую {a00, a01, a10, a11} с детерминантом = 1. Необходимо исходный растр преобразовать с помощью данной матрицы преобразования. Преобразование не может быть сведено к повороту и сдвигу - оно вообще говоря может быть любым, но его матрица имеет единичный детерминант.

    Подскажите, если знаете, алгоритм, или хотя бы в какую сторону смотреть. Поисковики пока не помогли. Может для подобного преобразования растра есть какое-то название, типа, морфинг или еще какое?

    Скорость алгоритма значения не имеет, важна максимальная точность (без потери деталей и без появления артефактов).

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

    Буду благодарен любым подсказкам и намекам.

    С уважением, Иван Борунов.
      ИМХО, если
      Цитата borunov, 12.09.03, 21:36:19
      важна максимальная точность (без потери деталей и без появления артефактов).

      , то надо в исходном растре "увеличить разрешение" больше чем в max{|lambdai|} раз, где lambdai -- собственные числа матрицы. (Разбить каждый пиксель на несколько частей по горизонтали и вертикали и преобразовывать их отдельно. Потом все ети кусочки пикселей, попавшие в один пиксель результирующего изображения, усреднить...)
      Сообщение отредактировано: Visitor -
        Считаем обратную матрицу - т.е. обратное аффинное преобразование, и для каждой точки нового растра находим соответствующую ей точку исходного. Для улучшения качества (при существенном изменении размера)  можно применять интерполяцию (билинейную, квадратичную, сплайновую)- каждая составляющая цвета рассчитывается не по одной точке исходного, а по окрестности.
          Про то, что надо разбивать пиксели на субпиксели, я сообразил, но не знал, как оценить, на сколько кусочков бить каждый пиксель. Спасибо за подсказку про собственные числа матрицы - попробую.
            Если детерминант = 1, то преобразование можно представить в виде композиции перемещения и сдвига. Сдвиг вдоль горизонтальной оси делается без потери информации. Осталось качественно повернуть, что и есть самое трудное.
              Тут, видимо должно было быть "композиции сжатия/растяжения и поворота"?

              Сдвиг (+ костанта к координатам преобразуемого вектора), насколько я помню, делается с помощью увеличения размерности оператора преобразования (вводится дополнительная строка в той матрице).
                Цитата Visitor, 15.09.03, 13:06:44
                Тут, видимо должно было быть "композиции сжатия/растяжения и поворота"?

                Сдвиг (+ костанта к координатам преобразуемого вектора), насколько я помню, делается с помощью увеличения размерности оператора преобразования (вводится дополнительная строка в той матрице).

                Сдвиг - это такая деформация, описываемая матрицей
                1 k
                0 1

                Пожалуй при сдвиге будут таки артефакты.
                  Т.е., под сдвигом понимается ето: | | -> / / ?
                    Цитата Visitor, 15.09.03, 16:45:27
                    Т.е., под сдвигом понимается ето: | | -> / / ?

                    Да
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0.0874 ]   [ 15 queries used ]   [ Generated: 6.10.26, 00:32 GMT ]