Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 / Salmon_sjatie_dannyh_izobrajeniy_i_zvuka[torrents.ru]

.pdf
Скачиваний:
24
Добавлен:
05.06.2015
Размер:
7.92 Mб
Скачать

Глава 3. Сэюатие изображений

10 0 1 1 1 0 1

1 1 0 0 10 11

0 1 1 0 0 10 0

0 0 0 10 0 10

0 10 0 10 11

 

 

 

 

 

 

1 1 1 0

0 1 1 0

 

 

 

 

 

 

1 1 0 0 10 11

 

 

 

 

 

 

0 10 10 0 10

 

 

 

 

 

 

(а)

 

 

(Ь)

 

 

 

(с)

4.000

-0.133

0.637

0.272

-0.250

-0.181

-1.076

0.026

0.081

-0.178

-0.300

0.230

0.694

-0.309

0.875

-0.127

0.462

0.125

0.095

0.291

0.868

-0.070

0.021

-0.280

0.837

-0.194

0.455

0.583

0.588

-0.281

0.448

0.383

-0.500 -0.635 -0.749

-0.346

0.750

0.557

-0.502

-0.540

-0.167

О -0.366

0.146

0.393

0.448

0.577

-0.268

-0.191

0.648

-0.729

-0.008

-1.171

0.306

1.155

-0.744

0.122

-0.200

0.038

-0.118

0.138

-1.154

0.134

0.148

 

 

 

 

(d)

 

 

 

D C T M a t r i x = T a b l e [ I f [ k = = 0 , S q r t [ l / 8 ] , S q r t [ l / 4 ] C o s [ P i ( 2 j + l ) k / 1 6 ] ] ,

{ к , 0 , 7 } , { j , 0 , 7 } ]

//N;

 

 

 

 

 

 

