Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh

Dùng máy tính để tạo ra hình ảnh

Đồ họa máy tính và xử lý ảnh

– Đồ họa máy tính: tạo hình ảnh dựa trên đặc tả hoặc mô hình

– Xử lý ảnh: nâng cao chất lƣợng hoặc chỉnh sửa hình ảnh.

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 1

Trang 1

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 2

Trang 2

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 3

Trang 3

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 4

Trang 4

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 5

Trang 5

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 6

Trang 6

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 7

Trang 7

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 8

Trang 8

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 9

Trang 9

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 361 trang Danh Thịnh 10/01/2024 2600
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh

Bài giảng Đồ họa máy tính - Chương 1: Giới thiệu đồ họa máy tính - Trường Đại học Bách khoa TP Hồ Chí Minh
ĐỒ HỌA MÁY TÍNH 
Trƣờng Đại Học Bách Khoa TP Hồ Chí Minh 
Khoa Khoa học & Kỹ thuật Máy tính 
CHƢƠNG 1: 
GIỚI THIỆU ĐỒ HỌA 
MÁY TÍNH 
Slide 2 Faculty of Computer Science and Engineering - HCMUT 
NỘI DUNG TRÌNH BÀY 
Giới thiệu tổng quan về đồ họa máy tính 
Đối tƣợng cơ bản trong đồ họa máy tính 
Thiết bị hiển thị đồ họa 
Slide 3 Faculty of Computer Science and Engineering - HCMUT 
CHƢƠNG TRÌNH 
Nội dung 
Chƣơng 1-Giới thiệu đồ họa máy tính 
Chƣơng 2-Bƣớc đầu tạo dựng hình ảnh 
Chƣơng 3-Xây dựng công cụ vẽ hình ảnh 
Chƣơng 4-Vector trong đồ họa máy tính 
Chƣơng 5-Biến đổi hình 
Chƣơng 6-Mô hình hóa đối tƣợng 3 D bằng lƣới đa giác 
Chƣơng 7-Phép nhìn trong không gian ba chiều 
Chƣơng 8-Tô màu vật thể ba chiều 
Chƣơng 9-Kỹ thuật lặp đệ quy, ứng dụng tạo hoa văn 
Chƣơng 10-Đồ họa raster 
Slide 4 Faculty of Computer Science and Engineering - HCMUT 
TÀI LIỆU MÔN HỌC 
 [1] Francis S. Hill, Jr, Computer Graphics, Macmillan Publishing 
Company, 1990. 
 [2] Foley, van Dam, Feiner, Hughes, Computer Graphics principles and 
practice, Addison-Wesley Publishing Company, 1996. 
 [3] Nguyễn Hữu Lộc, Đồ họa máy tính và mô hình hóa hình học, Nhà 
xuất bản thành phố Hồ Chí Minh, 2000. 
 [4] Hoàng Kiếm, Dƣơng Anh Đức, Lê Đình Huy, Vũ Hải Quân, Cơ sở 
đồ họa máy tính, Nhà xuất bản giáo dục, 2000. 
 [5] Nguyễn Quốc Cƣờng, Hoàng Đức Hải, Đồ họa vi tính, Nhà xuất bản 
giáo dục, 1998. 
 [6] Tống Nghĩa, Hoàng Đức Hải, Đồ họa máy tính trong ngôn ngữ C, Nhà 
xuất bản giáo dục, 1999. 
 [7] Nguyễn Tiến, Ngô Quốc Việt, Giáo trình đồ họa máy tính, Nhà xuất 
bản thống kê, 2001. 
 [8] Lê Tấn Hùng, Huỳnh Quyết Thắng, Kỹ thuật đồ họa, Nhà xuất bản 
Khoa học và Kỹ thuật, 2004 
  Graphics 
