Tải bản đầy đủ (.pdf) (15 trang)

áp dụng cấu trúc dữ liệu cây nhị phân trên không gian hai chiều và thuật toán tìm kiếm láng giềng gần nhất để đọc ảnh có kích thước lớn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.33 MB, 15 trang )

Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 1




TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA TOÁN – TIN HỌC
BÁO CÁO ĐỀ TÀI
CẤU TRÚC DỮ LIỆU


Nhóm Sinh viên
Trần Giang Nam
0811094

Nguyễn Hồng Quy
0811137

Nguyễn Hoàng Quốc
0811300



Giáo viên hướng dẫn
TS. Phạm Thế Bảo












2010
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 2






ÁP DỤNG CẤU TRÚC DỮ LIỆU CÂY NHỊ PHÂN TRÊN KHÔNG
GIAN HAI CHIỀU VÀ THUẬT TOÁN TÌM KIẾM LÁNG GIỀNG GẦN
NHẤT ĐỂ ĐỌC ẢNH CÓ KÍCH THƯỚC LỚN
1. Giới thiệu
Việc đọc ảnh kích thước là một nhu cầu thiết yếu trong nhiều ngành khoa
học và đời sống hiện nay. Tuy nhiên ta thường gặp nhiều khó khăn trong việc đọc
trực tiếp những bức ảnh kích thước lớn. Ảnh vệ tinh là một ví dụ. Ta biết rằng ảnh

chụp của một vệ tinh về một phần nào đó của một hành tinh hoặc vũ trụ đều là
những ảnh có kích thước rất lớn. Những ảnh này được truyền về mặt đất sau khi
chụp và yêu cầu đầu tiên đặt ra cho những người tiếp nhận là làm sao đọc được nó.
Tất nhiên việc đọc trực tiếp là không thể, vì bộ nhớ của máy có giới hạn rất nhỏ so
với kích thước ảnh. Một ví dụ khác trong xử lý ảnh lớn là các ứng dụng bản đồ trên
mạng (như diadiem.com, googleearth [1]), việc lưu trữ và đọc trực tiếp những bức
ảnh bản đồ lớn bao quát một phần diện tích lớn trên mạng là điều khó khả thi.

Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 3



Hình 1. Bản đồ trên mạng tại trang web www.diadiem.com
Bởi cách đọc trực tiếp gặp nhiều khó khăn, nên yêu cầu phải xây dựng một
cấu trúc dữ liệu (CTDL) đọc ảnh kích thước lớn đã được đặt ra. Đối với một bức
ảnh lớn, thường thì người ta chỉ quan tâm một vùng nào đó trong ảnh, theo đó một
tư tưởng phổ biến trong việc xây dựng CTDL là cắt ảnh thành nhiều ảnh nhỏ hơn,
tổ chức lưu trữ chúng và khi cần xử lý ta sẽ chỉ lấy những bức ảnh thuộc vùng cần
quan tâm lên để xử lý.
Trong bài báo cáo này, chúng tôi sẽ trình bày về CTDL cây nhị phân trên
không gian hai chiều (kd-tree in two dimentions) để lưu trữ hình ảnh và dùng thuật
toán tìm láng giềng gần nhất (Nearest neighbor search) để truy cập tới những bức
ảnh thuộc vùng cần quan tâm. Các thuật toán sẽ được trình bày chi tiết ở dưới.
Phần đánh giá kết quả chúng tôi sẽ chạy chương trình minh họa thuật toán trên một
bức ảnh 10Mb.

