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 1Tô màu
Trang 2Vùng tô Vùng đ ượ c xác đ nh b i đi m nh – ị ở ể ả
Vùng đ ượ c xác đ nh b i đi m nh – ị ở ể ả pixeldefined region
Trang 3Pixeldefined 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 4Liên thông 4 và liên thông 8 4connected : 2 pixel liên thông v i nhau n u chúng k nhau theo ớ ế ề
4connected : 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 ề ề ọ
8connected : 2 pixel liên thông v i nhau n u chúng k nhau theo ớ ế ề
8connected : 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 5Cá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à ấ ả ộ ọ insidecolor
N u m t s pixel trong vùng có màu boundarycolor thì vùng s ch a ế ộ ố ẽ ứ
N u m t s pixel trong vùng có màu boundarycolor thì vùng s ch a ế ộ ố ẽ ứ
lỗ
inside
Trang 7Recursive FloodFill Algorithm (
(interiordefined, 4connected region interiordefined, 4connected region )
Đ i màu c a t t c các interiorpixel thành màu tô – ổ ủ ấ ả
Đ i màu c a t t c các interiorpixel 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 FloodFill
fill color
Trang 8Thu 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à ế ạ ộ ủ insidecolor
thì
Đ i màu c a nó thành ổ ủ
Đ i màu c a nó thành ổ ủ fillcolor
Áp d ng quá trình trên cho 4 đi m lân c n nó (4connected).ụ ể ậ
Áp d ng quá trình trên cho 4 đi m lân c n nó (4connected).ụ ể ậ
(2,1) (3,3)
Trang 9FloodFill(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 10Recursive FloodFill (cont) (
(boundarydefined, 4connected region boundarydefined, 4connected 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ặ
Boundarydefined
Trang 11C 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 12Thu 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 13Scanline
Đườ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 14Thu 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 15Demo
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 17Các tr ườ ng h p đ c bi t (cont) ợ ặ ệ
Các tr ườ ng h p đ c bi t (cont) ợ ặ ệ
Trang 18X 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ỉ ước
Danh sách đ nh đa giác trỉ ước
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 19H 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 20C 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ở ỗ ước
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 23S 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 24scanline 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 25c 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 27H I
Trang 29Dù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 31Thu 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;