- Một thử nghiệm cho thấy theo từng bước dữ liệu RAW từ cảm biến của máy ảnh số được ghi lại dưới dạng nào
- Dữ liệu ban đầu là đầu ra ADC 14-bit được ánh xạ đơn giản sang RGB 0–255 dưới dạng thang độ xám, nên dải độ sáng thực tế bị giới hạn
- Áp dụng bộ lọc Bayer để phản ánh thông tin bộ lọc màu của từng pixel, rồi thực hiện demosaicing bằng cách lấy trung bình các pixel lân cận
- Trải qua các bước hiệu chỉnh gamma và điều chỉnh cân bằng trắng để bù khác biệt về nhận thức độ sáng phi tuyến giữa thị giác con người và màn hình hiển thị
- Cuối cùng, khi so sánh với quá trình xử lý JPEG bên trong máy ảnh, bài viết cho thấy về thực chất không hề tồn tại khái niệm “ảnh chưa qua hiệu chỉnh”
Trạng thái ban đầu của dữ liệu RAW từ cảm biến
- Dữ liệu gốc do cảm biến máy ảnh ghi lại gồm các giá trị ADC 14-bit; nếu chuyển đổi đơn giản sang RGB 0–255 thì sẽ thành ảnh thang độ xám
- Phạm vi giá trị ADC thực tế vào khoảng 2110~13600, và khoảng này được đặt làm chuẩn đen trắng để điều chỉnh lại độ sáng
- Ảnh ở giai đoạn này hầu như không có thông tin màu, vì cảm biến chỉ đo cường độ ánh sáng
Quá trình khôi phục thông tin màu sắc
- Cảm biến máy ảnh màu phát hiện chỉ một trong ba màu đỏ, xanh lá hoặc xanh dương ở mỗi pixel thông qua mảng bộ lọc Bayer
- Khi tô màu theo bộ lọc màu của từng pixel, ảnh bắt đầu có màu, nhưng mỗi pixel vẫn chỉ có một trong ba thành phần RGB
- Khi lấy trung bình giá trị của các pixel lân cận để thực hiện demosaicing, màu sắc được khôi phục trên toàn bộ ảnh
Độ sáng và hiệu chỉnh gamma
- Lý do ảnh kết quả trông tối là do giới hạn dải động của màn hình và nhận thức độ sáng phi tuyến của thị giác con người
- Nếu hiển thị trực tiếp dữ liệu tuyến tính, ảnh sẽ trông tối, nên cần áp dụng đường cong gamma phi tuyến để làm sáng các vùng tối
- Tuy nhiên trong quá trình này xuất hiện hiện tượng kênh xanh lá bị dư thừa, do độ nhạy với xanh lá của cảm biến và tỷ trọng màu xanh lá trong mảng Bayer
Cân bằng trắng và hiệu chỉnh màu
- Điều chỉnh từng kênh màu theo một tỷ lệ nhất định để thiết lập cân bằng trắng
- Quay lại giai đoạn trước biến đổi phi tuyến, giảm kênh xanh lá rồi áp dụng lại đường cong gamma
- Qua quá trình này, ảnh đạt được màu sắc tự nhiên
So sánh với quá trình xử lý JPEG của máy ảnh
- Ảnh JPEG tích hợp mà máy ảnh tạo ra từ cùng một dữ liệu RAW đã là kết quả của nhiều bước hiệu chỉnh toán học
- Việc chỉnh tương phản hay cân bằng trắng trong phần mềm biên tập về bản chất là cùng một loại phép toán như xử lý bên trong máy ảnh
- Trên thực tế không tồn tại khái niệm “ảnh chưa qua chỉnh sửa”; mọi bức ảnh đều là kết quả của xử lý toán học
- Rất khó tái hiện hoàn hảo thị giác con người, và do giới hạn của màn hình hiển thị, nhu cầu hiệu chỉnh thủ công luôn tồn tại
1 bình luận
Ý kiến trên Hacker News
Tôi băn khoăn liệu việc áp cùng một hàm truyền lên mọi pixel có nên được xem là ‘xử lý’ hay không
Thời chụp phim, nếu đẩy film đen trắng ISO 400 lên 1600 thì sẽ xuất hiện hạt thô, nhưng đó là loại ‘nhiễu’ đồng đều trên toàn bộ bức ảnh
Ngày nay khử nhiễu đã tiến bộ đến mức đáng kinh ngạc, nhưng trong quá trình đó đôi khi chính hình ảnh bị biến dạng
Ví dụ, camera IP của tôi khi tôi đạp xe vào thì đôi lúc một phần bánh xe biến mất. Thuật toán đã nhầm kết cấu mặt đường nhựa là nhiễu rồi xóa nó đi
Điện thoại thông minh hay máy ảnh số bây giờ nếu phóng to hoặc chụp trong điều kiện thiếu sáng thì khuôn mặt sẽ trông như ‘tranh vẽ’
Tôi thà có nhiễu trung thực hơn, hoặc một thuật toán khử nhiễu có thể điều chỉnh từ ‘không có’ đến mức mặc định hiện tại
Tôi thích những bài viết bóc tách các tầng trừu tượng của ‘hình ảnh’. Rốt cuộc nhiếp ảnh hiện đại chỉ là xử lý tín hiệu cộng thêm marketing
Lý do Bayer pattern là RGGB (50% màu xanh lá) không chỉ vì cân bằng màu mà còn vì độ phân giải không gian
Mắt người nhạy nhất với ánh sáng xanh lá, nên kênh xanh lá đảm nhận phần lớn độ sáng (chi tiết)
Các thuật toán demosaicing cao cấp tạo ra một bản đồ độ chói độ phân giải cao từ kênh xanh lá, rồi nội suy đỏ và xanh dương thành các lớp sai khác màu
Chính nguyên lý này cũng làm cho các chuẩn nén video như chroma subsampling 4:2:0 trở nên khả thi
Nếu muốn tìm hiểu sâu hơn thì tôi khuyên nên xem mã nguồn của dcraw hoặc libraw. Có vô số xử lý ngoại lệ để diễn giải ‘điện áp raw’ cho từng hãng cảm biến khác nhau
g = .299r + .587g + .114bTỷ lệ này quyết định độ sáng của ảnh thang độ xám
Và đoạn thơ được trích dẫn ở đó cũng rất ấn tượng — nó mô tả một thế giới đã mất màu, đồng thời châm biếm việc thứ chúng ta cho là ‘đúng’ rốt cuộc chỉ là lỗi lượng tử hóa
Chuyện đó lẽ ra chỉ cần thêm một cờ chuyển đổi RGB→độ chói vào lệnh gọi FFmpeg là xong
Dĩ nhiên là vì mắt người nhạy với màu xanh lá hơn, nhưng dù vậy vẫn thấy có gì đó không hợp lý (⩺_⩹)
Bản thân JPEG mà máy ảnh tạo ra đã là kết quả được xử lý rất mạnh rồi
Việc áp các đường cong, mapping, hay tham số hiệu chỉnh khác nhau để tạo ra một JPEG khác không phải là ‘ngụy tạo’, mà chỉ là một cách diễn giải khác mà thôi
Tôi làm việc liên quan đến cảm biến máy ảnh, và tôi nghĩ bài này rất phù hợp để đào tạo nhân viên mới
Nếu cho thấy quy trình bắt đầu từ dữ liệu RAW rồi đi tới đầu ra quen thuộc thì sẽ rất dễ hiểu
Chỉ ra một lỗi gõ nhỏ: nên dùng “than” thay vì “then”
Hồi đại học tôi học viễn thám (remote sensing) và từ đó mới thực sự hiểu cảm biến và xử lý tín hiệu
Thứ tôi nhìn thấy không phải ‘sự thật’ mà là một góc nhìn (view) từng phần của dữ liệu
Mắt người, mắt mèo và máy ảnh mỗi thứ thu thập và biểu diễn một tập con dữ liệu khác nhau
Nếu xem không gian và thời gian là những chiều bổ sung của tín hiệu thì còn thú vị hơn nữa
Cuối cùng khiến tôi nghĩ rằng tất cả chúng ta chỉ là những hệ thống cảm biến đang quan sát một phần của vũ trụ
Trong nhiếp ảnh số, nén dải tương phản động và debayering là bắt buộc,
nhưng ngược lại, việc AI nhận diện sự vật rồi tái tạo ảnh theo kiểu huyễn tưởng như thể “nó phải như thế này” lại là một chuyện khác
Các nhà sản xuất đang đẩy theo hướng đó, gây ra những vấn đề như độ tin cậy của ảnh làm bằng chứng
Mọi hình ảnh đều là cách diễn giải dữ liệu và là kết quả của vô số lựa chọn
Nếu buộc phải phân biệt thì có thể chia thành chỉnh sửa toàn cục (global) và chỉnh sửa cục bộ (local), trong đó chỉnh sửa cục bộ có lẽ gần với ‘giả’ hơn
Nhưng rốt cuộc điều cốt lõi là ý đồ (intent)
Nếu có ý định đánh lừa, thì ngay cả một bức ảnh vừa ra trực tiếp từ máy ảnh cũng có thể là ‘giả’
Hầu hết mọi người xem việc áp filter là ‘giả’, nhưng thật ra mọi bức ảnh đều có filter được áp dụng
Gọi chính quá trình đó là ‘giả’ thì vô nghĩa
Tôi nhớ tới một câu trích trong phim Tim’s Vermeer
Rằng “ý niệm hiện đại cho rằng nghệ thuật và công nghệ phải tách biệt là sai lầm”,
và chính sự hòa quyện giữa nghệ thuật và công nghệ mới là đặc trưng của thời hoàng kim
Tôi cũng muốn giới thiệu The Science of Photography của John Lind và
bài giải thích về cảm biến của Bob Atkins.
Đặc biệt tôi thấy phần giải thích vì sao kích thước giếng pixel lại quan trọng rất ấn tượng
Tôi nghĩ việc hiển thị dữ liệu tuyến tính nguyên trạng trông tối là do giới hạn của màn hình
Nếu độ sâu bit đủ lớn thì liệu có thể hiển thị bằng ánh sáng tuyến tính mà không cần gamma correction không
Nhận thức độ sáng của con người không tuyến tính, nên ở một giai đoạn nào đó vẫn cần phi tuyến hóa
Lý tưởng nhất là tính toán trong không gian màu tuyến tính 16-bit trở lên, rồi áp gamma ngay trước khi hiển thị
Trước đây người ta từng blend trong RGB phi tuyến nên sinh ra hiện tượng banding tối
CRT dùng gamma để bù phản ứng phi tuyến của súng điện tử, còn film hay cảm biến CMOS cũng có độ nhạy với ánh sáng theo dạng log nên áp dụng cách xử lý tương tự
Thực tế không tồn tại cái gọi là ‘ảnh chưa qua xử lý’
RAW chỉ là tập hợp các giá trị pixel RGGB, và việc loại bỏ dữ liệu một cách có chiến lược để khớp với dải tương phản động hẹp của màn hình,
đồng thời xác định điểm xám trung gian, chính là lĩnh vực của diễn giải mang tính sáng tạo
Có chút tiếc vì ví dụ trong bài quá nhân tạo và ánh sáng quá nhiều màu, nên khó hiểu ‘sự thật chuẩn’ là gì
Chỉ cần so sánh hai hình cuối rồi tự đánh giá ‘kết quả’ theo sở thích của mình