5.2. Tọa độ và vùng¶
Xử lý ảnh thao tác trên các điểm ảnh, và để thao tác trên một điểm ảnh, thuật toán cần định địa chỉ của nó theo tọa độ. Để thao tác trên một hình chữ nhật các điểm ảnh cũng vậy -- hình chữ nhật phải được mô tả theo cách mà thuật toán và mã ứng dụng đều hiểu nhất quán. Quy ước mà mô-đun image sử dụng cho tọa độ và hình chữ nhật rất đơn giản, với một chi tiết dễ gây nhầm lẫn cho những người quen với quy ước toán học thay vì quy ước đồ họa máy tính, và điều đó đáng được nói rõ ngay từ đầu.
5.2.1. Lưới điểm ảnh¶
Điểm ảnh (0, 0) là góc trên-bên trái của ảnh. Trục x chạy sang phải, nên x lớn hơn nghĩa là càng về bên phải. Trục y chạy xuống dưới, nên y lớn hơn nghĩa là càng xuống phía dưới ảnh. Một ảnh có kích thước width x height chứa các điểm ảnh tại tọa độ nguyên từ (0, 0) đến (width - 1, height - 1); không có điểm ảnh tại (width, 0) hay (0, height) -- những vị trí đó là cạnh phải và cạnh dưới, một bước vượt qua điểm ảnh thực cuối cùng theo mỗi hướng.
Trục y hướng xuống là chi tiết đã đề cập ở trên. Người quen với hình học trên giấy kẻ ô mong đợi y lớn hơn nghĩa là cao hơn; ở đây, trực giác đó bị đảo ngược hoàn toàn. Lý do đảo ngược là cả cảm biến kỹ thuật số và màn hình kỹ thuật số đều hoạt động từ góc trên-bên trái và duyệt sang phải qua từng hàng, từ trên xuống dưới, và việc lưu các điểm ảnh trong bộ nhớ theo cùng thứ tự đó giúp mối quan hệ giữa "vị trí i trong bộ đệm" và "hàng r, cột c của ảnh" trở thành một phép tính số học đơn giản nhất có thể -- vị trí i của điểm ảnh (x, y) chỉ là y * width + x. Mọi thư viện xử lý ảnh đã đồng thuận với cách sắp xếp đó từ hàng thập kỷ trước vì lý do tương tự, và cái giá phải trả là một sự điều chỉnh tư duy nhỏ khi lần đầu làm việc với ảnh.
Hệ tọa độ ảnh: gốc tọa độ ở góc trên-bên trái, x chạy sang phải, y chạy xuống dưới. Một vùng hình chữ nhật bên trong ảnh được đặt tên bởi góc trên-bên trái (x, y) và kích thước (w, h).¶
5.2.2. Hình chữ nhật¶
Hầu hết các thao tác trên ảnh quan tâm ít hơn đến một điểm ảnh đơn lẻ mà nhiều hơn đến một hình chữ nhật các điểm ảnh -- một vùng để tìm kiếm, một vùng để sao chép, một khung trong khung hình để tính toán thống kê. Cách đặt tên cho một hình chữ nhật chọn phần mở rộng đơn giản nhất có thể của quy ước điểm ảnh đơn: cho tọa độ góc trên-bên trái, theo sau là kích thước của hình chữ nhật, đóng gói thành một bộ bốn phần tử (x, y, w, h). Các điểm ảnh bên trong hình chữ nhật nằm ở các cột x đến x + w - 1 và các hàng y đến y + h - 1.
Chi tiết đáng được nói rõ ở đây là w và h là kích thước, không phải tọa độ góc dưới-bên phải. Hình chữ nhật (10, 20, 4, 3) bao phủ các cột 10, 11, 12, 13 và các hàng 20, 21, 22 -- mười hai điểm ảnh tất cả -- không phải một vùng chạy từ (10, 20) đến (4, 3). Quy ước này nhất quán trong toàn bộ mô-đun, vì vậy một khi đã nắm vững thì các sai sót sẽ không còn, nhưng nó vẫn bắt gặp nhiều người lần đầu tiên.
Dạng (x, y, w, h) xuất hiện ở ba nơi có vẻ khác nhau nhưng cùng chung quy ước. Thứ nhất là khi một ảnh mô tả vùng bao phủ của chính nó: hình chữ nhật bao phủ toàn bộ ảnh là (0, 0, width, height). Thứ hai là khi một phương thức phát hiện trả về kết quả với hộp giới hạn -- một blob, một rect, một apriltag -- và hộp được báo cáo lại dưới dạng (x, y, w, h). Thứ ba là khi một phương thức phải được chỉ định làm việc trên một vùng phụ của ảnh thay vì toàn bộ khung hình; đối số từ khóa roi giới hạn phạm vi thao tác nhận cùng bộ bốn phần tử đó.
Lấy hộp giới hạn từ một phương thức và đưa vào đối số roi của phương thức tiếp theo là một trong những mẫu phổ biến nhất trong xử lý ảnh. Hộp giới hạn của một lần phát hiện thô đầu tiên thu hẹp vùng tìm kiếm cho lần phát hiện tinh hơn thứ hai, và từ vựng thống nhất giữa kết quả phát hiện và đối số phương thức là điều làm cho mẫu đó trở nên đơn giản -- một dạng bộ, được sử dụng cùng một cách ở cả hai phía của quá trình truyền kết quả.
5.2.3. Địa chỉ nguyên, tâm phân số¶
Địa chỉ điểm ảnh bản thân là số nguyên. Một điểm ảnh hoặc có hoặc không có tại một cột và hàng nguyên cho trước, và hỏi có gì tại tọa độ (40.5, 30.7) là một câu hỏi không hợp lệ -- không có điểm ảnh nào nằm chính xác tại vị trí đó. Tuy nhiên, một số đại lượng mà mô-đun image suy ra từ vị trí điểm ảnh là số thập phân, và điều đáng hiểu là lý do tại sao để sự phân biệt này không gây bất ngờ cho ứng dụng về sau.
Trường hợp phổ biến nhất là tâm khối -- trung tâm khối lượng của một vùng. Đối với một vùng liền kề các điểm ảnh, tâm khối dưới dạng số thực là trung bình vị trí của các điểm ảnh thành viên, có trọng số theo mật độ của chúng. Một vùng có các điểm ảnh nằm giữa hai cột sẽ có tâm khối x là, chẳng hạn, 41.6 -- một vị trí thực mà mắt mô tả là "chính giữa của vùng đó" mặc dù không có điểm ảnh thực sự nào nằm chính xác tại x đó. Các đối tượng kết quả phát hiện mang cả hai dạng dưới dạng thuộc tính chỉ đọc: một cặp số nguyên (cx / cy, hữu ích khi đưa vị trí trở lại thứ gì đó yêu cầu tọa độ điểm ảnh nguyên) và một cặp số thực (cxf / cyf, hữu ích khi vị trí đang đi vào một vòng điều khiển được hưởng lợi từ độ phân giải dưới điểm ảnh).
Trường hợp khác là dịch chuyển giữa hai khung hình được đo trong miền tần số. Các kỹ thuật phân tích nội dung phổ của ảnh thay vì trực tiếp các điểm ảnh có thể phân giải các dịch chuyển nhỏ hơn một điểm ảnh, và chúng báo cáo các dịch chuyển đó dưới dạng giá trị (dx, dy) số thực.
Nguyên tắc chung: địa chỉ điểm ảnh là số nguyên; các vị trí và dịch chuyển ra từ thuật toán có thể là số thực. Các phương thức vẽ chấp nhận cả hai dạng và làm tròn số thực xuống điểm ảnh nguyên gần nhất khi kết quả phải nằm trên lưới.
5.2.4. Đề-các và cực¶
Hệ thống được mô tả cho đến nay là Đề-các: mỗi điểm ảnh được đặt tên bởi độ lệch ngang và dọc từ gốc tọa độ. Đây là hệ thống mà các byte được lưu trữ trong đó -- điểm ảnh i trong bộ đệm tương ứng với điểm ảnh tại cột i % width và hàng i // width, duyệt các hàng từ trên xuống -- và đây là hệ thống mà mọi phương thức hoạt động theo mặc định.
Một biểu diễn thứ hai đáng biết vì một số thuật toán hoạt động tốt hơn nhiều trong đó. Tọa độ cực đặt tên cho mỗi điểm ảnh bởi khoảng cách của nó từ một điểm tâm được chọn và góc giữa nó và một hướng tham chiếu. Các điểm ảnh của ảnh không di chuyển -- các byte vẫn ở trong cùng bộ đệm theo hàng -- nhưng sơ đồ địa chỉ đã chuyển từ "cách bao xa sang phải và cách bao xa xuống dưới" sang "cách bao xa từ tâm và ở góc nào xung quanh nó".
Cùng một điểm P, được đặt tên theo hai cách: Đề-các (x, y) từ gốc tọa độ trên-bên trái, cực (r, theta) từ một tâm được chọn.¶
Tại sao phải chuyển đổi? Vì hai đồng nhất thức biến các tìm kiếm khó thành các tìm kiếm dễ.
Trong tọa độ cực, xoay ảnh quanh tâm được chọn là cùng thao tác như tịnh tiến các điểm ảnh của nó dọc theo trục góc -- hướng x trong ảnh được chiếu lại. Bản sao đã xoay là bản gốc dịch chuyển sang trái hoặc phải trong dạng cực.
Trong biến thể log-cực -- trục khoảng cách sử dụng thang logarithm, trục góc vẫn tuyến tính -- chia tỷ lệ ảnh quanh tâm được chọn là cùng thao tác như tịnh tiến các điểm ảnh của nó dọc theo trục khoảng cách -- hướng y. Bản sao đã chia tỷ lệ là bản gốc dịch chuyển lên hoặc xuống trong dạng log-cực.
Vì vậy, một thuật toán phải nhận dạng một mẫu đã biết dưới phép xoay hoặc chia tỷ lệ có thể thực hiện tìm kiếm trong không gian cực, nơi cả hai biến đổi đều trở thành các phép tịnh tiến thông thường. Phép tịnh tiến rẻ hơn nhiều để tìm kiếm so với phép xoay và chia tỷ lệ, và chiếu lại cực là điều làm cho sự thay thế đó khả dụng.
Tọa độ cực không thay thế tọa độ Đề-các để lưu trữ điểm ảnh; các byte luôn nằm trên lưới Đề-các. Mô-đun cung cấp một cặp phương thức chiếu lại ảnh từ dạng Đề-các sang dạng cực theo yêu cầu, thuật toán cần tọa độ cực thực hiện công việc của nó, và kết quả hoặc được chiếu trở lại hoặc phép đo trong không gian cực được sử dụng trực tiếp. Cơ chế đó là lý do duy nhất tọa độ cực xuất hiện ở bất kỳ đâu trong giao diện của mô-đun.
Với tọa độ Đề-các để đặt tên từng điểm ảnh, bộ bốn phần tử (x, y, w, h) để đặt tên các hình chữ nhật chứa chúng, và tọa độ cực có sẵn khi một thuật toán được hưởng lợi từ chúng, một ứng dụng có đầy đủ từ vựng để đặt tên vị trí trong ảnh của một thứ gì đó. Những gì thực sự được lưu trữ tại bất kỳ vị trí nào trong số đó là lớp nền tiếp theo.