á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
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. [...]... 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 Page 13 Cấu trúc dữ liệu đọc ảnh kích thước lớn 2010 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... hành bước ba như trong hình 4.2 Page 11 Cấu trúc dữ liệu đọc ảnh kích thước lớn 2010 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.. .Cấu trúc dữ liệu đọc ảnh kích thước lớn 2010 Để 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 đã... 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... 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 đồ Page 14 Cấu trúc dữ liệu đọc ảnh kích thước lớn 2010 6 Tài liệu tham khảo [1] Một số địa chỉ trên mạng ứng dụng ảnh lớn: http://www.hanoi1000.vn/ Bức ảnh chụp Hà Nội ghép từ 1000 tấm ảnh nhỏ http://www.diadiem.com/vn/ Trang web bản đồ... 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 Page 12 Cấu trúc dữ liệu đọc ảnh kích thước lớn 2010 cứ tiếp tục xét các miền còn... 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. .. 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... địa chỉ trên mạng ứng dụng ảnh lớn: http://www.hanoi1000.vn/ Bức ảnh chụp Hà Nội ghép từ 1000 tấm ảnh nhỏ http://www.diadiem.com/vn/ Trang web bản đồ thành phố http://www.google.com/earth/index.html Ứ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 . 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. 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, . 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