Slide 5 Faculty of Computer Science and Engineering - HCMUT 
ĐỊNH NGHĨA ĐỒ HỌA MÁY TÍNH 
Dùng máy tính để tạo ra hình ảnh 
Đồ họa máy tính và xử lý ảnh 
– Đồ họa máy tính: tạo hình ảnh dựa trên đặc tả hoặc 
mô hình 
– Xử lý ảnh: nâng cao chất lƣợng hoặc chỉnh sửa hình 
ảnh. 
Slide 6 Faculty of Computer Science and Engineering - HCMUT 
ỨNG DỤNG CỦA ĐỒ HỌA MÁY TÍNH 
Ứng dụng trong giải trí, xuất bản và nghệ thuật 
– Sản xuất phim hoạt hình, tạo hiệu ứng cho phim nhựa 
– Trò chơi máy tính 
– Duyệt Web 
– Chế bản điện tử 
Xử lý ảnh 
Ứng dụng trong tự động hóa và điều khiển 
Mô phỏng 
Máy tính hỗ trợ thiết kế 
– Hỗ trợ thiết kế kiến trúc 
– Hỗ trợ thiết kế mạch điện tử 
Hình ảnh hóa số liệu khoa học 
Slide 7 Faculty of Computer Science and Engineering - HCMUT 
ĐỐI TƢỢNG CƠ BẢN TRONG ĐHMT 
Đƣờng gấp khúc (polyline) 
Văn bản (text) 
Vùng tô (filled region) 
Ảnh ma trận điểm hay ảnh raster (raster image) 
Slide 8 Faculty of Computer Science and Engineering - HCMUT 
ĐƢỜNG GẤP KHÖC 
Đƣờng gấp khúc là một tập các đoạn thẳng đƣợc nối với 
nhau. 
Đƣờng gấp khúc đƣợc dùng mô phỏng đƣờng cong. 
Các hàm liên quan 
– Vẽ điểm: drawDot(x1, y1) 
– Vẽ đoạn thẳng: drawLine(x1, y1, x2, y2) 
– Vẽ đƣờng gấp khúc: drawPolyline(poly) 
Slide 9 Faculty of Computer Science and Engineering - HCMUT 
ĐƢỜNG GẤP KHÖC 
Khi đỉnh đầu và đỉnh cuối đƣợc nối bằng một đoạn thẳng 
thì đƣờng gấp khúc trở thành đa giác 
Slide 10 Faculty of Computer Science and Engineering - HCMUT 
ĐƢỜNG GẤP KHÖC 
Thuộc tính 
– Màu sắc 
– Độ dày 
– Kiểu đƣờng (liền nét, đứt nét) 
– Cách nối hai cạnh dày 
Thiết lập thuộc tính: 
 setDash (dash7) hoặc setLineThickness(thickness). 
Slide 11 Faculty of Computer Science and Engineering - HCMUT 
VĂN BẢN 
Một số thiết bị có hai chế độ hiển thị 
– Chế độ hiển thị văn bản 
– Chế độ hiển thị đồ họa 
Thủ tục hiển thị chuỗi 
– drawString(x, y, string); 
Thuộc tính 
– Font 
– Màu sắc 
– Kích thƣớc 
– Hƣớng 
– Khoảng cách giữa các ký tự trong chuỗi 
Slide 12 Faculty of Computer Science and Engineering - HCMUT 
VĂN BẢN 
Slide 13 Faculty of Computer Science and Engineering - HCMUT 
VÙNG TÔ 
Hình đƣợc tô bởi màu hoặc mẫu tô. Đƣờng biên thƣờng 
là hình đa giác. 
Thủ tục : fillPolygon(poly, pattern); 
Slide 14 Faculty of Computer Science and Engineering - HCMUT 
VÙNG TÔ 
Dùng vùng tô để mô phỏng các mặt khác nhau của vật 
thể tô màu 
Slide 15 Faculty of Computer Science and Engineering - HCMUT 
ẢNH RASTER 
Đƣợc tạo bởi các pixel 
Lƣu trữ dƣới dạng mảng các giá trị 
Phƣơng pháp tạo ảnh raster 
– Thiết kế thủ công 
– Tạo bằng thuật toán 
– Quét 
Ảnh raster có thể tiến hành xử lý 
Slide 16 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ HIỂN THỊ ĐỒ HỌA 
Thiết bị đồ họa vector: tạo hình ảnh từ những đoạn 
thẳng 
– Ƣu điểm: nhanh 
– Khuyết điểm: không tô màu cho vùng đƣợc 
Các loại thiết bị vector thƣờng gặp 
– Máy vẽ: 
• Máy vẽ flatbed 
• Máy vẽ dạng trống 
– Màn hình vector 
Slide 17 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ HIỂN THỊ ĐỒ HỌA 
Thiết bị raster: Tạo hình ảnh từ ma trận điểm 
Phân loại: 
– Màn hình video 
– Màn hình tấm phẳng 
– Các thiết bị sao chép cứng 
• Máy in film (film recorder) 
• Máy in laser 
• Máy in phun 
Slide 18 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Các vấn đề cần tìm hiểu 
– Bề mặt hiển thị 
– Bộ đệm frame 
– Quá trình quét dòng 
Bề mặt hiển thị (display surface) 
Slide 19 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Bộ đệm frame 
CPU Bộ nhớ hệ 
thống 
Bộ đệm 
Bộ điều khiển 
quét dòng 
Bộ chuyển đổi 
Bus hệ thống 
Bề mặt hiển thị 
Slide 20 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Quá trình quét dòng 
Slide 21 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Màn hình video màu 
Slide 22 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Màu chỉ mục và bảng tìm kiếm 
Slide 23 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Màu chỉ mục và bảng tìm kiếm 
Slide 24 Faculty of Computer Science and Engineering - HCMUT 
THIẾT BỊ RASTER 
Màn hình tấm phẳ ... ol1 to col2 do 
 begin 
 SetPixel(x, Round(y),color); 
 y:= y + m; 
 end; 
 end; 