2. Ý tưởng chung
Ảnh lớn ban đầu sẽ được cắt thành các ảnh hình vuông nhỏ có kích thước
bằng nhau. Mỗi ảnh nhỏ đó gọi là một ảnh đơn vị. Tiếp đó, ta đánh dấu tọa độ của
các ô vuông nhỏ đó trong bức ảnh lớn. Như vậy là ta đã tiến hành cắt nhỏ tấm ảnh
ban đầu.
Sau khi chia nhỏ ảnh, ta sẽ xây dựng một CTDL để lưu trữ ảnh. CTDL
chúng tôi chọn là CTDL cây nhị phân trên không gian 2 chiều. Mỗi đỉnh trên cây
sẽ tương ứng tọa độ một tấm ảnh đơn vị. Về chi tiết xây dựng cây chúng tôi sẽ
trình bày kỹ ở phần dưới.
Tiếp đó, chúng tôi sẽ tạo một khung nhìn gồm n
2
ô vuông nhỏ (gọi là ô
vuông đơn vị). Mỗi ô vuông đơn vị sẽ tương ứng với một tấm ảnh đơn vị. Khung
nhìn có thể lớn hay nhỏ tùy theo việc chọn n. Khi ta cần xử lý một vùng nào đó của
ảnh lớn, ta chỉ việc tải n
2
tấm ảnh đơn vị thuộc lân cận vùng cần xét lên khung nhìn
để xử lý.
Trong chương trình minh họa, để đơn giản, chúng tôi chọn khung nhìn 3
2
ô
như ở hình 2. Khi muốn xét một tọa độ nào đó trong ảnh lớn, ta sẽ phân tích tọa độ
đó thuộc ảnh đơn vị nào và tải ảnh đó củng 8 ảnh xung quanh lên khung nhìn để xử
lý. Việc tìm tọa độ thuộc ảnh đơn vị nào sẽ được thực hiện bằng thuật toán tìm
kiếm láng giềng gần nhất.
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010




Page 4




Hình 2. Khung nhìn để đọc ảnh
Sau khi tải ảnh lên, ta sẽ có một tấm ảnh ban đầu. Trong khung nhìn sẽ có
một số tọa độ cố định (chấm màu xanh trong hình 2) để làm chuẩn và một con trỏ
đặt ở một vị trì mặc định nào đó, trong trường hợp này con trỏ đặt ở tâm khung
nhìn. Con trỏ này tượng trưng cho tọa độ trong ảnh lớn mà ta muốn quan sát. Khi
ta muốn di chuyển khung nhình tới các vùng khác của ảnh (có 4 thao tác di chuyển
khung nhìn: di chuyển lên, di chuyển xuống,di chuyển sang trái, di chuyển sang
phải), ta chỉ việc thay đổi lại tọa độ con trỏ và tải lại các ảnh tương ứng với con trỏ
mới lên khung nhìn.
3. Xây dựng cây nhị phân trên không gian hai chiều
3.1. Giới thiệu về cây nhị phân trên không gian k chiều
Cây nhị phân trên không gian k chiều [2],[4] (kd tree hay k-dimentions tree)
là một cấu trúc dữ liệu phân hoạch không gian k chiều. Theo đó, mỗi đỉnh của cây
sẽ chia không gian thành hai phần bằng một siêu phẳng k-1 chiều xác định bởi tọa
độ của đỉnh đó và một chiều nào đó trong k chiều. Các chiều dùng để chia thay đổi
tuần tự theo từng cấp của cây.
Về bản chất đây là một cây nhị phân (vì mỗi đỉnh của cây sẽ có tối đa 2
nhánh con tương ứng với hai vùng không gian được chia). Điểm đặc biệt ở đây là
các đỉnh của cây là những điểm phân chia không gian thành nhiều phần. Việc phân
chia không gian như vậy sẽ thuận tiện cho ta trong việc tìm kiếm những điểm trong
cây gần với một điểm nào đó trong vùng không gian nhất. Tức là khi muốn tìm
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010




Page 5



những điểm thuộc cây gần với một điểm nào đó trong không gian ta sẽ dựa trên
một số phép phân hoạch không gian để loại bỏ các vùng không gian không cần
thiết, như vậy sẽ giúp thu hẹp được không gian tìm kiếm.
Để minh họa rõ hơn cho các ý nói ở trên, chúng ta sẽ xét ví dụ với một cây
nhị phân trong không gian hai chiều ở dưới đây. Cây nhị phân trên không gian hai
chiều là một trường hợp của cây nhị phân trên không gian k chiều với k có giá trị là
2.
Trong không gian hai chiều, cho tập hợp các điểm sau: {(2,3), (5,4), (9,6),
(4,7), (8,1), (7,2)}.
Hình ảnh của chúng
trong không gian
được mô tả như hình
bên


