1
Area Filling
Area Filling
Tô màu đồ thị
Tô màu đồ thị
2
Vùng tô
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
pixel-defined region
Vùng xác định bởi đa giác –
Vùng xác định bởi đa giác –
polygonal region
polygonal region
pixel-defined
pixel-defined
region
region
polygonal
polygonal
region
region
3
Pixel-defined region
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:
Vùng trong –
Vùng trong –
interior
interior
Vùng ngoài –
Vùng ngoài –
exterior
exterior
Biên (liên tục) -
Biên (liên tục) -
boundary
boundary
interior
exterior
boundary
4
Liên thông 4 và liên thông 8
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
5
Cách thức định nghĩa
Cách thức định nghĩa
pixel-defined region
pixel-defined region
Interior defined
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
inside-color
Các pixel trên biên không có màu này
Các pixel trên biên không có màu này
Có thể có lỗ trong vùng
Có thể có lỗ trong vùng
Boundary defined
Boundary defined
Các pixel thuộc biên có cùng màu –
Các pixel thuộc biên có cùng màu –
boundary-color
boundary-color
Các pixel trong vùng không có màu này
Các pixel trong vùng không có màu này
Nếu một số pixel trong vùng có màu boundary-color thì vùng sẽ chứa lỗ
Nếu một số pixel trong vùng có màu boundary-color thì vùng sẽ chứa lỗ
Interior-defined
Boundary-defined
inside
color
6
Polygonal Region
Polygonal Region
Định nghĩa bằng đa giác: xác định các định các đỉnh p
Định nghĩa bằng đa giác: xác định các định các đỉnh p
i
i
= (x
= (x
i
i
,y
,y
i
i
)
)
Các loại đa giác:
Các loại đa giác:
Convex
Convex
Concave, simple
Concave, simple
Nonsimple
Nonsimple
polygonal
polygonal
region
region
convex
convex
concave
concave
nonsimple
nonsimple
7
Recursive Flood-Fill Algorithm
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
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
seed pixel
) thuộc phía trong
) thuộc phía trong
vùng tô và lan truyền khắp vùng tô => Flood-Fill
vùng tô và lan truyền khắp vùng tô => Flood-Fill
Interior-defined
seed pixel
inside
color
Recursive Flood-Fill
fill
color
8
Recursive Flood-Fill Algorithm (cont)
Recursive Flood-Fill Algorithm (cont)
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
inside-color
thì
thì
Đổi màu của nó thành
Đổi màu của nó thành
fill-color
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).
Ngược lại, không làm gì.
Ngược lại, không làm gì.
0 1 2 43 5 6
0
1
2
3
4
5
6
SS
(4,2)
(4,2)
(2,3)
(3,2)
(3,2) (1,2)(2,2)
(2,1)
(3,3)
9
Recursive Flood-Fill Program
Recursive Flood-Fill Program
void FloodFill(int x, int y, int inside_color, int
void FloodFill(int x, int y, int inside_color, int
fill_color)
fill_color)
{
{
if (getpixel(x,y) == inside_color)
if (getpixel(x,y) == inside_color)
{
{
putpixel(x,y,fill_color);
putpixel(x,y,fill_color);
FloodFill(x-1,y, inside_color, fill_color);
FloodFill(x-1,y, inside_color, fill_color);
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);
FloodFill(x,y-1, inside_color, fill_color);
FloodFill(x,y-1, inside_color, fill_color);
}
}
}
}
10
Recursive Flood-Fill (cont)
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
11
Cải tiến
Cải tiến
Run - Đường chạy
Run - Đường chạy
D
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
dc
e
12
Thuật toán cải tiến – Dùng stack
Thuật toán cải tiến – Dùng stack
Cho vào
Cho vào
stack
stack
run chứa
run chứa
seed pixel
seed pixel
while
while
stack
stack
not empty {
not empty {
begin
begin
= pop();
= pop();
Tô run bắt đầu từ
Tô run bắt đầu từ
begin
begin
Cho vào
Cho vào
stack
stack
các run ở bên trên
các run ở bên trên
Cho vào
Cho vào
stack
stack
các run ở bên dưới
các run ở bên dưới
}
}
b
c
e
a s
b
dc
Stack:
a
Stack:
b
c
d
Stack:
b
c
e