1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Area Filling - Tô màu

31 58 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 31
Dung lượng 442,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Area Filling - Tô màu giới thiệu tới các bạn những nội dung về vùng tô; Pixel-defined region; liên thông 4 và liên thông 8; cách thức định nghĩa pixel-defined region; Polygonal Region; Recursive Flood-Fill Algorithm; thuật toán cải tiến – Dùng stack và một số nội dung khác.

Trang 1

Tô màu

Trang 2

Vùng tô Vùng đ ượ c xác đ nh b i đi m  nh –  ị ở ể ả

Vùng đ ượ c xác đ nh b i đi m  nh –  ị ở ể ả pixel­defined region

Trang 3

Pixel­defined region Vùng đ ượ c đ nh nghĩa b i màu c a pixel, chia làm 3 ph n: ị ở ủ ầ

Vùng đ ượ c đ nh nghĩa b i màu c a pixel, chia làm 3 ph n: ị ở ủ ầ

Trang 4

Liên thông 4 và liên thông 8 4­connected : 2 pixel liên thông v i nhau n u chúng k  nhau theo  ớ ế ề

4­connected : 2 pixel liên thông v i nhau n u chúng k  nhau theo  ớ ế ề

chi u ngang hay chi u d c ề ề ọ

chi u ngang hay chi u d c ề ề ọ

8­connected : 2 pixel liên thông v i nhau n u chúng k  nhau theo  ớ ế ề

8­connected : 2 pixel liên thông v i nhau n u chúng k  nhau theo  ớ ế ề

chi u ngang, hay chi u d c, hay đ ề ề ọ ườ ng chéo

chi u ngang, hay chi u d c, hay đ ề ề ọ ườ ng chéo

Trang 5

Cách th c đ nh nghĩa  ứ ị

Interior defined

T t c  các pixel trong vùng có cùng m t màu, g i là ấ ả ộ ọ

T t c  các pixel trong vùng có cùng m t màu, g i là ấ ả ộ ọ inside­color

N u m t s  pixel trong vùng có màu boundary­color thì vùng s  ch a ế ộ ố ẽ ứ

N u m t s  pixel trong vùng có màu boundary­color thì vùng s  ch a ế ộ ố ẽ ứ

lỗ

inside 

Trang 7

Recursive Flood­Fill Algorithm (

(interior­defined, 4­connected region interior­defined, 4­connected region )

Đ i màu c a t t c  các interior­pixel thành màu tô –  ổ ủ ấ ả

Đ i màu c a t t c  các interior­pixel thành màu tô –  ổ ủ ấ ả fill color

Quá trình tô màu b t đ u t  m t đi m ( ắ ầ ừ ộ ể

Quá trình tô màu b t đ u t  m t đi m ( ắ ầ ừ ộ ể seed pixel ) thu c phía  ) thu c phía  ộ ộ

Recursive Flood­Fill

fill color

Trang 8

Thu t toán

Thu t toán

N u pixel t i (x,y) thu c vùng trong – màu c a pixel đó là ế ạ ộ ủ

N u pixel t i (x,y) thu c vùng trong – màu c a pixel đó là ế ạ ộ ủ inside­color 

thì

Đ i màu c a nó thành ổ ủ

Đ i màu c a nó thành ổ ủ fill­color

Áp d ng quá trình trên cho 4 đi m lân c n nó (4­connected).ụ ể ậ

Áp d ng quá trình trên cho 4 đi m lân c n nó (4­connected).ụ ể ậ

(2,1) (3,3)

Trang 9

FloodFill(x-1,y, inside_color, fill_color);

FloodFill(x+1,y, inside_color, fill_color);

FloodFill(x,y+1, inside_color, fill_color);

FloodFill(x,y-1, inside_color, fill_color);

}

}

Trang 10