Đầu tiên, chúng ta sẽ
phân hoạch không
gian theo chiều x. Ta
chọn (7,2) làm nút ở
cây và chia không
gian thành hai phần,
một phần có tọa độ x
nhỏ hơn 7, phần còn
lại có tọa độ không
nhỏ hơn 7



Tiếp đó, đối với hai
nhánh con của cây,
ta sẽ thực hiện phân
hoạch theo y. Nhánh
bên trái lấy (5,4) làm
nút, nhánh bên phải
lấy (9,6) làm nút.


Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 6



Cứ tiếp tục chia như
thể với x, y lần lượt
đổi vị trí cho nhau
đến khi không còn
chia được nữa, ta sẽ
thu được cây. Khi
đó, các nút lá là các
điểm cô lập thuộc
một vùng không gian
nào đó



Với không gian đã phân hoạch như trên, giả sử, để tìm kiếm một điểm trong
cây gần với một điểm trong không gian nhất, ta dùng một số phép toán để phân
hoạch loại bỏ những vùng không gian không cần thiết. Ví dụ, ta sẽ xét một hình
cầu tâm là điểm trong không gian, bán kính là một khoảng cách từ điểm đó đến
một đỉnh nào đó của đồ thị. Khi đó, ta chỉ cần tìm kiếm những điểm trên các vùng
không gian giao với hình tròn đó mà thôi. Trong quá trình tìm kiếm, nếu gặp điểm
có khoảng cách tốt hơn, thì bán kính của hình cầu sẽ giảm, hình cầu co lại, các
không gian giao với hình cầu sẽ giảm như vậy không gian tìm kiếm sẽ ngày càng
hẹp lại.
Ở hình 3, ta thầy hình tròn chỉ giao hai không gian màu xanh, không giao
các không gian màu nâu nên ta chỉ việc tìm kiếm trên các không gian màu xanh mà
không cần tìm ở không gian màu nâu.

Hình 3. Minh họa đặc trưng tìm kiếm trên không gian của kd tree
Cây nhị phân nhiều chiếu giúp ta có thể lưu trữ ảnh theo các lớp. Theo đó, ta
có thể tổ chức dữ liệu ở nhiều lớp khác nhau phục vụ cho nhiều mục đích, ví dụ
một lớp là ảnh đơn vị lớn, một lớp chứa ảnh đơn vị nhỏ hơn (phục vụ cho thao tác
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 7



phóng to, thu nhỏ ảnh) Do trong khuôn khổ của một đề tài môn học, chúng tôi
chỉ xây dựng cấu trúc dữ liệu đọc ảnh nên chỉ sử dụng cây nhị phân trên không

gian 2 chiều. Tức là chỉ lưu trữ một lớp ảnh để tải ảnh lên để quan sát.
3.2. Các phép toán
Vì cây nhị phân trên không gian hai chiều bản chất là một cây nên nó cũng
có các thao tác tương tự đối với cây như khởi tạo cây, thêm đỉnh, xóa đỉnh, duyệt
cây Điểm khác là mỗi đỉnh lưu trữ một tọa độ trên không gian hai chiều nên ta
phải lưu lại một giá trị chỉ chiều của đỉnh. Ở phần này, chúng tôi chỉ trình bày một
số thao tác mà chúng tôi có sử dụng, các thao tác khác có thể xây dựng dễ dàng
tương tự như ở cây nhị phân thông thường.
3.2.1. Thêm một đỉnh vào cây
Việc thêm một đỉnh vào cây đơn giản giống như ở cây nhị phân tìm kiếm,
nhưng ở đây ta thêm một ràng buộc là những đỉnh ở mức chẵn của thì ta sẽ so sánh
theo y, những đỉnh ở mức lẻ của cây thì ta sẽ so sánh theo x. Ví dụ, với một đỉnh
(a,b) ở mức 3 thì nhánh con trái của nó sẽ chứa các đỉnh có hoành độ x nhỏ hơn a,
và nhánh con phải của nó sẽ chứa các đỉnh có hoành độ x không nhỏ hơn a.
3.2.2. Tạo cây
Để có được cây nhị phân trong không gian hai chiều. ta lần lượt thêm các
đỉnh vào cây. Nhưng việc thêm lần lượt hoặc bất kỳ các đỉnh vào cây dẫn tới một
việc là cây sẽ bị mất tính chất cân bằng dẫn đến việc truy xuất dữ liệu, điển hình là
hành vi tìm làng giềng gần nhất sẽ tốn một chi phí cao hơn và tính chất hiệu quả
của cây bị giảm đi.
Vì vậy người ta đề xuất phương pháp chọn trung vị để thêm lần lượt vào cây
để đảm bảo tính cân bằng của cây. Trung vị là điểm có vị trí sao cho có thể chia
cây thành hai phần có số đỉnh chênh lệch thấp nhất.
Để rõ hơn, ta sẽ xét bộ dữ liệu sau {(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)}
Đầu tiên, ta sắp xếp theo x: {(2,3), (4,7), (5,4), (7,2), (8,1), (9,6)}, sau đó ta
phân chia tập hợp hành hai nhánh, lấy phần tử (7,2) làm gốc. Vì chọn (7,2) sẽ làm
cho 2 nhánh con có độ chênh lệch ít nhất.
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010