DCTTensor=Array[Outer[Times,

DCTMatrix[[#1]],DCTMatrix[[#2]]]&, { 8 , 8 } ] ;

i m g = { { l , 0 , 0 , 1 , 1 , 1 , 0 , 1 } , { 1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 } ,

 

 

 

{0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 } , { 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 } ,

{0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 } , { 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 } ,

{1 , 1 , 0 , 0 , 1 , 0 , 1 , 1 } , { 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 } } ; Showlmage[Reverse[img]]

dctcoeff=Array[(Plus ®® Flatten[DCTTensor[[#1,#2]] img])&,{8,8}]; dctcoeff=SetAccuracy[dctcoeff,4]; dctcoeff=Chop[dctcoeff, . 001]; MatrixFormCdctcoeff]

Showlmage[Reverse[dctcoeff]]

Ри с . 3.29. Пример двумерного DCT (Matematica).

Сжатие любого изображения с помощью DCT можно теперь сде­ лать следующим образом.

1. Разделить его на к блоков пикселов размера пхп (обычно 8 x 8 ) .

2.Применить DCT к каждому блоку Б^, то есть, представить каждый блок в виде линейной комбинации 64 базисных блоков рис. 3.26. Ре­ зультатом станут блоки (мы будем их называть векторами) VF^*) из

64весов го*, где j = 0 , 1 , . . . , 63.

3.Все к векторов W^'^^ = 1,2, ...,А;) разделить на 64 вектора

коэффициентов к компонентами {wf\wf\...,wf^). Вектор первых компонентов С^^^ состоит из к коэффициентов DC.

4. Сделать квантование каждого вектора коэффициентов С^^^ неза-

3.5. Преобразование изобраэюений

висимо от других. Полученный квантованный вектор Q^-^^ записать (после дополнительной компрессии по методу RLE, Хаффмана или иного метода) в сжатый файл.

0 10 10 10 1

0 10 10 10 1

0 10 10

10 1

0 10 10

10 1

0 10 10

10 1

0 10 10

10 1

0 10 10

10 1

0 10 10

10 1

(а)

 

4,000 -0.721

0 -0.850 0 -1.273 0 -3.625

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

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

0

0

 

 

 

(d)

 

 

 

 

DCTMatrix=Table[If[k==0,Sqrt[l/8],Sqrt[l/4]Cos[Pi(2j+l)k/16]],

{к,0,7}, {j,0,7}]

//N;

 

 

 

 

 

 

DCTTensor=Array[Outer[Times,

DCTMatrix[[#1]],DCTMatrix[[#2]]]&,

{8,8}]; img={{0,l,0,l,0,l,0,l},{0,l,0,l,0,l,0,l},

{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,0,1},

{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,0,1}};

Showlmage[Reverse[img]]

dctcoeff=Array[(Plus m Flatten[DCTTensor[[#l,#2]] img])&,{8,8}] ; dctcoeff=SetAccuracy[dctcoeff,4];

dctcoeff=Chop[dctcoeff,.001] ; MatrixForm[dctcoeff] Showlmage[Reverse[dctcoeff]]

Рис. 3.30. Пример двумерного DCT (Matematica).

Декодер читает 64 квантованных вектора коэффициентов Q^^\ использует их для построения к весовых векторов VF^*^ и применя­ ет IDCT к каждому весовому вектору для (приближенной) рекон­ струкции 64 пикселов блока В^. Отметим, что метод JPEG работает несколько иначе.

Глава 3. Сжатие изображений

3.5.4' Пример

Этот пример демонстрирует разницу в производительности мето­ да DCT при сжатии непрерывно тонового изображения и дискрет­ но-тонового изображения. Мы исходим из сильно коррелированного образца, приведенного в табл. 3.31. Это будет идеализированная мо­ дель непрерывно тонового изображения, поскольку соседние пиксе­ лы отличаются на постоянную величину. Все 64 коэффициента DCT приведены в табл. 3.32. Видно, что имеется всего несколько доми­ нирующих коэффициентов. В табл. 3.33 дан результат некоторого грубого квантования нашего образца. В этой таблице имеется все­ го четыре ненулевых коэффициента. Результат применения ГОСТ к этим коэффициентам представлен в табл. 3.34. Очевидно, что эти четыре коэффициента позволяют восстановить образец с высокой степенью точности.

В табл. 3.35-3.38 повторен тот же процесс применительно к Y-образ- ному блоку данных, типичному для дискретно-тонового изображе­ ния. При этом использовалось достаточно легкое квантование (табл. 3.37). Оно состояло в округлении коэффициентов до ближай­ шего целого числа. Видно, что результат реконструкции этого обра­ за (табл. 3.38) не столь хорош, как в предыдуп];ем случае. Величины, которые были равны 10 стали лежать в интервале от 8.96 до 10.11, а те, что были нулями выросли до 0.86.

3.5.5. Дискретное синус-преобразование

Читатель в этом месте может задать логичный вопрос: «Почему ко­ синус, а не синус?» Можно ли аналогичным образом использовать функцию синус для построения дискретного синус-преобразования? Существует DST (descrete sine transform) или нет? В этом коротком параграфе мы обсудим отличия синуса от косинуса, которые при­ водят к весьма неэффективному синус-преобразованию.

Функция /(ж), удовлетворяющая условию f{—x) = —/(а;), назы­ вается нечетной. Аналогично, если f{—x) = f{x), то f{x) называется четной. Для любой нечетной функции /(0) = /(—0) = —/(0), поэто­ му /(0) должно равняться 0. Большинство функций не являются ни четными, ни нечетными. Но основные тригонометрические функ­ ции sin(x) и cos (ж) являются, соответственно, четной и нечетной. Из рис.3.39 видно, что эти функции различаются лишь по своей фа­ зе (то есть, косинус получается из синуса сдвигом на 7г/2), однако, этой разности достаточно для смены их четности. Когда (нечет­ ная) функция синус сдвигается, она становится (четной) функцией косинус, которая имеет ту же форму.

 

 

 

 

 

 

3.5.

Преобразование изобралсений

163^

00

10

20

30

30

20

10

00

 

10

20

30

40

40

30

20

10

 

20

30

40

50

50

40

30

20

 

30

40

50

60

60

50

40

30

 

30

40

50

60

60

50

40

30

 

20

30

40

50

50

40

30

20

 

10

20

30

40

40

30

12

10

 

00

10

20

30

30

20

10

00

 

Табл. 3.31. Образец с высокой корреляцией.

239

1.19

-89.76

-0.28

1.00

-1.39 -5.03 -0.79

1.18

-1.39

 

0.64

0.32

-1.18

1.63

-1.54

0.92

-89.76

0.64

-0.29

-0.15

0.54

-0.75

0.71

-0.43

-0.28

0.32

-0.15

-0.08

0.28

-0.38

0.36

-0.22

1.00

-1.18

 

0.54

0.28

-1.00

1.39

-1.31

0.79

-1.39

1.63

-0.75

-0.38

1.39

-1.92

1.81

-1.09

-5.03

-1.54

 

0.71

0.36

-1.31

1.81

 

-1.71

1.03

-0.79

0.92

-0.43

-0.22

0.79

-1.09

1.03

-0.62

 

Табл. 3.32. DCT коэффициенты образца.

 

 

 

239

1

-90

0

0

0

0

 

0

 

 

 

 

0

0

0

0

0

0

0

 

0

 

 

 

 

-90

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

0

0

0

 

0

 

 

 

 

0

0

0

0

0

0

0

 

0

 

 

 

 

0

0

0

0

0

0

0

0

 

 

Табл 3.33: Грубое квантование с 4 ненулевыми коэффициентами.

0.65 9.23 21.36 29.91 29.84 21.17 8.94 0.30

9.2617.85 29.97 38.52 38.45 29.78 17.55 8.91

21.44 30.02 42.15 50.70 50.63 41.95 29.73 21.09

30.05 38.63 50.76 59.31 59.24 50.56 38.34 29.70

30.05 38.63 50.76 59.31 59.24 50.56 38.34 29.70

21.44 30.02 42.15 50.70 50.63 41.95 29.73 21.09

9.2617.85 29.97 38.52 38.45 29.78 17.55 8.91

0.659.23 21.36 29.91 29.84 21.17 8.94 0.30

Табл. 3.34. Результат IDTC.

Глава

3.

Сэюатие

изображений

 

00

10

00

00

00

00

00

10

00

00

10

00

00

00

10

00

00

00

00

10

00

10

00

00

00

00

00

00

10

00

00

00

00

00

00

00

10

00

00

00

00

00

00

00

10

00

00

00

00

00

00

00

10

00

00

00

00

00

00

00

10

00

00

00

Табл. 3.35. Y-образный блок.

13.75

-3.11

-8.17

2.46

3.75

-6.86

-3.38

6.59

4.19

-0.29

6.86

-6.85

-7.13

4.48

1.69

-7.28

1.63

0.19

6.40

-4.81

-2.99

-1.11

-0.88

-0.94

-0.61

0.54

5.12

-2.31

1.30

-6.04

-2.78

3.05

-1.25

0.52

2.99

-0.20

3.75

-7.39

-2.59

1.16

-0.41

0.18

0.65

1.03

3.87

-5.19

-0.71

-4.76

0.68

-0.15

-0.88

1.28

2.59

-1.92

1.10

-9.05

0.83

-0.21

-0.99

0.82

1.13

-0.08

1.31

-7.21

Табл. 3.36. DCT коэффициенты блока.

13.75

-3 -8

2

3 -6 -3

6

4 -0 6 -6

-7 4 1 -7

1 0

6

-4 -2

-1

-0

-0

-0 0 5 -2

1 -6

-2

3

-1

0 2 -0

3

-7 -2

1

-0 0

0

1 3

-5

-0

-4

0

-0

-0

1 2

-1

1 -9

0

-0

-0

0

1 -0

1 -7

Табл. 3.37. Слабое квантование округлением до ближайшего целого.

-0.13

8.96

0.55

-0.27

0.27

0.86

0.15

9.22

0.32

0.22

9.10

0.40

0.84

-0.11

9.36

-0.14

0.00

0.62

-0.20

9.71

-1.30

8.57

0.28

-0.33

-0.58

0.44

0.78

0.71

10.11

1.14

0.44

-0.49

-0.39

0.67

0.07

0.38

8.82

0.09

0.28

0.41

0.34

0.11

0.26

0.18

8.93

0.41

0.47

0.37

0.09

-0.32

0.78

-0.20

9.78

0.05

-0.09

0.49

0.16

-0.83

0.09

0.12

9.15

-0.11

-0.08

0.01

Табл. 3.38. Результат IDTC. Плохое качество.

Для того, чтобы понять разницу между

D C T и DST, рассмо­

т р и м одномерный случай. Одномерное D C T ,

(см. уравнение (3.7)),

3.5. Преобразование изобраэюений

использует функцию cos {{2t + 1)/7г/1б) при / = 0 , 1 , . . . , 7. Для пер­ вого значения, равного / = О, эта функция равна cos(O) = 1. Этот член очень важен; он производит коэффициент DC, который соот­ ветствует среднему значению восьми преобразуемым величинам. По аналогии, DST основано на функции sin ((2t + 1)/7г/16) которая рав­ на sin(O) = О при / == О, то есть, этот член не вносит никакого вклада в преобразование, то есть DST не имеет коэффициент DC.

 

Sin

у

 

Cosin

 

 

\

 

 

 

 

 

 

 

/

\

 

-27Г

\ - ^ \

0

\ 7Г\

/ 2^/

 

/

/

 

 

- 1 Рис. 3.39. Функции синус (нечетная) и косинус (четная).

DCT коэффициенты

Рис. 3.40. DCT и DST данных из восьми тождественных значений.

Ущербность DST можно обнаружить, рассмотрев преобразова­ ние исходного образца из 8 одинаковых величин. Такие величины, безусловно, прекрасно коррелированы. Их графиком служит гори­ зонтальная прямая. Применяя DCT, получаем один ненулевой DC, равный исходной величине. Преобразование ГОСТ также прекрас­ но восстановит данные (с незначительной потерей, обусловленной ограниченной точностью машинных вычислений). Если теперь при­ менить DST к тем же данным, то в результате получится 7 не­ нулевых коэффициентов АС, сумма которых равна волнообразной функции, проходящей через все восемь исходных точек, но при этом осциллирует в промежутках между ними. Это поведение проиллю-

Глава 3. Сжатие изобраэюений

стрировано на рис. 3.40. Оно имеет три неприятных свойства. (1) Энергия исходных данных нигде не концентрируется. (2) Семь ко­ эффициентов не являются декоррелированными (поскольку исход­ ные данные полностью коррелированы). (3) Квантование семи коэф­ фициентов может сильно уменьшить качество реконструированных данных после применения обратного DST.

N=8;

m=[l:N]'*ones(l,N); n=m';

X можно также использовать cos вместо sin y.A=sqrt(2/N)*cos(pi*(2*(n-l)+l).*(m-l)/(2*N)); A=sqrt(2/N)*sin(pi*(2*(n-1)+1) .*(in-l)/(2*N)) ; A(l,:)=sqrt(l/N);

C=A';

for row=l:N for col=l:N

B=C ( : , row) *C (: , col) . ' ; У.тензорное произведение subplot(N,N,(row-l)*N+col)

imagesс(B) drawnow

end end

Рис . 3.41. 64 базисных изображения двумерного DST.

3.5. Преобразование изображ,епий

Пример: Применим DST к последовательности из восьми оди­ наковых величин, равных 100. Получим последовательность коэф­ фициентов (0,256.3,0,90,0,60.1,0,51). С помощью этих коэффици­ ентов обратное преобразование IDST может восстановить исходные данные, но видно, что коэффициенты АС ведут себя иначе, чем при использования DCT. Они не становятся все меньше, и среди них нет серий из одних нулей. Применяя DST к восьми высоко корре­ лированным величинам (11,22,33,44,55,66,77,88), получаем более плохое множество коэффициентов

0,126.9, -57.5,44.5, -31.1,29.8, -23.8,25.2.

Здесь совсем нет концентрации энергии.

Все эти аргументы и примеры вместе с тем фактом (обсужда­ емым в [Ahmed et al.]) 74]), что DCT производит высоко декоррелированные коэффициенты, неоспоримо свидетельствуют в пользу метода DCT, для использования в алгоритмах сжатия данных.

На рис. 3.41 показаны 64 базисных изображения DST при п = 8 и программа Matlab, порождающая их. (Ср. рис. 3.26.)

3.5.6. Преобразование Уолта-Adaj^apa

Выше уже упоминалось (см. стр.149), что это преобразование мало эффективно для сжатия данных. Но оно очень быстро, так как его можно вычислять, применяя только сложение, вычитание и, иногда, сдвиг вправо (что эквивалентно делению на 2 двоичного представ­ ления величин).

Для заданного блока N х N пикселов Рху (здесь N должно быть степенью двойки, N = 2^), его двумерное прямое и обратное пре­ образования Уолша-Адамара (они обозначаются WHT и IWHT, со­ ответственно) определяются с помощью следующих уравнений:

N-1N-1

Н{щ '^^)

=

Х^

5 1

^^2/^(^' У^ '^''") ="

 

 

х=0 у=0

 

 

 

1

N-IN-1

 

 

 

V ^

V ^ \ , , _,^E[bi{^i{u)+bi{y)pi{v)]

 

 

 

x=0 y=0

 

 

N-lN-l

 

^^y

=

^

 

^

^(^' '^M^^ y^ '^^ '^) =

 

 

u=0

v=0

 

 

 

 

N-1

N-l

x=0 y=0

168 Глава 3. Cotcamue изобраэтений

где Н{и, v) - это результат преобразования (то есть, коэффициен­ ты WHT), величина bi{u) равна биту г в двоичном представлении целого числа и^ а, pi{u) определяется с помощью bj{u) из следующих рекуррентных соотношений:

Ро{и) = bn-i{u),

Pl{u)

=

bn-l{u)

+

bn-2{u),

(3.13)

P2(u)

=

bn-2{u)

+

Ьп-з{и),

Pn-i{u) = bi{u) +bo{u).

ins

I M MM МПИЕГИТ!

Рис. 3.42. Упорядоченные ядра WHT при N = 4.

(Напомним, что п определяется из соотношения N = 2"). Рас­ смотрим, например, и = 6 = 1102Нулевой, первый и второй би­

ты равны

соответственно, О, 1, 1, поэтому

6о(б) = 0,6i(6) = 1

и 62(6) =

1. Величины g{x^y^u^v)

и h{x,y,u,v)

называются ядра­

ми (или базисными изобраоюенилми)

WHT. Их матрицы совпадают.

Элементами матриц служат числа +1 и —1, которые умножаются

3,5. Преобразование изобраэюений

на 1/N. В результате, преобразование WHT состоит из умножения пикселов на +1 или —1, сложения и деления суммы на N. Но посколь­ ку iV = 2^, деление можно делать, сдвигая разряды чисел вправо на п позиций.

М=3;

N=2'^M;

 

Н=[1

1;

1 - l ] / s q r t

(2) ;

 

 

for

m=l:(M-l)

У, рекурсия

 

 

 

 

Н=[Н

Н; Н

- H ] / s q r t ( 2 ) ;

 

 

 

 

end;

А=Н';

 

 

 

 

 

 

 

 

 

map=[l

5 7

3

4

8

6

2 ] ; 7. 1:N

 

 

 

 

for

n=l:N,

B ( : , n ) = A ( : , m a p ( n ) ) ;

end; A=B;

 

s c = l / (max (abs (A ( : ) ) ) . "2) ; 7,

скалярный

множитель

for

row=l:N

 

 

 

 

 

 

 

 

 

for

col=l:N

 

 

 

 

 

 

 

 

BI=A (: ,row) *A (: , col) . ' ;

7. тензорное

произведение

 

subplot(N,N,(row-l)*N+col)

 

 

 

 

oe=round(BI*sc) ; */, получаются значения - 1 , +1

 

imagesc(oe),

colormap([l

1

1; .5

.5

. 5 ; 0 0 0])

 

drawnow

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

end

 

 

 

 

 

 

 

 

 

 

 

Р и с . 3 . 43 . Базисные изображения 8 x 8 для W H T и программа Matlab.

Соседние файлы в папке 1