Slide 328 Faculty of Computer Science and Engineering - HCMUT 
Thuaät toaùn Bresenham 
Nhöõng haïn cheá cuûa giaûi thuaät DD_Line 
– Chaäm vì söû duïng haøm Round 
– Khoâng chính xaùc khi khoaûng caùch giöõa 2 ñieåm ñaàu 
muùt lôùn 
– Ñoä saùng khoâng ñoàng ñeàu 
Thuaät toaùn Bresenham 
– Chæ duøng soá nguyeân 
– Thuoäc vaøo lôùp giaûi thuaät incremental (xaùc ñònh toïa ñoä 
cuûa ñieåm hieän haønh döïa vaøo toïa ñoä cuûa ñieåm tröôùc) 
Slide 329 Faculty of Computer Science and Engineering - HCMUT 
Cho ñoaïn thaúng noái hai ñieåm (x
a
 , y
a
) vaø (x
b
 , y
b
), 
– caùc toïa ñoä ñeàu laø soá nguyeân (toïa ñoä trong frame buffer) 
Bieåu dieãn töôøng minh cuûa ñöôøng thaúng: 
– Ñoä doác: , vôùi 
Baøi toaùn: Xaùc ñònh caùc pixel bieåu dieãn ñoaïn thaúng “toát” nhaát 
– tuøy thuoäc vaøo caùch ñònh nghóa sai soá 
Wlog (without loss of generality), x
a
 < x
b
 vaø 0 < m < 1 
– X taêng töø a ñeán b 
– X taêng nhanh hôn y 
– Moãi laàn x taêng leân 1, y khoâng taêng hoaëc taêng leân 1 
Bieåu dieãn ñoaïn thaúng trong frame buffer 
y = m(x - x
a
) + y
a
x
y
m
Dy = y
b
 - y
a
Dx = x
b
 - x
a
Slide 330 Faculty of Computer Science and Engineering - HCMUT 
Sai soá khi choïn pixel 
Sinh caùc pixel baèng phöông phaùp taêng daàn 
Ñònh nghóa sai soá e(Ti) = y* - yi - 1 
e(S
i
) = (y
i - 1
 + 1) - y* 
x
i - 1 
x
i
y
i - 1 
S
i
T
i
Ñoaïn thaúng lyù töôûng 
y
*
Slide 331 Faculty of Computer Science and Engineering - HCMUT 
Quy taéc choïn pixel xaáp xæ toát ñoaïn thaúng thöïc 
Quy taéc choïn pixel 
Tính e(T
i
) - e(S
i
) = 2m(x
i
 - x
a
) + 2(y
a
 - y
i - 1
) - 1 
Töø treân, ñeå chæ tính vôùi soá nguyeân, ñònh nghóa 
e
i
 = Dx(e(T
i
) - e(S
i
)) 
 = 2(Dy)(x
i
 - x
a
) + 2(Dx)(y
a
 - y
i - 1
) - Dx (*) 
Choïn T
i
 neáu vaø chæ neáu e(T
i
) - e(S
i
) < 0 
Neáu e
i
 < 0 thì choïn y
i
 = y
i - 1
 , neáu khoâng thì choïn y
i
 = y
i - 1
 + 1
Caàn kieåm tra tính ñuùng ñaén cuûa quy taéc treân! 
Slide 332 Faculty of Computer Science and Engineering - HCMUT 
Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel 
Tröôøng hôïp ñoaïn thaúng lyù töôûng ñi qua giöõa S
i
 vaø T
