.Thuật toán đọc giá trị AOT từ điểm thuộc đoạn thẳng được chọn

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống web trực quan hóa, hỗ trợ quản lý và phân tích ảnh viễn thám dựa trên nền tảng mã nguồn mở (Trang 71 - 75)

2.4 .Thuật toán lấy dữ liệu AOT từ vùng chọn trên Google Map

2.4.3 .Thuật toán đọc giá trị AOT từ điểm thuộc đoạn thẳng được chọn

Trong trường hợp người dùng muốn thống kê giá trị AOT trên 1 đoạn thẳng – Polyline trên ảnh viễn thám, với 2 điểm biết tọa độ là điểm đầu và điểm cuối dạng (latitude, longtitude) trên Google Map thì cách thực hiện sẽ khác thuật tốn đọc giá trị theo vùng. Trong đồ họa máy tính thì, 1 đoạn thẳng vẽ qua 2 điểm khơng phải là 1 đoạn thẳng hình học liền nét mà nó cho phép có những điểm gấp khúc. Bởi vì ma trận điểm ảnh khơng có các tọa độ dạng số thập phân (chỉ có số nguyên) nên đoạn thẳng vẽ trên màn hình khi mà phương trình đường thẳng khác y = x là 1 đoạn thẳng gấp khúc.

Hình 2.18. Biểu diễn đoạn thẳng AB trong đồ họa máy tính

Chính vì vậy, ta hồn tồn khơng biết được giữa 2 điểm A, B có bao nhiêu điểm và tọa độ của các điểm đó là gì. Để thực hiện điều này thì có 1 thuật tốn cho phép xây dựng 1 đoạn thẳng đi từ điểm A đến điểm B sao cho các điểm trên đường đi này gần

với phương trình đường thẳng nhất, tên là: thuật toán MidPoint. Khi sử dụng thuật

tốn này thì ta có thể liệt kê ra được các điểm nằm trên đoạn thẳng nối từ A đến B và từ đó lấy ra được các giá trị AOT tại từng điểm tương ứng.

Tư tưởng của thuật toán là: giả sử ta đã biết 2 điểm đầu mút A, B và điểm liền trước P của điểm thứ i hiện tại. Theo Hình 2.19. ta có thể chọn 1 trong 2 điểm liền kề tiếp theo điểm P (xp, yp) là NE hoặc E thông qua sự liên hệ giữa phương trình đường thẳng: f(x) = Ax + By + C = 0 (phương trình đi qua 2 điểm A (x0, y0) và B(xn, yn)) và điểm M (midpoint) có tọa độ M là: (xi + 1, yi + 0.5). Ở đây, các tham số là:

A = dy = yn – y0, B = dx = xn – x0, C = xny0 – x0yn

Tọa độ của 2 điểm sau điểm P để lựa chọn đưa vào đoạn thẳng là: E (xi + 1, yi) và NE (xi + 1, yi +1).

Theo lý thuyết về đồ thị hàm số thì 1 điểm C (xc, yc) bất kỳ có mối liên hệ với 1 phương trình đường thẳng f(x, y) = Ax + By + C = 0 là:

 Nằm bên trên đường thẳng: nếu f(xc, yc) < 0

 Thuộc đường thẳng: nếu f(xc, yc) = 0

 Nằm bên dưới đường thẳng: nếu f(xc, yc) > 0

Hình 2.19. Thuật tốn MidPoint tìm điểm gần với đường thẳng nhất18

Như vậy ta có thể lựa chọn điểm NE hoặc E tiếp theo điểm P dựa vào việc xét dấu của hàm số pi = F(M) = f (xi + 1, yi + 0.5). Ta có 2 trường hợp:

 F(M) <0: tức là M nằm trên phương trình đường thẳng, nên ta chọn E.

 F(M) >= 0: tức là M nằm dưới phương trình đường thẳng, nên ta chọn NE.

Mặt khác, pi + 1 = f(xi + 1 + 1, yi + 1 + 0.5), nên:

pi + 1 – pi = f(xi + 1 + 1, yi +1 + 0.5) – f(xi + 1, yi + 0.5)

= A(xi + 1 + 1) + B(yi + 1 + 0.5) + C – A(xi + 1) – B(yi + 0.5) – C = A(xi + 1 – xi) + B(yi + 1 – yi)

