FRACTALS

ѕ даРЪвРЫРе
іРЫХаХп ШЧЮСаРЦХЭШЩ даРЪвРЫЮТ
їаЮУаРЬЬл ФЫп ЯЮбваЮХЭШп даРЪвРЫЮТ
БблЫЪШ ЭР ФагУШХ бРЩвл Ю даРЪвРЫРе
ЅРЯШиШ бТЮШ ТЯХзРвЫХЭШп



 
 

LOGO
Предыдущая Следующая

tbyte_array. КаЖДЫЙ tbyte_array - ЭТО Массив ИЗ Четыре

целых чисел, каждое из которых называется bit. Число уровней на единицу меньше глубины квадродерева. В приведенном выше примере - два уровня. Первому уровню сопоставлен один tbyte_array, а второму - четыре. Вообще на n-ом уровне будет 4"'1 массивов tbyte_array. Выражение

level_array[[level_index].bit[bit_index]

3. Фрактальное кодирование изображений в градациях серого

97

делает доступными отдельные «биты» (bit) в массиве уровней. Первый индекс (j-i, где j - это глубина квадродерева) -это уровень. В рассмотренном выше примере два уровня, соответствующие индексам 0 и 1. Второй индекс (ievei_index) говорит о том, какой tbyte_array доступен на данном уровне. В рассмотренном примере на нулевом уровне ievei_index может принимать только значение 0, тогда как на первом уровне он принимает значения 0 и 2. Последний индекс (bit_index) указывает на то, какой bit доступен в

массиве tbyte_array.

Пример программы лля преобразования рангового списка инлексов в

«массив уровней» квалролерева.

typedef struct {

short index[MAX_QUADTREEJDEPTH+1]; unsigned int domain,transf; int brightness; float contrast; } rangerstruct;

typedef struct {

int bit[4];

} tbyte_array; typedef tbyte^array *pbyte__array; pbyte_array level__array [MAX__QUADTREE_DEPTH] ;

int i, j , no__of__levels = quadtree_depth - 1, level_index,bit_jlndex; int power_4 [MAX__QUADTREE_JDEPTH] ; power_4[0] = 1;

for (i=0;i<no_of_levels;i++) {

level_array[i] = (pbyte_array)calloc((size^t)

power_4[i] ,sizeof(tbyte_array)); power_4[i+1] = power_4[i]*4; } // end i

for (i=l;i<=range_list->get_count();i++) {

range = (rangerstruct *) (range_list->at(i) ) ; level_index = 0; for (j =1;j <quadtree_depth;j ++) if (range->index[> 0) { bit_index = range->index[j}-1; level_array[j-l][level__index].

bit [bit__index] = 1; level_index = level__index*4 + bit_index; } // end j } // end i

98_Фракталы и вейвлеты для сжатия изображений в Аейст^

3.5.2.2. Битовая структура хранения ранговой информации

Листинг 3.5.2 представляет битовую структуру хранения щ формации, требуемой для каждого рангового блока. Обще* количество битов должно быть кратно 8, так чтобы каждц ранговый блок мог быть записан целым количеством байтов Фрагмент программы в листинге 3.5.2 показывает, что на ка ждый ранговый блок отводится 4 байта. Поиск оптимального распределения битов между четырьмя величинами (индекс домена, индекс преобразования, уровень яркости и коэффй. циент контрастности) - это процесс проб и ошибок. Напри, мер, распределение 8 битов под яркость и 11 битов под кон« трастность при кодировании изображения «Lena» дает сред, нюю пиксельную ошибку, равную 4.789%, в то время как распределение 9 битов под яркость и 10 битов под контраст-ность дает ошибку, равную 4.355%. Число битов, отводимых под индекс домена, определяет максимальное число доменов. Так, выделение 10 битов означает, что максимально возможное число доменов - 1024. Здесь речь идет не о традиционных алгоритмах фрактального кодирования (некоторые программы работают с сотнями тысяч доменов). Однако это хороший компромисс между скоростью и точностью. Большое количество доменов - это главный фактор, определяющий увеличение времени кодирования. Заметим, что, как предлагается в статье [39], исключение преобразований пространственной ориентации освободит 3 бита, за счет которых будет можно увеличить число доменов. Фишер [39] рекомендует использовать в процессе кодирования дискретные (quantized) значения яркости и контрастности вместо того, чтобы кодировать, используя оптимальные значения, а уже потом производить дискретизацию.


Предыдущая Следующая


Галерея фракталов

 

Hosted by uCoz