2 điểm bởi GN⁺ 2025-12-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ìnhnhậ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

 
GN⁺ 2025-12-29
Ý 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

    • Khi nhìn vào công thức lượng tử hóa của ppmtopgm, công cụ dùng để chuyển từ PPM sang định dạng cổ điển PGM, có thể thấy tỷ trọng của màu xanh lá gần 60%
      g = .299r + .587g + .114b
      Tỷ 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
    • Khi làm ở đội quảng cáo Amazon Kindle, đã từng có chuyện hình quảng cáo tệ hại bị hiển thị suốt 6 tháng chỉ vì chuyển RGB sang thang xám bằng cách lấy trung bình đơn giản
      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
    • Thực ra nhiếp ảnh phim cũng là một dạng xử lý tín hiệu khác. Không hề tồn tại thứ gọi là ‘dữ liệu chưa qua xử lý’ mà chúng ta có thể nhận thức được
    • Tôi thấy hơi bất công khi Bayer pattern dành gấp đôi diện tích cho màu xanh lá
      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ý (⩺_⩹)
    • Tôi ghét việc mọi người hỏi ảnh là “đã chỉnh sửa chưa, hay là ảnh gốc?”
      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 độngdebayering 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

    • Tôi không nghĩ ảnh có ‘thật’ và ‘giả’
      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)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
    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

    • Không, vấn đề là hình dạng của đường cong
      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
    • Gamma correction không chỉ vì màn hình, mà còn để phân bổ nhiều bit hơn cho vùng highlight và shadow
      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ự
    • Nếu hiển thị cảnh hoàng hôn theo tuyến tính, vùng mặt trời sẽ sáng tới mức đau mắt. Điều đó không thực 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ì

    • Nhưng đó chính là trọng tâm. Mục đích của bài là khiến người đọc xem xét lại một cách thách thức chính khái niệm ‘sự thật chuẩn’ ấy
      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