i
x
i - 1
 x
i
y
i - 1
S
i
T
i
Ñoaïn thaúng lyù töôûng 
e(T
i
) = y* - y
i - 1 
e(S
i
) = (y
i - 1
 + 1) - y* 
y
*
Slide 333 Faculty of Computer Science and Engineering - HCMUT 
Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel (tieáp) 
Caùc tröôøng hôïp coøn laïi 
xi 1 xi 
yi 1 
Si 
Ti 
xi 1 xi 
yi 1 
Si 
Ti 
Nhaéc laïi: e(T
i
) = y* y
i 1 
 e(S
i
) = (y
i 1 + 1) y* 
ñoaïn thaúng lyù töôûng 
ñi qua phía treân S
i
 vaø T
i 
ñoaïn thaúng lyù töôûng 
ñi qua phía döôùi S
i
 vaø T
i 
e(T
i
) >= 0
e(S
i
) <= 0 
e(T
i
) <= 0
e(S
i
) >= 0 
Slide 334 Faculty of Computer Science and Engineering - HCMUT 
Tính sai soá moät caùch höõu hieäu 
Töø 
 suy ra e
i + 1
 = 2(Dy)(x
i + 1
 - x
a
) + 2(Dx)(y
a
 - y
i 
) ‟ Dx 
 Töø treân, e
i + 1
 = e
i
 + 2(Dy)(x
i + 1
 - x
i
) - 2(Dx)(y
i
 - y
i - 1 
) 
 Theo quy taéc choïn pixel, 
‟ neáu e
i
 < 0 thì choïn y
i
 = y
i - 1
 e
i + 1
 = e
i
 + 2Dy 
‟ neáu khoâng thì choïn y
i
 = y
i - 1 
+ 1 
 e
i + 1
 = e
i
 + 2Dy - 2Dx 
e
i
 = 2(Dy)(x
i
 - x
a
) + 2(Dx)(y
a
 - y
i - 1
) - Dx 
Slide 335 Faculty of Computer Science and Engineering - HCMUT 
Giaûi thuaät cuûa Bresenham 
Bieåu dieãn ñoaïn thaúng trong frame buffer 
‟ Giaûi thuaät baét ñaàu nhö theá naøo? 
„ x
0
 = x
a
, y
0
 = y
a
„ Töø (*) coù e
1
 = 2(Dy) - Dx (duøng x
1
 - x
a
 = 1) 
procedure Bresenham(xa, xb : col; ya, yb : row; col_val : color); 
{veõ ñoaïn thaúng coù maøu laø col_val töø (xa, ya) ñeán (ya, yb)} 
{wlog, xa < xb vaø 0 < ñoä doác cuûa ñoaïn thaúng < 1} 
var 
 x : col; 
 y : row; 
 dx, dy, 
 e_inc, {thay ñoåi cuûa sai soá khi y taêng} 
 e_noinc, {thay ñoåi cuûa sai soá khi y khoâng taêng} 
 e : integer; {sai soá hieän thôøi} 
Slide 336 Faculty of Computer Science and Engineering - HCMUT 
Giaûi thuaät cuûa Bresenham (tieáp) 
begin 
 y := ya; 
 dx := xb - xa; 
 dy := yb - ya; 
 e_noinc := dy + dy; {2dy} 
 e := e_noinc - dx; {e1=2dy-dx} 
 e_inc := e - dx; {2dx-dy} 
 for x := xa to xb do {voøng laëp chính} 
 begin 
 SetPixel(x, y, col_val); 
 if e < 0 then e := e + e_noinc; 
 else begin 
 y := y + 1; 
 e := e + e_inc 
 end; 
 end; 
end; {Bresenham} 
Slide 337 Faculty of Computer Science and Engineering - HCMUT 
Caùc tröôøng hôïp khaùc 
 Giaûi thuaät Bresenham giaû söû x
a
 > x
b
 vaø 0 < m < 1. 
Giaûi quyeát caùc tröôøng hôïp coøn laïi: 
x
a
 > x
b
 (ñoåi vò trí hai ñaàu muùt) 
m > 1 (ñoåi vai troø cuûa x vaø y) 
Ñoä doác aâm: -1 < m < 0 (thay dy baèng ‟dy) 
m < -1 (thay dx baèng ‟dx, ñoåi vai troø cuûa x vaø y) 
Ñoaïn thaúng ñöùng vaø ñoaïn thaúng naèm ngang 
Slide 338 Faculty of Computer Science and Engineering - HCMUT 
Bieåu dieãn voøng troøn trong frame buffer 
Baøi toaùn: Xaùc ñònh caùc pixel bieåu dieãn voøng troøn y2 = 
R
2
 ‟ x2 “toát” nhaát 
‟ tuøy thuoäc vaøo caùch ñònh nghóa sai soá 
Giaûi quyeát 
‟ Do ñoái xöùng, chæ caàn khaûo saùt caùch veõ khi 0 x 
sao cho y(x) x töùc laø cung AB. 
‟ Sinh caùc pixel baèng phöông phaùp taêng daàn 
(incremental). 
Slide 339 Faculty of Computer Science and Engineering - HCMUT 
Ñoái xöùng treân voøng troøn 
Giaûm phí toån tính toaùn baèng caùch duøng pheùp ñoái 
xöùng treân voøng troøn 
‟ Chæ caàn xaùc ñònh caùc pixel töông öùng vôùi moät 
cung laø 1/8 voøng troøn, ôû ñaây choïn cung AB. 
(x, y) 
(y, x) 
(y, x) 
( x, y) (x, y) 
( y, x) 
( y, x) 
( x, y) 
x 
y 
A 
B 
Slide 340 Faculty of Computer Science and Engineering - HCMUT 
Sai soá khi choïn pixel 
Giaû söû coù pixel toát nhaát taïi böôùc thöù i - 1 laø P
i - 1
 = 
(x
i - 1
, y
i - 1
) 
Ñònh nghóa 
 S
i
 = (x
i - 1
 + 1, y
i - 1
) 
 T
i
 = (x
i - 1
 + 1, y
i - 1
 - 1) 
Ñònh nghóa sai soá 
 e(P) = (x
2
 + y
2
) - R
2 
Ñònh nghóa haøm soá quyeát ñònh 
 d
i
 = e(S
i
) + e(T
i
) 
xi 
1 
xi 
yi 1 
Pi 1 Si 
Ti 
Slide 341 Faculty of Computer Science and Engineering - HCMUT 
Qui taéc choïn pixel xaáp xæ toát cung voøng troøn 
 xi 
1 
xi 
yi 1 
Pi 1 Si 
Ti 
Neáu d
i
 < 0 thì choïn S
i 
coøn neáu khoâng thì choïn T
i 
Caàn kieåm tra tính ñuùng ñaén cuûa quy taéc treân! 
Slide 342 Faculty of Computer Science and Engineering - HCMUT 
Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel 
Nhaéc laïi: d
i
 = e(S
i
) + e(T
i
) 
Tröôøng hôïp: d
i
 < 0 (S
i 
gaàn ñöôøng troøn hôn)
Si Si Si 
Ti Ti 
Ti 
e(Si) > 0 
e(Ti) < 0 
e(Si) > 0 
e(Ti) > 0 
e(Si) < 0 
e(Ti) < 0 
OK! OK, vì di < 0 
 S
i
 gaàn ñöôøng troøn hôn
Khoâng theå! 
Slide 343 Faculty of Computer Science and Engineering - HCMUT 
Kieåm tra tính ñuùng ñaén cuûa quy taéc choïn pixel (tieáp) 
Nhaéc laïi: d
i
 = e(S
i
) + e(T
i
) 
Tröôøng hôïp: d
i
 0 (T
i
 gaàn ñöôøng troøn hôn)
Si Si Si 
Ti Ti 
Ti 
e(Si) > 0 
e(Ti) < 0 
e(Si) > 0 
e(Ti) > 0 
e(Si) < 0 
e(Ti) < 0 
Khoâng theå! OK!
OK, vì d
i
 0 
 T
i
 gaàn ñöôøng troøn hôn 
Slide 344 Faculty of Computer Science and Engineering - HCMUT 
Tính haøm soá quyeát ñònh moät caùch höõu hieäu 
Nhaéc laïi: e(P) = (x2 + y2) - R2 
Coù theå chöùng minh ñöôïc (baøi taäp): 
 d
i + 1
 = d
i
 + 4 x
i - 1
 + 6 + 2(y
i
2
 - y
i - 1
2
) - 2(y
i
 - y
i - 1
) 
 Theo quy taéc choïn pixel 
