FRACTALS

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



 
 

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

60

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

Листинг 2.4.2. Образен программы вычисления вероятностей, сопоставленных

лля вероятностного алгоритма. Кажлая вероятность пропориионалЬн' опрелелителю матрицы аффинного преобразования. Этот определ* тель, в свою очерель, пропорционален плошали, управляемой ЭТи преобразованием. Вы можете молифииировать программу, чтобы По экспериментировать с неравномерными распрелелениями лля разл^ ных частей изображения-аттрактора.

int compute__ifs_j?robabilities (object__list *coeff_list) { int i, no__of__f ns = coeff__list->get__count () ; float *pr = NULL,*det_a = NULL;

// allocated 1. . no__of_f ns float sum = 0.0,pr_sum = 0.0; coef f__s true t if s ;

if (!(det_a = allocate_f_jvector (1, no__of_f ns) ) ) return 0;

if (! (pr = allocate_f__vector (1, no__of__f ns) ) ) { f ree_f__vector (det__a, 1) ; return 0; }

for (i=l;i<=no_of_f ns;i++) {

ifs - *(coeff_struet *) (coeff_list->at(i)); det_a [i] = fabs (ifs.a*ifs.d - ifs.b*ifs.c); sum += det__a[i] ; } /* i */

for (i=l;i<=no__of_fns;i++) {

pr[i] = det__a[i] / sum;

if (pr[i] < 0.01) pr[i] = 0.01;

pr_sum += pr[i];

}

free__f__vector (det_a,l);

/♦adjust pr values to get true probabilities */ for (i=l;i<=no_of_fns;i++) { pr[i] /- pr^sum;

((coeff_struet *)(coeff_list->at(i)))-> prob = pr[i];

)

free__f_vector (pr,l);

return 1;

>

Листинг 2.4.3. Образен программы, реализуюшей вероятностный IFS алгоритм. Э1°]

алгоритм проше реализуется и является более быстролействуюшим п° сравнению с летерминистическим алгоритмом; кроме того, он созАд изображения высокого качества.

void ifs_random__image__graph (graph_setup__rec *gr_setup, graph_window__struct *gr, object__list *coeff_list, term_proc terminating_j?roc) {

Системы итерируемых функций

~ 61

int i,k;

int no__of__fns = coef f__list->get_count () ;

int *p = NULL,*pi « NULL; /* allocated 1. . no__of__f ns */

coeff_struct ifs;

int int__sum = 0; float x,y,xnew,ynew; unsigned long iter;

if (! (p = allocate__int_yector (1,no_of_fns)) ) return; if (! (pi = allocate__int_vector (1,no_of_fns))) goto exit_j?roc;


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


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

 

Hosted by uCoz