Tôi không chắc có ai đã giải thích tại sao con số ma thuật dường như chính xác là 1: 2 và không, ví dụ, 1: 1.1 hoặc 1:20.
Một lý do là trong nhiều trường hợp điển hình, gần một nửa dữ liệu số hóa là nhiễu và nhiễu (theo định nghĩa) không thể nén được.
Tôi đã làm một thí nghiệm rất đơn giản:
Tôi lấy một thẻ màu xám . Đối với mắt người, nó trông giống như một miếng bìa cứng màu xám, trung tính. Đặc biệt, không có thông tin .
Và sau đó tôi lấy một máy quét bình thường - chính xác là loại thiết bị mà mọi người có thể sử dụng để số hóa ảnh của họ.
Tôi quét thẻ màu xám. .
Tôi đã cắt một phần 1000x1000 pixel của thẻ màu xám và chuyển đổi nó thành thang độ xám (8 bit mỗi pixel).
Những gì chúng ta có bây giờ phải là một ví dụ khá hay về những gì xảy ra khi bạn nghiên cứu một phần không thể tin được của một bức ảnh đen trắng được quét , ví dụ, bầu trời rõ ràng. Về nguyên tắc, nên có chính xác không có gì để xem.
Tuy nhiên, với độ phóng đại lớn hơn, nó thực sự trông như thế này:
Không có mẫu rõ ràng, nhưng nó không có màu xám đồng nhất. Một phần của nó rất có thể là do sự không hoàn hảo của thẻ màu xám, nhưng tôi cho rằng phần lớn nó chỉ là tiếng ồn do máy quét tạo ra (nhiễu nhiệt trong tế bào cảm biến, bộ khuếch đại, bộ chuyển đổi A / D, v.v.). Trông khá giống tiếng ồn Gaussian; đây là biểu đồ (theo thang logarit ):
Bây giờ nếu chúng ta giả sử rằng mỗi pixel có bóng của nó được chọn từ phân phối này, chúng ta có bao nhiêu entropy? Kịch bản Python của tôi nói với tôi rằng chúng ta có tới 3,3 bit entropy trên mỗi pixel . Và đó là rất nhiều tiếng ồn.
Nếu đây thực sự là trường hợp, nó sẽ ngụ ý rằng cho dù chúng tôi sử dụng thuật toán nén nào, bitmap 1000x1000 pixel sẽ được nén, trong trường hợp tốt nhất, thành tệp 412500 byte. Và những gì xảy ra trong thực tế: Tôi đã nhận được một tệp PNG 432018 byte, khá gần.
Nếu chúng ta khái quát quá mức một chút, có vẻ như bất kể tôi quét ảnh đen trắng nào bằng máy quét này, tôi sẽ nhận được tổng số như sau:
- thông tin "hữu ích" (nếu có),
- tiếng ồn, khoảng 3 bit cho mỗi pixel.
Bây giờ ngay cả khi thuật toán nén của bạn nén thông tin hữu ích thành << 1 bit cho mỗi pixel, bạn vẫn sẽ có nhiều nhất là 3 bit cho mỗi pixel nhiễu không thể nén. Và phiên bản không nén là 8 bit mỗi pixel. Vì vậy, tỷ lệ nén sẽ nằm trong sân bóng 1: 2, bất kể bạn làm gì.
Một ví dụ khác, với nỗ lực tìm kiếm các điều kiện quá lý tưởng hóa:
- Một máy ảnh DSLR hiện đại, sử dụng cài đặt độ nhạy thấp nhất (ít nhiễu nhất).
- Ảnh chụp thiếu tập trung của thẻ màu xám (ngay cả khi có một số thông tin có thể nhìn thấy trong thẻ màu xám, nó sẽ bị mờ đi).
- Chuyển đổi tệp RAW thành hình ảnh thang độ 8 bit, không thêm bất kỳ độ tương phản nào. Tôi đã sử dụng các cài đặt điển hình trong trình chuyển đổi RAW thương mại. Bộ chuyển đổi cố gắng giảm tiếng ồn theo mặc định. Hơn nữa, chúng tôi đang lưu kết quả cuối cùng dưới dạng tệp 8 bit - về bản chất, chúng tôi đang loại bỏ các bit có thứ tự thấp nhất trong các lần đọc cảm biến thô!
Và kết quả cuối cùng là gì? Nó trông tốt hơn nhiều so với những gì tôi nhận được từ máy quét; tiếng ồn ít rõ rệt hơn và chính xác là không có gì để nhìn thấy. Tuy nhiên, tiếng ồn Gaussian là có:
Và entropy? 2,7 bit mỗi pixel . Kích thước tập tin trong thực tế? 344923 byte cho 1M pixel. Trong một trường hợp thực sự tốt nhất, với một số gian lận, chúng tôi đã đẩy tỷ lệ nén lên 1: 3.
Tất nhiên tất cả những điều này hoàn toàn không liên quan gì đến nghiên cứu của TCS, nhưng tôi nghĩ thật tốt khi ghi nhớ những gì thực sự hạn chế việc nén dữ liệu số hóa trong thế giới thực. Những tiến bộ trong việc thiết kế các thuật toán nén fancier và sức mạnh CPU thô sẽ không giúp ích gì; nếu bạn muốn lưu tất cả tiếng ồn một cách dễ dàng, bạn không thể làm tốt hơn 1: 2.