‟ neáu d
i
 < 0 thì ta coù y
i
 = y
i - 1 
, do ñoù choïn T
i
 d
i + 1
 = d
i
 + 4 x
i - 1
 + 6 
‟ neáu khoâng thì y
i
 = y
i - 1
 - 1, do ñoù choïn S
i
 d
i + 1
 = d
i
 + 4(x
i - 1
 - y
i - 1
) + 10 
Giaûi thuaät baét ñaàu nhö theá naøo? 
 x
0
 = 0, y
0
 = R 
 do ñoù S
1
 = (1, R) vaø T
1
 = (1, R - 1), vaäy 
 d
1
=e(S
1
) + e(T
1
) =(1
2
+R
2
-R
2
)+(1
2+
(R-1)
2
-R
2)=
3 - 2R 
Slide 345 Faculty of Computer Science and Engineering - HCMUT 
Giaûi thuaät cuûa Michener 
Bieåu dieãn voøng troøn trong frame buffer 
procedure MichCirc(xc : col; yc : row; Rad : integer; value : color); 
{Veõ voøng troøn coù taâm (xc, yc), baùn kính Rad, vaø maøu value} 
var 
 x : col; 
 y : row; 
 d : integer; 
begin 
 x := 0; y := Rad; 
 d := 3 - 2*Rad; 
Slide 346 Faculty of Computer Science and Engineering - HCMUT 
Giaûi thuaät cuûa Michener (tieáp) 
 while x <= y do begin 
 SetPixel(xc + x, yc + y, value); {draw 8 points } 
 SetPixel(xc - x, yc + y, value); {based on (x, y)} 
 SetPixel(xc + x, yc - y, value); 
 SetPixel(xc - x, yc - y, value); 
 SetPixel(xc + y, yc + x, value); 
 SetPixel(xc - y, yc + x, value); 
 SetPixel(xc + y, yc - x, value); 
 SetPixel(xc - y, yc - x, value); 
 if d < 0 then d := d + 4*x + 6 {update error term} 
 else begin 
 d := d + 4*(x - y) + 10; 
 y := y - 1 
 end; 
 x := x + 1 
 end 
end; {MichCirc} 
Slide 347 Faculty of Computer Science and Engineering - HCMUT 
Ñònh nghóa vuøng 
Ñònh nghóa vuøng baèng pixel 
Ñònh nghóa vuøng baèng ña giaùc 
Slide 348 Faculty of Computer Science and Engineering - HCMUT 
Định nghĩa vùng bằng pixel 
 Dựa trên màu của các pixel 
 Hai cách định nghĩa tính kết nối: 
– 4-connected: 2 điểm ảnh được xem là kết nối nếu 
chúng nằm kề nhau theo chiều ngang hay chiều dọc 
– 8-connected: 2 điểm ảnh được xem là kết nối nếu 
chúng nằm kề nhau theo chiều ngang, chiều dọc hay 
đường chéo 
 Hai cách xác định vùng bởi: 
– Tất cả các điểm ảnh trong vùng có cùng 1 màu, có thể 
có lỗ trống (hole) bên trong. 
– Vùng được xác định bởi các điểm ảnh có cùng màu của 
đường bao quanh, các điểm ảnh bên trong không có 
màu bao, có thể có lỗ trống bên trong 
Slide 349 Faculty of Computer Science and Engineering - HCMUT 
Ví duï 
Slide 350 Faculty of Computer Science and Engineering - HCMUT 
Giải thuật tô màu tràn đệ qui 
 Dùng trong các phần mềm đồ họa 
 Vùng xác định bởi 1 màu và 4-connected 
 Bắt đầu bằng bởi 1 điểm hạt giống (seed) nằm bên trong vùng cần tô 
procedure FloodFill(x : col; y : row; int_color, new_color : color); 
{bắt đầu từ điểm (x,y), đổi từ màu int_color sang new_color} 
begin 
 if GetPixel(x, y) = int_color then 
 begin 
 SetPixel(x, y, new_color); 
 FloodFill(x – 1, y, int_color, new_color); 
 FloodFill(x + 1, y, int_color, new_color); 
 FloodFill(x, y + 1, int_color, new_color); 
 FloodFill(x, y – 1, int_color, new_color); 
 end 