Recursive Flood­Fill (cont) (

(boundary­defined, 4­connected region boundary­defined, 4­connected region )

Bài t p

Bài t p

Mô t  thu t toánả ậ

Mô t  thu t toánả ậ

Cài đ t

Cài đ t

Boundary­defined

Trang 11

C i ti n ả ế

C i ti n ả ế

Run ­ Đ ườ ng ch y

Run ­ Đ ườ ng ch y

Dãy các pixel liên ti p theo hàng ngang n m trong vùng tôãy các pixel liên ti p theo hàng ngang n m trong vùng tôế ế ằ ằ

M i run đỗ ược đ t tên b ng pixel   c c trái (hay ph i) c a runặ ằ ở ự ả ủ

M i run đỗ ược đ t tên b ng pixel   c c trái (hay ph i) c a runặ ằ ở ự ả ủ

a s

b

d c

e

Trang 12

Thu t toán c i ti n – Dùng stack ậ ả ế

Thu t toán c i ti n – Dùng stack ậ ả ế

a s

b

d c

Stack: a

Stack: b c d Stack: b c e

Trang 13

Scanline

Đường th ng n m ngangẳ ằ

Đường th ng n m ngangẳ ằ

S  giao đi m c a scanline và đa giác là s  ch n (t ng quát)ố ể ủ ố ẵ ổ

S  giao đi m c a scanline và đa giác là s  ch n (t ng quát)ố ể ủ ố ẵ ổ

Các pixel n m gi a các c p giao đi m l ­ch n n m trong đa giácằ ữ ặ ể ẽ ẵ ằ

Các pixel n m gi a các c p giao đi m l ­ch n n m trong đa giácằ ữ ặ ể ẽ ẵ ằ

Trang 14

Thu t toán Scanline t ng quát ậ ổ

for each scanline {

Tìm giao đi m c a scanline v i các c nh c a đa giácể ủ ớ ạ ủ

Tìm giao đi m c a scanline v i các c nh c a đa giácể ủ ớ ạ ủ

S p x p các giao đi m theo th  t  tăng d n theo xắ ế ể ứ ự ầ

S p x p các giao đi m theo th  t  tăng d n theo xắ ế ể ứ ự ầ

Tô các pixel n m gi a các c p giao đi m liên ti p nhauằ ữ ặ ể ế

Tô các pixel n m gi a các c p giao đi m liên ti p nhauằ ữ ặ ể ế

Trang 15

Demo

Trang 16

• Khi scanline đi qua đ nh c a đa giác, nó s  giao v i 2 c nh. Trong Khi scanline đi qua đ nh c a đa giác, nó s  giao v i 2 c nh. Trong ỉ ỉ ủ ủ ẽ ẽ ớ ớ ạ ạ

trường h p đ nh không là c c tr , s  giao đi m c a scanline v i đa giác ợ ỉ ự ị ố ể ủ ớ

trường h p đ nh không là c c tr , s  giao đi m c a scanline v i đa giác ợ ỉ ự ị ố ể ủ ớ

Trang 17

Các tr ườ ng h p đ c bi t (cont) ợ ặ ệ

Các tr ườ ng h p đ c bi t (cont) ợ ặ ệ

Trang 18

X  lí

X  lí

Trước quá trình tô màu, ki m tra các đ nh. ể ỉ

Trước quá trình tô màu, ki m tra các đ nh. ể ỉ

N u đ nh không ph i là c c tr , xét c nh phía dế ỉ ả ự ị ạ ưới.

N u đ nh không ph i là c c tr , xét c nh phía dế ỉ ả ự ị ạ ưới.

Danh sách đ nh đa giác trỉ ướ

Danh sách đ nh đa giác trỉ ướ

khi c i ti n:ả ế

khi c i ti n:ả ế

(6,8), (9,5), (9,1), (5,5), (1,2),  (2,7), (4,8)

Sau khi c i ti n, danh sách các ả ế

Sau khi c i ti n, danh sách các ả ế

Trang 19

H n ch  c a thu t toán ạ ế ủ ậ

H n ch  c a thu t toán ạ ế ủ ậ

• Đ  xác đ nh giao đi m c a  Đ  xác đ nh giao đi m c a  ể ể ị ị ể ể ủ ủ

đ ườ ng scanline và c nh c a  ạ ủ

đ ườ ng scanline và c nh c a  ạ ủ

l n , chúng ta ph i m t r t  , chúng ta ph i m t r t  ả ả ấ ấ ấ ấ

nhi u th i gian đ  duy t h t  ề ờ ể ệ ế

nhi u th i gian đ  duy t h t  ề ờ ể ệ ế

Trang 20

C i ti n t c đ  thu t toán ả ế ố ộ ậ

C i ti n t c đ  thu t toán ả ế ố ộ ậ

Nh n xét:

Nh n xét:

– Khi dòng quét tăng m t đ n v  theo y thì Khi dòng quét tăng m t đ n v  theo y thì ộ ơ ộ ơ ị ị

hoành đ  giao đi m thay đ i theo ộ ể ổ

hoành đ  giao đi m thay đ i theo ộ ể ổ 1/m

­> Công th c tính giao đi m đ n gi nứ ể ơ ả

­> Công th c tính giao đi m đ n gi nứ ể ơ ả

– Gi  s  r ng 1 c nh c a đa giác có tung đ  Gi  s  r ng 1 c nh c a đa giác có tung đ  ả ử ằ ả ử ằ ạ ạ ủ ủ ộ ộ

b  ch n b i ị ặ ở

b  ch n b i ị ặ ở [y_lower, y_upper][y_lower, y_upper] thì khi tung 

đ  c a dòng quét không thu c đo n này, ộ ủ ộ ạ

đ  c a dòng quét không thu c đo n này, ộ ủ ộ ạ

chúng không c t c nh đóắ ạ

chúng không c t c nh đóắ ạ

­> Gi m s  lả ố ượng tính toán, không nh t thi t ấ ế

­> Gi m s  lả ố ượng tính toán, không nh t thi t ấ ế

Trang 21

Đ  gia tăng t c đ  tính toán, chúng ta xây d ng và duy trì m t ể ố ộ ự ộ

Đ  gia tăng t c đ  tính toán, chúng ta xây d ng và duy trì m t ể ố ộ ự ộ danh sách danh sách xác đ nh t a đ  giao đi m c a đa giác và đị ọ ộ ể ủ ường scanline   m i bở ỗ ướ

xác đ nh t a đ  giao đi m c a đa giác và đị ọ ộ ể ủ ường scanline   m i bở ỗ ước (AEL)

Danh sách này cho phép tính toán giao đi m m t cách nhanh chóng b ng ể ộ ằ

Danh sách này cho phép tính toán giao đi m m t cách nhanh chóng b ng ể ộ ằ

cách l u các thông tin các c nh mà đư ạ ường scanline c t.

cách l u các thông tin các c nh mà đư ạ ường scanline c t.

Đ  thu n l i tính toán, m t c nh có các thông tin sau:ể ậ ợ ộ ạ

Đ  thu n l i tính toán, m t c nh có các thông tin sau:ể ậ ợ ộ ạ

– Tung đ  cao nh t  Tung đ  cao nh t ộ ộ ấ y_upper ấ y_upper  c a c nh (sau khi rút g n)  c a c nh (sau khi rút g n).ủ ủ ạ ạ ọ ọ

– Hoành đ  giao đi m  Hoành đ  giao đi m ộ ộ ể x_intersection ể x_intersection  v i đ  v i đớ ườ ớ ường scanline hi n hành ng scanline hi n hành.ệ ệ

– Ngh ch đ o h  s  góc 1/m :  Ngh ch đ o h  s  góc 1/m : ị ị ả ả ệ ố ệ ố reciprocal_slope  Chú ý, 1/m đ  Chú ý, 1/m đượ ược tính tr c tính trướ ước  c  khi c nh đạ ược rút g n, do đó b o đ m tính chính xác c a giao đi m.ọ ả ả ủ ể

khi c nh đạ ược rút g n, do đó b o đ m tính chính xác c a giao đi m.ọ ả ả ủ ể

y_upper x_int recip_slope

Trang 23

S  d ng AEL đ  tô màu t i m t dòng scanline ử ụ ể ạ ộ

S  d ng AEL đ  tô màu t i m t dòng scanline ử ụ ể ạ ộ

T i dòng scanline hi n hành ạ ệ

T i dòng scanline hi n hành ạ ệ y, AEL l u tr  giao đi m c a scanline và , AEL l u tr  giao đi m c a scanline và ư ư ữ ữ ể ể ủ ủ

c nh đa giác.

c nh đa giác.

Đ  tô màu, chúng ta s p x p các c nh theo chi u tăng d n c a hoành đ  ể ắ ế ạ ề ầ ủ ộ

Đ  tô màu, chúng ta s p x p các c nh theo chi u tăng d n c a hoành đ  ể ắ ế ạ ề ầ ủ ộ

giao đi m 

giao đi m ể x_intx_int.

M i c p giá tr  c a x_int xác đ nh m t run, mà chúng ta có th  tô màu ỗ ặ ị ủ ị ộ ể

M i c p giá tr  c a x_int xác đ nh m t run, mà chúng ta có th  tô màu ỗ ặ ị ủ ị ộ ể

e5

Trang 24

scanline m i n m phía trên ớ ằ

scanline m i n m phía trên ớ ằ

c nh nào đó trong AEL

c nh nào đó trong AEL ” : xóa 

c nh có 

c nh có  y v vượ ượt quá t quá y_upper

• 2. Giá tr  c a hoành đ  giao 2. Giá tr  c a hoành đ  giao ị ủ ị ủ ộ ộ

đi m thay đ i theo dòng ể ổ

đi m thay đ i theo dòng ể ổ

1 2 3 4 5 6 7 8 9

Trang 25

c a c nh này s  trình bày sau ủ ạ ẽ

c a c nh này s  trình bày sau ủ ạ ẽ

trong Edge Table)

• 4. Th  t  c a hoành đ  giao 4. Th  t  c a hoành đ  giao ứ ự ủ ứ ự ủ ộ ộ

đi m có th  đ o ngể ể ả ược khi 2 

đi m có th  đ o ngể ể ả ược khi 2 

c nh giao nhau (đa giác t  c t) ạ ự ắ

c nh giao nhau (đa giác t  c t) ạ ự ắ

: AEL ph i đả ượ ắc s p x p l i.ế ạ

: AEL ph i đả ượ ắc s p x p l i.ế ạ 0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9

Trang 26

Đ  xác đ nh c nh nào để ị ạ ược chèn vào AEL, chúng ta ph i xét t ng đ nh ả ừ ỉ

Đ  xác đ nh c nh nào để ị ạ ược chèn vào AEL, chúng ta ph i xét t ng đ nh ả ừ ỉ

và x_intx_int là hoành đ  đ nh d là hoành đ  đ nh dộ ỉ ộ ỉ ướ ủ ướ ủi c a c nh.i c a c nh.ạ ạ

• EdgeTable là m t m ng các danh sách các c nh (nh  danh sách AEL). EdgeTable là m t m ng các danh sách các c nh (nh  danh sách AEL). ộ ộ ả ả ạ ạ ư ư

EdgeTable[

EdgeTable[yy] ch a danh sách các c nh có ] ch a danh sách các c nh có ứ ứ ạ ạ y_lower = y = y

Trang 27

H I

Trang 29

Dùng EdgeTable đ  c p nh t AEL ể ậ ậ

Sau khi t o EdgeTable, AEL d  dàng đạ ễ ượ ậc c p nh t thông qua các c nh ậ ạ

Sau khi t o EdgeTable, AEL d  dàng đạ ễ ượ ậc c p nh t thông qua các c nh ậ ạ

có s n trong EdgeTable t i dòng scanline ẵ ạ

có s n trong EdgeTable t i dòng scanline ẵ ạ y:

• Chèn các c nh t i EdgeTable[Chèn các c nh t i EdgeTable[ạ ạ ạ ạ y] vào AEL : nghĩa là dòng scanline b t ] vào AEL : nghĩa là dòng scanline b t ắ ắ

đ u c t các c nh có ầ ắ ạ

đ u c t các c nh có ầ ắ ạ y_lower = y = y

• Giá  tr  ban đ u c a Giá  tr  ban đ u c a ị ị ầ ầ ủ x_int ủ x_int là hoành đ  c a đ nh d là hoành đ  c a đ nh dộ ủ ộ ủ ỉ ỉ ướ ưới nên chính là i nên chính là 

hoành đ  giao đi m ban đ u.ộ ể ầ

hoành đ  giao đi m ban đ u.ộ ể ầ

Trang 31

Thu t toán c i ti n ậ ả ế

Thu t toán c i ti n ậ ả ế

S p x p AEL theo chi u tăng d n c a ắ ế ề ầ ủ

S p x p AEL theo chi u tăng d n c a ắ ế ề ầ ủ x_intx_int;

Ngày đăng: 30/01/2020, 05:51

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w