Page 8




Để ý thấy những điểm có x lớn hơn 7 sẽ được xếp bên phải, những điểm có
giá trị x nhỏ hơn 7 sẽ được xếp bên trái. Ta chon ra những phần tử là trung vị của
mỗi phần để thêm vào cây, trường hợp ví dụ này thì trung vị của nhánh trái sẽ là
(5,4) và trung vị của nhánh phải sẽ là (9,6).

Sau đó, lặp lại tương tự với mỗi nhánh với vai trò của x và y lần lượt thay
đổi cho nhau và tiếp tục lấy các trung vị.
Số lượng các đỉnh được chèn vào sẽ tăng theo dãy số cộng lũy thừa sau:
Added_Đỉnh= 2
0
+2
1
+2
2
+…+2
k
với k là số bước lập
Tiếp tục như thế cho đến khi cây được xây dựng xong.
3.2.3. Cấu trúc lưu trữ cây
Để lưu trữ cây, chúng tôi xây dựng cấu trúc tại mỗi đỉnh như hình dưới:
Trong đó, data là dữ liệu lưu trữ tọa độ của mỗi node, axis miêu tả vùng
không gian của toàn bộ các node là node con của node đó, level miêu tả mức của
node trong cây.



Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 9



struct area {
int xmax,ymax,xmin,ymin;
};
struct location{
int x,y;
};
struct Node {
location Data;
area axis;
int level;
Node *Left;
Node *Right;
} ;
struct KDTree {
Node *Root;
};
3.3. Dùng cây nhị phân trên không gian hai chiều để lưu trữ ảnh
Từ những ảnh đơn vị, ta tiến hành dùng phép toán tạo cây để lần lượt thêm
các ảnh đơn vị vào cây. Mội đỉnh của cây sẽ chứa tọa độ và con trỏ trỏ đến địa chỉ

của ảnh đơn vị tương ứng.
Do đối với một ảnh lớn sẽ có rất nhiều ảnh đơn vị nên việc xây dựng cây sẽ
tốn khá nhiều thời gian. Tuy nhiên đây chỉ là bước chuẩn bị nên thời gian có thể
không cần quan tâm lắm. Việc cần quan tâm là làm sao để truy cập nhanh đến
những vùng ảnh mà ta quan tâm. Chúng ta sẽ dùng thuật tóa tìm kiếm láng giềng
gần nhất để thực hiện công việc đó.
4. Thuật toán tìm kiếm láng giềng gần nhất
Đối với cây nhị phân k chiều, ta cần quan tâm tới việc với một điểm trong
không gian (điểm tìm kiếm) thì node nào trong cây có khoảng cách tới nó là gần
nhất. Thuật toán tìm láng giềng gần nhất sẽ được sử dụng để giải quyết vấn đề này.
Thuật toán sẽ có hiệu quả nhanh chóng bằng cách sử dụng tính chất của cây để loại
bỏ phần lớn không gian tìm kiếm.
Thuật toán được chúng tôi tham khảo tại [3], [4] và được sử dụng như sau :
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 10



