Shaos wrote:А теперь порешаем интересный вопрос - если мы вводим произвольный размер картинок, то надо быть готовым к тому, что наши квадратики будут обрезаться где не попадя - а именно справа или снизу (т.к. слева и сверху они очевидно будут выровнены по левому и верхнему краям) и надо понять что делать с закрытыми краями, чтобы сжатие занимало как можно меньше места. Очевидные варианты, который приходят в голову:
0. закрашиваем край чёрным
1. закрашиваем край белым
2. копируем туда копию того что остаётся видимым
3. копируем туда зеркальную копию того что остаётся видимым
Соответственно вот такие спектры Уолша у нас получаются для вышеописанных вариантов - для обрезания справа:
И для обрезания снизу:
А теперь выясним, какие из этих вариантов лучше всего сжимаются в WHI, если выбирать 6-битное квантование и разные варианты обхода (в названиях файлов они отражаются так - диагональный без дополнительного суффикса, горизонтальный - дополнительный суффикс H, вертикальный - дополнительный суффикс V):
Code: Select all
-rw-r--r-- 1 shaos shaos 1018 Nov 11 22:28 HALF2VV.WHI
-rw-r--r-- 1 shaos shaos 1030 Nov 11 22:30 HALF3VV.WHI
-rw-r--r-- 1 shaos shaos 1064 Nov 11 22:27 HALF2HH.WHI
-rw-r--r-- 1 shaos shaos 1076 Nov 11 22:29 HALF3HH.WHI
-rw-r--r-- 1 shaos shaos 1249 Nov 11 22:28 HALF2VH.WHI
-rw-r--r-- 1 shaos shaos 1271 Nov 11 22:28 HALF2V.WHI
-rw-r--r-- 1 shaos shaos 1297 Nov 11 22:25 HALF1VH.WHI
-rw-r--r-- 1 shaos shaos 1298 Nov 11 23:09 HALF0VH.WHI
-rw-r--r-- 1 shaos shaos 1299 Nov 11 22:27 HALF2HV.WHI
-rw-r--r-- 1 shaos shaos 1324 Nov 11 22:26 HALF2H.WHI
-rw-r--r-- 1 shaos shaos 1367 Nov 11 23:08 HALF0HV.WHI
-rw-r--r-- 1 shaos shaos 1371 Nov 11 22:24 HALF1HV.WHI
-rw-r--r-- 1 shaos shaos 1380 Nov 11 22:30 HALF3VH.WHI
-rw-r--r-- 1 shaos shaos 1410 Nov 11 22:30 HALF3V.WHI
-rw-r--r-- 1 shaos shaos 1424 Nov 11 22:29 HALF3HV.WHI
-rw-r--r-- 1 shaos shaos 1451 Nov 11 22:29 HALF3H.WHI
-rw-r--r-- 1 shaos shaos 1544 Nov 11 22:25 HALF1VV.WHI
-rw-r--r-- 1 shaos shaos 1545 Nov 11 23:09 HALF0VV.WHI
-rw-r--r-- 1 shaos shaos 1547 Nov 11 22:24 HALF1V.WHI
-rw-r--r-- 1 shaos shaos 1548 Nov 11 23:09 HALF0V.WHI
-rw-r--r-- 1 shaos shaos 1589 Nov 11 22:23 HALF1H.WHI
-rw-r--r-- 1 shaos shaos 1589 Nov 11 23:07 HALF0H.WHI
-rw-r--r-- 1 shaos shaos 1592 Nov 11 22:23 HALF1HH.WHI
-rw-r--r-- 1 shaos shaos 1592 Nov 11 23:08 HALF0HH.WHI
-rw-r--r-- 1 shaos shaos 1791 Nov 11 12:32 ELAINE62.WHI <<< целая картинка сжатая методом "Huffman only"
-rw-r--r-- 1 shaos shaos 1827 Nov 11 12:32 ELAINE6H.WHI <<< целая картинка сжатая "Huffman after RLE" с горизонтальным обходом
-rw-r--r-- 1 shaos shaos 1827 Nov 11 12:32 ELAINE6V.WHI <<< целая картинка сжатая "Huffman after RLE" с вертикальным обходом
-rw-r--r-- 1 shaos shaos 1828 Nov 11 22:15 ELAINE6.WHI <<< целая картинка сжатая "Huffman after RLE" с диагональным обходом
-rw-r--r-- 1 shaos shaos 2966 Nov 11 12:32 ELAINE61.WHI <<< целая картинка сжатая "RLE only"
-rw-r--r-- 1 shaos shaos 3093 Nov 11 12:32 ELAINE60.WHI <<< целая картинка сжатая "Raw data"
-rw-r--r-- 1 shaos shaos 3076 Oct 29 00:34 ELAINE.BWS <<< целая картинка - оригинал
Как можно видеть краевая картинка справа (вертикальный отрез) лучше сжимается, если в скрытой части сидит копия видимой части и обход идёт вертикально (HALF2VV.WHI), и краевая картинка снизу (горизонтальный отрез) лучше сжимается, если в скрытой части сидит копия видимой части, но обход идёт уже горизонтально (HALF2HH.WHI). Зеркальные варианты отстают только на 12 байтов (HALF3VV.WHI и HALF3HH.WHI), а варианты с чёрными или белыми половинами судя по всему сжимаются плохо (причём когда обход идёт "перпендикулярно" отрезу, то сжатие несколько лучше).
А теперь всё тоже самое с адаптивным алгоритмом при Q=90
Оригинал:
Code: Select all
Q=90 COMPRESS\elaine90.WHI
$09BIT.WHI S=255 B=9 Q=90 (90) K=1.189 Kmax=1.189 (9) HUF (10) Diag (01)
$08BIT.WHI S=127 B=8 Q=90 (90) K=1.195 Kmax=1.195 (8) HUF (10) Diag (01)
$07BIT.WHI S=63 B=7 Q=90 (90) K=1.199 Kmax=1.199 (7) HUF (10) Diag (01) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=1.190 Kmax=1.199 (7) HUF (10) B.Shells (0001)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=1.199 (5.005 bpp) HUF (10) Diag (01)
Для ВЕРТИКАЛЬНЫХ половинок хуже всего сжимается картинка с чёрной половиной:
Code: Select all
Q=90 COMPRESS\half0v.WHI
$12BIT.WHI S=2047 B=12 Q=90 (90) K=1.402 Kmax=1.402 (12) HUF (10) B.Shells (0001)
$11BIT.WHI S=1023 B=11 Q=90 (90) K=1.524 Kmax=1.524 (11) RLE+HUF (11) Horz (10)
$10BIT.WHI S=511 B=10 Q=90 (90) K=1.532 Kmax=1.532 (10) RLE+HUF (11) Horz (10)
$09BIT.WHI S=255 B=9 Q=90 (90) K=1.539 Kmax=1.539 (9) RLE+HUF (11) Horz (10)
$08BIT.WHI S=127 B=8 Q=90 (90) K=1.547 Kmax=1.547 (8) RLE+HUF (11) Horz (10)
$07BIT.WHI S=63 B=7 Q=90 (90) K=1.547 Kmax=1.547 (7) RLE+HUF (11) Horz (10) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=1.538 Kmax=1.547 (7) RLE+HUF (11) Horz (10)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=1.547 (3.878 bpp) RLE+HUF (11) Horz (10)
Далее картинка с белой половинкой:
Code: Select all
Q=90 COMPRESS\half1v.WHI
$11BIT.WHI S=1023 B=11 Q=90 (90) K=1.527 Kmax=1.527 (11) RLE+HUF (11) Horz (10)
$10BIT.WHI S=511 B=10 Q=90 (90) K=1.532 Kmax=1.532 (10) RLE+HUF (11) Horz (10)
$09BIT.WHI S=255 B=9 Q=90 (90) K=1.540 Kmax=1.540 (9) RLE+HUF (11) Horz (10)
$08BIT.WHI S=127 B=8 Q=90 (90) K=1.547 Kmax=1.547 (8) RLE+HUF (11) Horz (10)
$07BIT.WHI S=63 B=7 Q=90 (90) K=1.549 Kmax=1.549 (7) RLE+HUF (11) Horz (10) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=1.541 Kmax=1.549 (7) RLE+HUF (11) Horz (10)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=1.549 (3.874 bpp) RLE+HUF (11) Horz (10)
И далее картинка с серой половинкой (чисто на пробу):
Code: Select all
Q=90 COMPRESS\half-v.WHI
$09BIT.WHI S=255 B=9 Q=90 (90) K=1.542 Kmax=1.542 (9) RLE+HUF (11) Horz (10)
$08BIT.WHI S=127 B=8 Q=90 (90) K=1.547 Kmax=1.547 (8) RLE+HUF (11) Horz (10)
$07BIT.WHI S=63 B=7 Q=90 (90) K=1.550 Kmax=1.550 (7) RLE+HUF (11) Horz (10) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=1.547 Kmax=1.550 (7) RLE+HUF (11) Horz (10)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=1.550 (3.870 bpp) RLE+HUF (11) Horz (10)
walshexp_126.png
Далее картинка с зеркальной половинкой:
Code: Select all
Q=90 COMPRESS\half3v.WHI
$09BIT.WHI S=255 B=9 Q=90 (90) K=2.073 Kmax=2.073 (9) RLE+HUF (11) Vert (11)
$08BIT.WHI S=127 B=8 Q=90 (90) K=2.093 Kmax=2.093 (8) RLE+HUF (11) Vert (11)
$07BIT.WHI S=63 B=7 Q=90 (90) K=2.110 Kmax=2.110 (7) RLE+HUF (11) Vert (11) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=2.062 Kmax=2.110 (7) RLE+HUF (11) Vert (11)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=2.110 (2.844 bpp) RLE+HUF (11) Vert (11)
И самое лучшее сжатие показывает картинка с двумя одинаковыми половинками:
Code: Select all
Q=90 COMPRESS\half2v.WHI
$09BIT.WHI S=255 B=9 Q=90 (90) K=2.091 Kmax=2.091 (9) RLE+HUF (11) Vert (11)
$08BIT.WHI S=127 B=8 Q=90 (90) K=2.111 Kmax=2.111 (8) RLE+HUF (11) Vert (11) <<<
$07BIT.WHI S=63 B=7 Q=90 (90) K=2.110 Kmax=2.111 (8) RLE+HUF (11) Vert (11)
$06BIT.WHI S=31 B=6 Q=90 (90) K=2.078 Kmax=2.111 (8) RLE+HUF (11) Vert (11)
Chosen $08BIT.WHI for Q=90 S=127 B=8 K=2.111 (2.842 bpp) RLE+HUF (11) Vert (11)
Для ГОРИЗОНТАЛЬНЫХ половинок хуже всего сжимается картинка с белой половиной:
Code: Select all
Q=90 COMPRESS\half1h.WHI
$11BIT.WHI S=1023 B=11 Q=90 (90) K=1.480 Kmax=1.480 (11) RLE+HUF (11) Vert (11)
$10BIT.WHI S=511 B=10 Q=90 (90) K=1.487 Kmax=1.487 (10) RLE+HUF (11) Vert (11)
$09BIT.WHI S=255 B=9 Q=90 (90) K=1.495 Kmax=1.495 (9) RLE+HUF (11) Vert (11)
$08BIT.WHI S=127 B=8 Q=90 (90) K=1.500 Kmax=1.500 (8) RLE+HUF (11) Vert (11)
$07BIT.WHI S=63 B=7 Q=90 (90) K=1.505 Kmax=1.505 (7) RLE+HUF (11) Vert (11) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=1.488 Kmax=1.505 (7) RLE+HUF (11) Vert (11)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=1.505 (3.987 bpp) RLE+HUF (11) Vert (11)
Далее идёт чёрная половина:
Code: Select all
Q=90 COMPRESS\half0h.WHI
$12BIT.WHI S=2047 B=12 Q=90 (90) K=1.378 Kmax=1.378 (12) HUF (10) Vert (11)
$11BIT.WHI S=1023 B=11 Q=90 (90) K=1.485 Kmax=1.485 (11) RLE+HUF (11) Vert (11)
$10BIT.WHI S=511 B=10 Q=90 (90) K=1.493 Kmax=1.493 (10) RLE+HUF (11) Vert (11)
$09BIT.WHI S=255 B=9 Q=90 (90) K=1.500 Kmax=1.500 (9) RLE+HUF (11) Vert (11)
$08BIT.WHI S=127 B=8 Q=90 (90) K=1.506 Kmax=1.506 (8) RLE+HUF (11) Vert (11)
$07BIT.WHI S=63 B=7 Q=90 (90) K=1.510 Kmax=1.510 (7) RLE+HUF (11) Vert (11) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=1.490 Kmax=1.510 (7) RLE+HUF (11) Vert (11)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=1.510 (3.973 bpp) RLE+HUF (11) Vert (11)
Потом зеркальная:
Code: Select all
Q=90 COMPRESS\half3h.WHI
$10BIT.WHI S=511 B=10 Q=90 (90) K=2.024 Kmax=2.024 (10) RLE+HUF (11) Horz (10)
$09BIT.WHI S=255 B=9 Q=90 (90) K=2.045 Kmax=2.045 (9) RLE+HUF (11) Horz (10)
$08BIT.WHI S=127 B=8 Q=90 (90) K=2.064 Kmax=2.064 (8) RLE+HUF (11) Horz (10)
$07BIT.WHI S=63 B=7 Q=90 (90) K=2.080 Kmax=2.080 (7) RLE+HUF (11) Horz (10) <<<
$06BIT.WHI S=31 B=6 Q=90 (90) K=2.024 Kmax=2.080 (7) RLE+HUF (11) Horz (10)
Chosen $07BIT.WHI for Q=90 S=63 B=7 K=2.080 (2.885 bpp) RLE+HUF (11) Horz (10)
И самая сжимаемая картинка с двумя одинаковыми половинками (как и в предыдущем случае):
Code: Select all
Q=90 COMPRESS\half2h.WHI
$10BIT.WHI S=511 B=10 Q=90 (90) K=2.041 Kmax=2.041 (10) RLE+HUF (11) Horz (10)
$09BIT.WHI S=255 B=9 Q=90 (90) K=2.062 Kmax=2.062 (9) RLE+HUF (11) Horz (10)
$08BIT.WHI S=127 B=8 Q=90 (90) K=2.083 Kmax=2.083 (8) RLE+HUF (11) Horz (10) <<<
$07BIT.WHI S=63 B=7 Q=90 (90) K=2.080 Kmax=2.083 (8) RLE+HUF (11) Horz (10)
$06BIT.WHI S=31 B=6 Q=90 (90) K=2.038 Kmax=2.083 (8) RLE+HUF (11) Horz (10)
Chosen $08BIT.WHI for Q=90 S=127 B=8 K=2.083 (2.881 bpp) RLE+HUF (11) Horz (10)
Как можно видеть и для вертикальных, и для горизонтальных половинок лучше всего сжимается вариант, когда обе половинки повторяют друг-друга (как я и писал ранее). Для угловой картинки, когда остаётся только левая-верхняя часть очевидно надо скопировать этот квадрант остальные 3 раза для получения лучшего результата по сжатию.
You do not have the required permissions to view the files attached to this post.