CHƯƠNG 2: CÁC THUẬT TOÁN DỰA VÀO HỆ HÀM LẶP

Một phần của tài liệu Nghiên cứu phương pháp sinh ảnh FRACTAL dựa trên hệ hàm lặp và hệ thống (Trang 32)

2.1 Thuật toán tiền định (Deterministic Algorithm):

Xét hệ hàm lặp IFS{ X;wn, n = 1, 2, .., N}. Dựa trên ý tưởng tính toán trực tiếp dãy {An , n=1, 2, ...} từ tập ban đầu A0

A1 =w1(A0)∪w2(A0)∪...∪wn(A0) A2 =w1(A1)∪w2(A1)∪...∪wn(A1)

...

Ak = w1(Ak-1)∪w2(Ak-1)∪....∪wn(Ak-1)=∪in=1wi(Ak-1) ⇒ An=Won(A) dãy {An; n =1, 2, ...}⊂H(X) hội tụ tới tập hút của IFS trên metric Hausdorff.

W =limn→∞ W0n (A)

là ảnh fractal cần tìm của hệ hàm lặp từ đó suy ra ứng dụng trong sinh ảnh fractal trên máy tính với số lần lặp đủ lớn ảnh thu được gần giống fractal cần tìm.

Để đơn giản ta xét IFS {R2; wn(n=1, 2, .., N)} với ánh xạ là các phép biến đổi A phin

Hình 2.1: ví dụ về thuật toán Sierpinski

Chương trình sau đây viết bằng ngôn ngữ Basic: bắt đầu từ tập A0 là hình vuông và sử dụng IFS trong bảng đầu tiên.

Chương trình (ví dụ của Thuật toán tiền định).

screen 1: cls 'initialize graphic dim s(100, 100): dim t(100, 100) 'allocate two arrays of pixels

a(1)=0.5:b(1)=0:c(1)=0:d(1)=0.5:e(1)=1:f(1)=1 'input the IFS code

a(2)=0.5:b(2)=0:c(2)=0:d(2)=0.5:e(2)=50:f(2)=1 a (3)=0.5:b(3)=0:c(3)=0:d(3)=0.5:e(3)=50:f(3)=50

for i=1 to 100 'input the initial set A(0) into the array t(i, j) t(i, 1) = 1:pset(i,1) 'A(0) can be used

t(1, i)=1:pset(1, i) 'A(0) is plotted on the screen t(100, i)=1:pset(100, i) t(i, 100)=1:pset(i, 100)

next: do

for j=1 to 100:ift(i, j)=1 then s(a(1)*i+b(1)*j+e(1), c(1)*i+d(1)*j+f(1))=1 'and apply to A(n)

s(a(2)*i+b(2)*j+e(2), c(2)*i+d(2)*j+f(2))=1 s(a(3)*i+b(3)*j+e(3), c(3)*i+d(3)*j+f(3))=1 end if: next j: next i

cls 'clear the screen

for i=1 to 100: for j=1 to 100 t(i, j)=s(i, j) 'put A(n+1) into the array t(i, j)

s(i, j)=0

'reset the array s(i, j) to zero

if t(i, j)=1 then pset(i, j) 'plot A(n+1) end if: next: next

‘loop until instat 'if a key has been pressed then stop, otherwise compute A(n+1)=W(A(n+1))

2.2 Thuật toán lặp ngẫu nhiên (Random Interation Algorithm):

IFS{X;w1, w2, ..., wN}, wi có hệ số co tương ứng si, xác xuất áp dụng ánh xạ là pi, trong đó

Với tập ban đầu x0∈X, chọn ngẫu nhiên chỉ số i∈{1, 2, ...N} lặp đến khi dừng (tùy ý)

xn=wi(xn-1) n=1, 2, 3, ... ta có {xn: n=1, 2, 3, ...}⊂X

Giả sử {X;w1, w2, ..., wN} là hypecbolic IFS, trong đó pi>0 là các xác suất và pi i N = = ∑ 1 1

. Lấy x0∈ X và chọn liên tiếp một cách độc lập, (adsbygoogle = window.adsbygoogle || []).push({});

xn∈{w1(xn-1), w2(xn-1), ..., wN(xn-1), n=2, 3, ... trong đó xác suất của sự kiện xn=wi(xn-1) là pi. Như thế chúng ta thu được dãy {xn; n=0, 1, ...}⊂ X. Dãy này hội tụ đến điểm hút của IFS.

Chương trình ( ví dụ về sinh ảnh ngẫu nhiên).

a[1]=0.5:b[1]=0:c[1]=0:d[1]=0.5:e[1]=1:f[1]=1 'IFS data a[2]=0.5:b[2]=0:c[2]=0:d[2]=0.5:e[2]=50:f[2]=1

a[3]=0.5:b[3]=0:c[3]=0:d[3]=0.5:e[3]=50:f[3]=50 screen 1:cls 'initialize computer graphics

window (0, 0)-(100, 100) 'set plotting window to 0<x<1, 0<y<1 'initialize (x, y) and define the number of iteration, numits x=0:y=0:numits=1000

for n=1 to numits 'Random Iteration begins

'choose one of the numbers 1, 2 and 3 with equal probability k=int(3*rnd-0.00001)+1

'apply A phin transformation number k to (x, y) newx=a[k]*x+b[k]*y+e[k]:newy=c[k]*x+d[k]*y+f[k] x=newx:y=newy 'set (x, y) to the point thus obtained if n>10 then pset(x, y) 'plot (x, y) after the first 10 iterations next:end

CHƯƠNG 3: SINH ẢNH DỰA VÀO HỆ

Một phần của tài liệu Nghiên cứu phương pháp sinh ảnh FRACTAL dựa trên hệ hàm lặp và hệ thống (Trang 32)