Bước 1: Bắt đầu từ node gốc, thuật toán sẽ xét hai nhánh con của node gốc,
sau đó so sánh khoảng cách 2 node con đến điểm cần tìm láng giềng, thuật toán sẽ
duyệt xuống node nào có khoảng cách tới điểm cần tìm gần hơn.
Trong quá trình tìm xét tới một node nào đó, thuật toán sẽ so sánh độ dài từ
điểm tỉm kiếm đến node đó. Nếu độ dài này là nhỏ nhất tới thời điểm hiện tại thì sẽ
cập nhất lưu node đó thành điểm gần nhất tạm thời.
Bước 2: Thực hiện bước 1 cho tới khi gặp một node lá thì dừng lại. Khi đó
ta sẽ có một điểm gần nhất ứng với toàn bộ phần đã duyệt.

Bước 3: Thự hiện dò ngược lại cây(bung đệ quy với các node còn lại được
so sánh khoảng cách lớn hơn) với các bước sau :
1. Nếu node đang xét có khoảng cách tới điểm tìm kiểm là nhỏ nhất
hiện tại thì cập nhật nó là điểm gần nhất.
2. Thuật toán sẽ tìm kiếm trong các phần còn lại của không gian bị
chia cắt (các nhánh còn lại của cây) có node nào của cây có khoảng cách tới điểm
đang xét là gần nhất hiện thời hay không. Thực hiện bằng cách xét quả cầu có tâm
là điểm tìm kiếm, bán kính là khoảng cách gần nhất hiện thời xem nó có giao với
các không gian bị chia cắt nào không rồi tiến hành so sánh với các điểm trong miền
không gian đó.
1. Đối với mỗi mặt phẳng giao với quả cầu, ta thực hiện duyệt
phần nhánh con tương ứng với mặt phẳng đó.
2. Đối với các nhánh không cắt quả cầu, thuật toán sẽ bỏ qua
nhánh đó.
Bước 4: khi quá trình duyệt quay trở về node gốc, thuật toán kết thúc.
Mở rộng: tìm N điểm gần nhất.
Trong trường hợp muốn tìm N node gần điểm tìm kiếm nhất, chúng ta có
nhiều cách dựa trên thuật toán tìm láng giềng gần nhất đã được trình bày phía trên,
ở đây chúng tôi đề xuất cải tiến thuật toán như sau: Trong quá trình tìm kiếm, khi
đã tìm được láng giềng gần nhất ta tiến hành bung độ lớn của bán kính vòng tròn
để tìm và đánh dấu những điểm được cho là gần nhất tiếp theo điểm đã tìm được.
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 11




Để cho rõ hơn, chúng ta hãy quan sát minh họa ở hình 4. Quan sát hình 4.1,
đây là quá trình thực hiện bước 1 và 2 của thuật toán. Điểm màu xanh là điểm
trong không gian mà chúng ta đang xét, các điểm còn lại là các điểm của cây. Quan
sát theo chiều từ trái sang phải, từ trên xuống dưới. Thuật toán thực hiện theo mỗi
bước sẽ chọn một vùng không gian thuộc một trong hai nhánh của cây để xét. Ta
thấy cứ sau mỗi bước vùng không gian tìm kiếm được giảm đi một nửa. Không
gian cứ giảm như thế cho đến khi không giảm được nữa (gặp nốt lá). Trường hợp ở
hình 4.1, không gian sau cùng chỉ gồm 2 đỉnh. Khi đó ta sẽ tìm trong không gian
đó một đỉnh gần với đỉnh cần xét nhất (đỉnh màu đỏ). Nhưng đỉnh tìm được đó
chưa chắc là đỉnh gần nhất vì trong quá tình tìm kiếm ta đã loại bỏ khá nhiều
không gian. Bởi vậy ta phải tìm kiếm trong những vùng không gian đã bị loại bỏ
có điểm nào tốt hơn không. Tuy nhiên, để tránh việc tìm hết tất cả các vùng không
gian, ta chỉ tìm ở những vùng không gian giao với hình tròn tâm là điểm tìm đang
xét, bán kính là khoảng cách giữa điểm đó với đỉnh trong đồ thị mà ta vừa tìm
được (hình tròn màu xanh hình dưới). Theo đó, ta tiến hành bước ba như trong
hình 4.2.






Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 12