= A + B(yi + 1 – yi) (do xi + 1 – xi = 1) Kết quả là: pi + 1 = pi + A + B(yi + 1 – yi) (*)

Như vậy, ta có cơng thức xét điểm tiếp theo dựa vào điểm trước là (*), nhận xét:

 Nếu pi < 0: chọn E nên yi + 1 = yi. Do đó: pi + 1 = pi + A = pi + dy

 Nếu pi >= 0: chọn NE nên yi + 1 = yi + 1. Do đó: pi + 1 = pi + A + B= pi + dy - dx

Riêng trường hợp tại đầu mút A, ta có:

p1 = f(x1 + 1, y1 + 0.5) = A(x1 + 1) + B(y1 + 0.5) + C = Ax1 + A + By1 + 0.5B + C = A + 0.5B = dy - 0.5dx

(do Ax1 + By1 + C = 0) vì điểm A thuộc phương trình đường thẳng

Nhận xét, ta có ban đầu ở điểm A: d = dy + 0.5dx, để giảm phức tạp tính tốn khi thực hiện phép chia thập phân (0.5dx) thì nhân với 2 (khơng làm đổi dấu), kết quả là:

d = 2dy - dx. Tương tự, dE = pi + dy = pi + 2dy, dNE = pi + dy – dx = pi + 2(dy – dx). Giả mã của thuật toán vẽ đoạn thẳng thuật toán MidPoint là:

void line(int x0, int y0, int xn, int yn)

{

// Thuật toán Bresenham's midpoint

int dx = xn – x0, dy = yn – y0, x, y = 0; int x=x0, y=y0, d=2*dy-dx;

int dE=2*dy, dNE=2*(dy-dx);

// Duyệt từ điểm bắt đầu A đến điểm kết thúc B while (x<xn+1) {

drawpixel(x,y); // vẽ điểm tại vị trí đang xét x++; // xét điểm tiếp theo

if (d<=0) // xét dấu của d để chọn điểm E hoặc NE d+=dE; // chọn điểm tiếp theo là E

else { y++; d+=dNE; }; // chọn điểm tiếp theo là NE }

}

Thuật toán này được áp dụng để thống kê giá trị AOT trên đoạn thẳng cắt các ảnh viễn thám tại nhiều vị trí khác nhau (ứng với từng ảnh) với việc là dùng chương trình Python với đầu vào là ảnh viễn thám, tọa độ 2 điểm của đoạn thẳng. Chương trình sẽ tìm tất cả các điểm thuộc đoạn thẳng này, và lấy ra giá trị AOT, thống kê các dữ liệu

AOT và trả về hàm PHP đã gọi. Số điểm ảnh của ảnh viễn thám MODIS 10km ít hơn nhiều so với số điểm ảnh MODIS 1 km nên khi lập biểu đồ thống kê 2 loại ảnh này có thể thấy sự chênh lệch lớn về số lượng, giá trị AOT tại đoạn thẳng cần thống kê.

2.5. Kết luận

Chương này giới thiệu chi tiết về các công nghệ, kỹ thuật được sử dụng trong việc xây dựng và phát triển hệ thống WebGIS hỗ trợ trực quan hóa, quản lý và phân tích dữ liệu AOT từ ảnh viễn thám MODIS. So với chương 1 là tổng quan về các kiến thức lý thuyết chung thì chương này hướng đến những kiến thức thực tế, kỹ thuật mà được sử dụng để xây dựng các tính năng cho hệ thống. Đây là các kiến thức được tổng hợp lại trong quá trình tìm hiểu và phát triển hệ thống một cách cô đọng và cơ bản nhất, những vấn đề mang tính mới được liệt kê chi tiết, trong khi những vấn đề phổ biến được nêu ra một cách sơ lược. Dựa trên những kiến thức này, tơi sẽ tìm hiểu bài tốn thực tế thơng qua khảo sát, phân tích, đặc tả các chứng năng, xây dựng kiến trúc hệ thống trong chương sau.

Một phần của tài liệu (LUẬN văn THẠC sĩ) xây dựng hệ thống web trực quan hóa, hỗ trợ quản lý và phân tích ảnh viễn thám dựa trên nền tảng mã nguồn mở (Trang 71 - 75)

Tải bản đầy đủ (PDF)

(120 trang)