4.13. Định dạng điểm ảnh¶
Giai đoạn cuối của pipeline ISP đóng gói mỗi điểm ảnh thành một bố cục byte cụ thể trong bộ nhớ. Định dạng được chọn cân bằng giữa chất lượng ảnh, kích thước bộ nhớ và cách mã code phía sau đọc lại các byte. Một số định dạng chiếm ưu thế.
4.13.1. RAW (Bayer)¶
Đầu ra mặc định là Bayer thô -- cùng mosaic một kênh-mỗi-điểm-ảnh mà cảm biến tạo ra. Một byte mỗi điểm ảnh, được bố cục theo mẫu Bayer: đỏ và xanh lá xen kẽ trên hàng chẵn, xanh lá và xanh lam xen kẽ trên hàng lẻ. Chưa có quá trình khử Bayer nào được áp dụng, nên mỗi ô vẫn chỉ chứa giá trị mà bộ lọc màu của nó đã lọc qua.
Bayer thô chiếm một phần ba bộ nhớ của ảnh RGB ba kênh hoàn chỉnh -- một byte mỗi điểm ảnh so với ba -- và không tốn chu kỳ ISP để khử Bayer hoặc chuyển đổi. Nhược điểm là mã người dùng phải tự thực hiện khử Bayer trước khi bất kỳ quá trình xử lý màu sắc nào có thể chạy.
4.13.2. RGB888¶
RGB888 là định dạng hoàn chỉnh tự nhiên cho ảnh màu: ba byte mỗi điểm ảnh, một byte cho mỗi kênh đỏ, xanh lá và xanh lam ở 8 bit mỗi kênh. Hai mươi bốn bit mỗi điểm ảnh và gần mười bảy triệu màu sắc riêng biệt.
RGB888 là tham chiếu khái niệm cho ảnh màu hoàn chỉnh và hầu hết phần mềm bên ngoài đều hỗ trợ nó. Trên phần cứng nhúng, nhược điểm chính là kích thước điểm ảnh 24 bit -- không phải bội số của kích thước từ của bộ xử lý, khó căn chỉnh bộ nhớ, và lớn hơn 50% so với định dạng kế tiếp.
4.13.3. RGB565¶
RGB565 đóng gói mỗi điểm ảnh vào hai byte: năm bit đỏ, sáu bit xanh lá, năm bit xanh lam. Bit xanh lá thêm phản ánh độ nhạy cảm cao hơn của mắt với màu xanh lá, và nó khớp với trọng số gấp đôi của kênh xanh lá trong mẫu Bayer.
RGB565 là định dạng màu mặc định trên OpenMV Cam. Hai byte mỗi điểm ảnh được căn chỉnh 16 bit, phù hợp với độ rộng dữ liệu tự nhiên của MCU -- tải, lưu và tính toán điểm ảnh đều chạy ở tốc độ đầy đủ, và nhiều thao tác có thể xử lý một cặp điểm ảnh cùng lúc. Các điểm ảnh 24 bit của RGB888 không căn chỉnh theo cách đó và tốn chi phí trên mỗi lần truy cập. Tiết kiệm bộ nhớ 33% so với RGB888 cũng cộng dồn: QVGA (320 x 240) là 150 KB trong RGB565 so với 225 KB trong RGB888, và khoảng cách tăng theo độ phân giải.
Sự đánh đổi là 65 nghìn màu riêng biệt thay vì mười bảy triệu. Với hầu hết các tác vụ thị giác máy, sự khác biệt là không đáng kể, vì các thuật toán rút gọn khung hình thành các biểu diễn đã phân ngưỡng hoặc phát hiện cạnh vốn đã loại bỏ phần lớn chi tiết màu sắc. Khi xem bằng mắt người, các bit bị thiếu xuất hiện dưới dạng dải màu mờ trong các gradient màu mịn nhưng không đủ để mắt nhận ra ngay.
4.13.4. YUV422¶
YUV422 tách màu sắc của mỗi điểm ảnh thành một giá trị độ sáng (Y) và hai giá trị màu sắc (U và V), rồi lấy mẫu thưa phần màu sắc vì thị giác người kém nhạy cảm hơn nhiều với biến đổi màu so với biến đổi độ sáng. Mỗi điểm ảnh mang Y riêng, nhưng các cặp điểm ảnh liền kề chia sẻ một U và một V. Bố cục byte cho mỗi cặp là bốn byte -- Y0, U, Y1, V -- tương đương trung bình hai byte mỗi điểm ảnh, giống với RGB565.
Tuy nhiên, hai byte này mang ý nghĩa khác với RGB565. Kênh Y đơn thuần đã là ảnh thang xám 8 bit sẵn sàng sử dụng, đây là thứ hầu hết các thuật toán thị giác máy cổ điển (phát hiện cạnh, đối sánh mẫu, phân tích blob) thực sự tiêu thụ; các kênh U và V mang thông tin màu sắc cho số ít thuật toán cần đến nó.
YUV422 là lựa chọn đúng khi pipeline cần cả hai -- một thuật toán giai đoạn đầu chỉ đọc Y tiếp theo là giai đoạn sau sử dụng chroma để đưa ra quyết định màu sắc tinh tế hơn -- vì các giá trị Y đã ở đó sẵn sàng sử dụng mà không cần chuyển đổi không gian màu.
4.13.5. Thang xám¶
Thang xám là một byte mỗi điểm ảnh: chỉ có giá trị độ sáng, hoàn toàn không có màu sắc. Đây là định dạng hoàn chỉnh nhỏ nhất -- một nửa kích thước của RGB565 và YUV422, một phần ba kích thước của RGB888.
Hầu hết các thuật toán thị giác máy cổ điển đều làm việc trên ảnh thang xám, nên việc loại bỏ kênh màu ngay từ cảm biến thường là lựa chọn đơn giản và tiết kiệm bộ nhớ nhất. Phát hiện cạnh, tìm đường thẳng, phân tích blob, giải mã mã QR, đối sánh mẫu và phát hiện AprilTag đều chạy trên ảnh thang xám và được hưởng lợi từ bộ đệm nhỏ hơn.
4.13.6. Các định dạng khác¶
Một số định dạng mà OpenMV Cam có thể tạo ra không đến từ pipeline ISP như một phần của luồng bình thường.
BINARY là một bit mỗi điểm ảnh -- biểu diễn nhỏ nhất có thể. Được dùng cho ảnh đã phân ngưỡng, bộ đệm mặt nạ và đầu ra của bất kỳ thao tác nào chỉ phân biệt giữa khớp và không khớp tại mỗi điểm ảnh.
JPEG là định dạng màu nén. Một số cảm biến tích hợp bộ mã hóa JPEG trên chip và có thể cung cấp khung hình nén JPEG trực tiếp; với cảm biến không có, MCU chạy bộ mã hóa JPEG trên khung hình RGB hoặc thang xám hoàn chỉnh sau ISP. Dù thế nào, đầu ra là một luồng bit JPEG, hữu ích để lưu khung hình vào bộ nhớ hoặc truyền qua liên kết băng thông hạn chế.
PNG là định dạng nén lossless. Cảm biến không tạo ra PNG trực tiếp; MCU nén khung hình RGB hoặc thang xám hoàn chỉnh theo yêu cầu. Hữu ích khi băng thông hoặc dung lượng lưu trữ quan trọng nhưng nén lossy mà JPEG áp dụng sẽ loại bỏ thông tin mà ứng dụng sau này cần.