Hình 4.1. Minh họa bước 1,2 thuật toán tìm kiếm láng giềng gấn nhất
Ở hình 4.2, ta thấy thuật toán bắt đầu duyệt lại các nhánh đã bỏ đi, ta thấy ở
đây những điểm thuộc vùng không gian nào giao với hình tròn sẽ được biểu thị
bằng màu đỏ. Thuật toán chỉ tìm kiếm trên những điểm đó để phát hiện ra những
điểm tối ưu. Quan sát theo quá trình thực hiện ta thấy các điểm tối ưu sẽ được cập
nhật mới và vòng tròn sẽ ngày càng nhỏ hơn. Đối với những vùng không gian
không giao với hình tròn, chúng ta sẽ bỏ qua luôn mà không xét tới (vùng tô màu
xanh). Ta thấy ở hình cuối cùng, vùng màu xanh rất lớn trong khi những điểm màu
đỏ rất ít tức là ta đã thu hẹp không gian tìm kiếm rất nhiều.






Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 13










cứ tiếp tục xét các miền còn lại ta được các hình sau cùng



Hình 4.2. Minh họa bước 3 thuật toán tìm kiếm láng giềng gấn nhất
Vùng màu xanh là những vùng được loại bỏ vì không gia với hình tròn
Điểm màu đỏ là những điểm nằm trong vùng không gian giao với hình tròn
Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 14



5. Đánh giá kết quả và hướng phát triển

Trên đây là giao diện phần code minh họa cho thuật toán. Chương trình sẽ
đọc một phần ảnh lớn lên và tiến hành di chuyển khung nhìn dọc theo ảnh khi
người dùng thao tác. Để bít thêm chi tiết các bạn vui lòng tham khảo báo cáo chi
tiết trong tài liệu kèm theo.
Ưu điểm: thuật toán tìm kiếm láng giềng gần nhất chạy khá nhanh trên bộ
dữ liệu của chúng tôi.
Hạn chế: do thời gian thực hiện có hạn ,chưa được học và nắm vững về môi
trường lập trình trên window nên việc kiểm soát thời gian thực thi và chi phí bộ

nhớ chưa được tối ưu và ổn định. Bên cạnh đó do không có nhiều bộ dữ liệu mẫu
nên việc chúng tôi chưa đánh giá được thuật toán khi chạy với các dữ liệu rất lớn.
Hướng phát triển: xây dựng thêm nhiều lớp bằng việc xây dựng nhiều tầng
cây để phục vụ cho việc zoom hình ảnh.
Load ảnh .png để có dung lượng nhẹ hơn.
Sử dụng con trỏ chuột linh động bằng các công cụ hỗ trợ của phần
mềm lập trình window để thay đổi giá trị con trỏ một cách tự do.
Xây dựng cây kd-tree đa chiều để xây dựng nhiều lớp khác nhau cho
bản đồ, ví dụ các lớp ghi chú, tên địa điểm hoặc tìm đường đi trên bản đồ.

Cấu trúc dữ liệu đọc ảnh kích thước lớn
2010



Page 15



6. Tài liệu tham khảo
[1] Một số địa chỉ trên mạng ứng dụng ảnh lớn:

Bức ảnh chụp Hà Nội ghép từ 1000 tấm ảnh nhỏ

Trang web bản đồ thành phố

Ứng dụng mô phỏng hành tinh của google

[2] Andrew W.Moore, An introductory tutorial on kd-tree, Carnegie Mellon University,
Canada.


[3] Robert F. Sproull, Refinements to Nearest-Neighbor Searching in k-Dimensional
Trees

[4] Một số demo của kd tree




×