end; 
Slide 351 Faculty of Computer Science and Engineering - HCMUT 
Giải thuật tô màu tràn đệ qui (tt.) 
 Vùng xác định bởi 1 màu và 8-connected 
 Bắt đầu bằng bởi 1 điểm hạt giống (seed) nằm bên trong vùng 
cần tô 
 Thêm: 
 FloodFill(x – 1, y – 1, int_color, new_color); 
 FloodFill(x – 1, y + 1, int_color, new_color); 
 FloodFill(x + 1, y + 1, int_color, new_color); 
 FloodFill(x + 1, y – 1, int_color, new_color); 
. Nhược điểm: 
 - bị lặp lại nhiều lần 
 - dễ bị tràn stack 
Slide 352 Faculty of Computer Science and Engineering - HCMUT 
Giải thuật tô màu tràn đệ qui (tt.) 
 Vùng xác định bởi màu bao và 4-connected 
 Bắt đầu bằng bởi 1 điểm hạt giống (seed) nằm bên trong vùng cần tô 
procedure FloodFill(x : col; y : row; int_color, new_color : color); 
{bắt đầu từ điểm (x,y), đổi từ màu int_color sang new_color} 
begin 
 if (GetPixel(x, y) >< new_color) then 
 begin 
 SetPixel(x, y, new_color); 
 FloodFill(x – 1, y, int_color, new_color); 
 FloodFill(x + 1, y, int_color, new_color); 
 FloodFill(x, y + 1, int_color, new_color); 
 FloodFill(x, y – 1, int_color, new_color); 
 end 
end; 
Slide 353 Faculty of Computer Science and Engineering - HCMUT 
Run of Pixels 
 Giaû thieát caùc pixel laø 4-connected 
 Giaûi thuaät 
 Push address of seed pixel on the stack; 
 while stack not empty do 
 Pop the stack to provide the next seed; 
 Fill in the run defined by the seed; 
 Examine the row above for runs reachable from this run; 
 Push the address of the rightmost pixels of each such 
run; 
 Do the same for the row below the current run; 
 end; 
Slide 354 Faculty of Computer Science and Engineering - HCMUT 
Ví duï 
Slide 355 Faculty of Computer Science and Engineering - HCMUT 
Ví duï 
D 
C 
Slide 356 Faculty of Computer Science and Engineering - HCMUT 
Ví duï 
J 
I 
G 
F 
C 
Slide 357 Faculty of Computer Science and Engineering - HCMUT 
Tô màu vùng đa giác 
Xét từng dòng ngang trên bộ đệm màn hình: 
– Tìm các giao điểm của dòng với tất cả các cạnh của 
đa giác 
– Sắp xếp các giao điểm theo chiều tăng dần giá trị x 
– Tô các điểm ảnh nằm giữa các cặp giao điểm 
Slide 358 Faculty of Computer Science and Engineering - HCMUT 
Tô màu vùng đa giác 
 Cạnh nằm ngang không cần phải xử lý 
 Tính chẵn lẻ không còn đúng khi ở điểm mút không phải là cực trị 
địa phương. 
– Cách giải quyết: dịch điểm đầu mút của một cạnh xuống 1 pixel 
Slide 359 Faculty of Computer Science and Engineering - HCMUT 
Tô màu vùng đa giác 
 Active Edge List (AEL) lợi dụng tính lân cận của cạnh 
– những cạnh cắt bởi scanline y sẽ cắt bởi scanline y+1 
– giá trị x của giao điểm có thể dự đoán trước 
 type 
 edge_ptr = ^edge_info 
 edge_info = record 
 y_upper : row; 
 x_int : real; 
 recip_slope : real; 
 next : egde_ptr; 
 end; 
Slide 360 Faculty of Computer Science and Engineering - HCMUT 
Tô màu vùng đa giác 
 update AEL cho scanline y+1 
– xóa tất cả những cạnh có y_upper < new_y 
– thay đổi x_value bằng cách cộng thêm recip_slope 
– có thể thêm vào cạnh mới có y_lower = new_y 
– thứ tự của giao điểm có thể bị xáo trộn, nên phải sắp 
xếp lại 
Slide 361 Faculty of Computer Science and Engineering - HCMUT 
Tô màu vùng đa giác 
 Xây dựng bảng cạnh: edge_table: array [row] of edge_ptr 

File đính kèm:

  • pdfbai_giang_do_hoa_may_tinh_chuong_1_gioi_thieu_do_hoa_may_tin.pdf