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


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitry Kalinin                       2:5009/5.43    15 Aug 2001  15:48:10
 To : Alexey Kozlov
 Subject : Re: вэйвлет и косинус преобразования
 -------------------------------------------------------------------------------- 
 
 
 14 Авг 01 14:08, Alexey Kozlov -> All:
 
  AK> хайль, all!
 
  AK> подкинте сабжевые алгоритмы, желательно словами, а не в сорцах!
 
  AK> Покедова !                 14 августа 2001 года
 
 Кроме этой статьи есть пара статей html-ках, если нужну могу отправить.
 Алгоритм JPEG можно разделить на несколько этапов
 0. Подготовка
 1. ДКП (Дискретно Косинусоидальное Преобразование)
 2. Квантование
 3. Вторичное сжатие
 
 -----------------------------------------------------------------------------
 Этап 0. Подготовка
 -----------------------------------------------------------------------------
 
 Hужно преобразовать изображение в вид яркость/цветность, можно использовать
 цветовую схему YCbCr (YUV), вот формулы перевода:
 
 Y = 0.299*R + 0.578*G + 0.114*B
 Cb = 0.1678*R - 0.3313*G + 0.5*B
 Cr = 0.5*R - 0.4187*G + 0.0813*B
 
 Y нужно сохранить без изменений, его можно сжать любым алгоритмом без потери
 данных.
 Теперь я попятаюсь объяснить как сжать Cb и Cr
 -----------------------------------------------------------------------------
 Этап 1. ДКП
 -----------------------------------------------------------------------------
 
 Следует создать ДКП матрицу, используя эту формулу
 
         DCT   = 1/sqr(N), если i=0
            ij
 
         DCT   = sqr(2/N)*cos[(2j+1)*i*3.14/2N], если i > 0
            ij
 
         N = 8,  0 < i < 7 , 0 < j < 7
 
 в результате имеем:
 
       |.353553  .353553  .353553  .353553  .353553  .353553  .353553  .353553|
       |.490393  .415818  .277992  .097887 -.097106 -.277329 -.415375 -.490246|
       |.461978  .191618 -.190882 -.461673 -.462282 -.192353  .190145  .461366|
 DCT = |.414818 -.097106 -.490246 -.278653  .276667  .490710  .099448 -.414486|
       |.353694 -.353131 -.354256  .352567  .354819 -.352001 -.355378  .351435|
       |.277992 -.490246  .096324  .416700 -.414486 -.100228  .491013 -.274673|
       |.191618 -.462282  .461366 -.189409 -.193822  .463187 -.460440  .187195|
       |.097887 -.278653  .416700 -.490862  .489771 -.413593  .274008 -.092414|
 
 например, нам нужно сжать следующий фрагмент изображения:
 
       | 95  88  88  87  95  88  95  95|
       |143 144 151 151 153 170 183 181|
       |153 151 162 166 162 151 126 117|
 IMG = |143 144 133 130 143 153 159 175|
       |123 112 116 130 143 147 162 189|
       |133 151 162 166 170 188 166 128|
       |160 168 166 159 135 101  93  98|
       |154 155 153 144 126 106 118 133|
       |-33 -40 -40 -41 -33 -40 -33 -33|
       | 15  16  23  23  25  42  55  53|
       | 25  23  34  38  34  23  -2 -11|
 IMG = | 15  16   5   2  15  25  31  47|
       | -5 -16 -12   2  15  19  34  61|
       |  5  23  34  38  42  60  38   0|
       | 32  40  38  31   7 -27 -35 -30|
       | 26  27  25  16  -2 -22 -10   5|
                                                      T
 вот формула, по которой производится ДКП: RES*IMG*DCT
                                                                T
 для начала нужно посчитать промежуточную матрицу: TMP = IMG*DCT
 
       |-103   -3    1    2    4    0   -1    5|
       |  89  -40   12   -2   -7    5    1    0|
       |  57   31  -30    6    2    0    5    0|
 TMP = |  55  -28   24    1    0   -8    0    0|
       |  32  -60   18   -1   14    0   -8    1|
       |  84  -11  -37   17  -24    4    0   -4|
       |  19   81  -16  -20    8   -3    4    0|
       |  22   40   11  -22    8    0   -3    2|
 
 затем умножаем ее на ДКП матрицу: RES = TMP*DCT
 
       | 91   3  -5  -6   2   0   1|
       |-38 -57   9  17  -2   2   2|
       |-80  58   0 -18   4   3   4|
 RES = |-52 -36 -11  13  -9   3   0|
       |-86 -40  44  -7  17  -6   4|
       |-62  64 -13  -1   3  -8   0|
       |-16  14 -35  17 -11   2  -1|
       |-53  32  -9  -8  22   0   2|
 
 ______________________________________________________________________________
 Этап 2. Квантование
 ------------------------------------------------------------------------------
 
 Hа этом этапе мы посчитаем матрицу квантования, используя этот псевдо код:
 
 for(i=0;i<8;i++)
 {
    for(j=0;j<8;j++)
         Q[i][j] = 1+((1+i+j)*q);
 }
 
  где q - это коэффициент качества, от него зависит степень потери качества
  сжатого изображения
 для q = 2 имеем матрицу квантования:
 
      | 3  5  7  9 11 13 15 17|
      | 5  7  9 11 13 15 17 19|
      | 7  9 11 13 15 17 19 21|
 Q =  | 9 11 13 15 17 19 21 23|
      |11 13 15 17 19 21 23 25|
      |13 15 17 19 21 23 25 27|
      |15 17 19 21 23 25 27 29|
      |17 19 21 23 25 27 29 31|
 
 теперь нужно каждое число в матрице квантования разделить на число в
 соответствущей позиции в матрице RES, в результате получим:
      | 30   0   0   0   0   0   0   0|
      | -7   8   1   1   0   0   0   0|
      |-11   6   0   1   0   0   0   0|
 A =  | -5  -3   0   0   0   0   0   0|
      | -7  -3   2   0   0   0   0   0|
      | -4   4   0   0   0   0   0   0|
      | -1   0   1   0   0   0   0   0|
      | -3   1   0   0   0   0   0   0|
 
 как вы видите здесь имеется довольно много нулей, мы получим наиболее
 длинную последовательность нулей, если будем использовать следущий алгоритм:
 
      +----+----+----+----+----+----+----+----+
      |  1 |  2 |  6 |  7 | 15 | 16 | 28 | 29 |
      +----+----+----+----+----+----+----+----+
      |  3 |  5 |  8 | 14 | 17 | 27 | 30 | 43 |
      +----+----+----+----+----+----+----+----+
      |  4 |  9 | 13 | 18 | 26 | 31 | 42 | 44 |
      +----+----+----+----+----+----+----+----+
      | 10 | 12 | 19 | 25 | 32 | 41 | 45 | 54 |
      +----+----+----+----+----+----+----+----+
      | 11 | 20 | 24 | 33 | 40 | 46 | 53 | 55 |
      +----+----+----+----+----+----+----+----+
      | 21 | 23 | 34 | 39 | 47 | 52 | 56 | 61 |
      +----+----+----+----+----+----+----+----+
      | 22 | 35 | 38 | 48 | 51 | 57 | 60 | 62 |
      +----+----+----+----+----+----+----+----+
      | 36 | 37 | 49 | 50 | 58 | 59 | 63 | 64 |
      +----+----+----+----+----+----+----+----+
 
 итак у нас получилась последовательность:
 30 0 -7 -11 8 0 0 1 6 -5 -7 -3 0 1 0 0 0 1 0 -3 -4 -1 4 2 0 0 0 0
 0 0 0 0 0 0 0 -3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
 для большего сжатия можно перед первым этапом JPEG можно провести
 субдискретизацию, или другими словами уменьшить частоту изображения,
 идея очень проста:
 
 к примеру у нас есть следующая последовательность (Cb или Cr)
 
 11 42 200 123 56 32 125 234 12 24 34 78 145 134 245 101
 
 если будем использовать субдискретизацию 4:1:1 результирующая
 последовательность будет:
 
 11 123 125 24 145 101
 
 а если использовать 4:2:2
 
 11 234 245
 
 а для восстановления последовательности нужно интерполироать
 ------------------------------------------------------------------------------
 Этап 3. Вторичное сжатин
 ______________________________________________________________________________
  Любым доступным алгоритмом пакуются данные
 Dmitry
 ... "Ты знаешь все, что надо знать ..." (с) 1999 Ария. Искушение
 --- 0f 0f 0e 0e 0e 0e 0c 0c 0a 09 09 06 03 00 00 00 ДВБВДБДДВДДДДДБДДДДД
  * Origin: bESt reGUARdS (2:5009/5.43)
 
 

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

 Тема:    Автор:    Дата:  
 вэйвлет и косинус преобразования   Alexey Kozlov   14 Aug 2001 14:08:55 
 Re: вэйвлет и косинус преобразования   Max Vikulov   14 Aug 2001 23:21:00 
 Re: вэйвлет и косинус преобразования   Dmitry Kalinin   15 Aug 2001 15:48:10 
 вэйвлет и косинус преобразования   Andrew Aksyonoff   16 Aug 2001 17:44:05 
 вэйвлет и косинус преобразования   Alexey Kozlov   17 Aug 2001 08:22:56 
 Re: вэйвлет и косинус преобразования   Dmitry Kalinin   19 Aug 2001 09:01:04 
 вэйвлет и косинус преобразования   Andrew Aksyonoff   20 Aug 2001 06:06:33 
Архивное /ru.algorithms/27843b7a6286.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional