Đó là giới hạn của dữ liệu nén không mất dữ liệu? (nếu có giới hạn như vậy)


14

Gần đây tôi đã xử lý các thuật toán liên quan đến nén và tôi đã tự hỏi đâu là tỷ lệ nén tốt nhất có thể đạt được bằng cách nén dữ liệu không mất dữ liệu.

Cho đến nay, nguồn duy nhất tôi có thể tìm thấy về chủ đề này là Wikipedia:

Nén không mất dữ liệu số hóa như video, phim số hóa và âm thanh bảo toàn tất cả thông tin, nhưng hiếm khi có thể làm tốt hơn nhiều so với nén 1: 2 vì entropy nội tại của dữ liệu.

Thật không may, bài viết của Wikipedia không chứa tài liệu tham khảo hoặc trích dẫn để hỗ trợ cho tuyên bố này. Tôi không phải là chuyên gia nén dữ liệu, vì vậy tôi đánh giá cao bất kỳ thông tin nào bạn có thể cung cấp về chủ đề này hoặc nếu bạn có thể chỉ cho tôi một nguồn đáng tin cậy hơn Wikipedia.


1
Tôi không chắc liệu Khoa học máy tính lý thuyết có phải là trang web tốt nhất để hỏi loại câu hỏi này không. Vui lòng bỏ phiếu gần hoặc chuyển câu hỏi này sang một trang phù hợp hơn, nếu cần thiết.
Auron

3
Đây có thể là những gì bạn đang tìm kiếm: en.wikipedia.org/wiki/Entropy_encoding . Từ khóa là entropy .
Hsien-Chih Chang 張顯

3
Tôi không biết những gì sẽ là một trang web phù hợp hơn, không may. Các lỗi lượng tử là một nguồn entropy mà có lẽ sẽ ngăn cản tỷ lệ nén lớn.
Peter Shor

2
Bạn có cần nén dữ liệu không mất dữ liệu cho loại dữ liệu nào không? Hình ảnh, âm nhạc, lời nói, dữ liệu chung chung, ...? Tuy nhiên, để có phần giới thiệu cấp cao, hãy xem data-compression.com/theory.html (và tài nguyên ở cuối trang)
Marzio De Biasi

2
@Vor Hình ảnh. Cụ thể hơn, hình ảnh y tế. Tôi sẽ xem trang đó. Cảm ơn.
Auron

Câu trả lời:


27

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:

Cây trồng 30x30, được phóng to theo hệ số 10

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 ):

biểu đồ

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ó:

Cây trồng 30x30, được phóng to theo hệ số 10 biểu đồ

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.


3
mát mẻ! nếu tiếng ồn là gaussian, cảm giác của tôi là chiếu lên các vectơ số k đầu tiên (hoặc một kỹ thuật lạ mắt hơn tương tự) sẽ loại bỏ rất nhiều nhiễu. một tìm kiếm học thuật nhanh trên google đã tiết lộ một bài viết của M. Elad và M. Aharon, sử dụng phương pháp trình chiếu + một số mánh khóe thống kê Bayes: ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=4011956 . được cho là vào năm 2006, đó là "tình trạng của nghệ thuật". tất nhiên, đó không phải là mất mát, nhưng dữ liệu của Jukka cho thấy rằng nếu bạn khăng khăng kích thước nhỏ, bạn cần phải mất ít nhất là tiếng ồn.
Sasho Nikolov

Ví dụ của bạn chỉ là về nén hình ảnh . Tôi sẽ miễn cưỡng cấp cho bạn khái quát hóa của họ đối với bất kỳ dữ liệu nào đến từ các cảm biến vật lý (âm thanh, hình ảnh, video, nhưng có thể có yếu tố riêng biệt) nhưng có (nhiều?) Các lĩnh vực khác được áp dụng nén, với tỷ lệ tốt hơn nhiều so với 1: 2 (ngôn ngữ tự nhiên đến với tâm trí), vì có ít tiếng ồn.
Jeremy

2
@Jukka: +1: Thử nghiệm tuyệt đẹp! @Sasho: đối với hình ảnh y tế, sự khôn ngoan thông thường là bạn không thể mất bất cứ thứ gì, ngay cả khi nó rất có thể chỉ là nhiễu.
Peter Shor

2
Giải thích rất hay và rõ ràng!
Marzio De Biasi

2
Thêm một bình luận: điều này thực sự không thể tránh khỏi đối với hình ảnh y tế. Nếu bạn không sử dụng đủ độ chính xác để có một lượng nhiễu đáng kể này trong các hình ảnh y tế, thì có lẽ bạn đang mất một số chi tiết thực tế có liên quan, mà bạn thực sự muốn giữ lại.
Peter Shor

16

Bạn đã biết về định lý mã hóa ồn ào của Shannon chưa? Định lý establistes giới hạn lý thuyết về nén không tổn hao. Một số ý kiến ​​từ những người khác dường như cho rằng bạn biết về định lý này, nhưng từ câu hỏi, tôi nghĩ đó có thể là câu trả lời bạn đang tìm kiếm.


Tôi không biết về định lý đó. Tôi đoán tuyên bố của Wikipedia là không chính xác, vì tỷ lệ nén có thể đạt được phụ thuộc vào entropy của dữ liệu được nén.
Auron

Tôi tin rằng thực sự khá khó để xác định entropy nội tại của hình ảnh - sẽ dễ dàng hơn nhiều nếu dữ liệu là tuyến tính chứ không phải 2 chiều.
Peter Shor

Vậy, tỷ lệ nén tối đa cho văn bản được tạo ngẫu nhiên (thống nhất) là bao nhiêu?
skan

11

n>0

  1. n

  2. Giải pháp thực tế phổ biến là sử dụng 8 bit, nếu số nguyên duy nhất bạn sẽ mã hóa nằm trong khoảng từ 1 đến 256 (tổng quát thành 16, 32 và 64 bit nếu bạn muốn).

  3. n+1nn

  4. log2nlog2n+1nlog2n1log2n2log2n1nlgn=max(1,log2n)

  5. 2log2n1

  6. KKkhông tính toán được. Một cách giải quyết dễ dàng xung quanh khái niệm này được đưa ra bởi các chương trình tự phân định của Levin , trong đó bạn chỉ xem xét các chương trình có thời gian thực hiện bị ràng buộc (ví dụ, trong một yếu tố không đổi về độ dài của thể hiện ban đầu, giới hạn thấp hơn về độ phức tạp của thuật toán cần viết từng ký hiệu).

Có cả một cộng đồng làm việc về sự phức tạp của Kolmogorov và các biến thể của nó, và một cộng đồng khác làm việc về nén không mất dữ liệu (ví dụ về các số nguyên mà tôi đã sử dụng tương đương với nhiều loại dữ liệu khác), tôi hầu như không làm trầy xước bề mặt (Kolmogorov thực sự không phải là chuyên môn của tôi), nhưng tôi hy vọng rằng điều này có thể giúp bạn làm rõ câu hỏi của mình, nếu không nhất thiết phải cung cấp cho bạn câu trả lời mà bạn đang hy vọng :)


7

(chỉ là một phần mở rộng của bình luận của tôi)

(Như đã chỉ ra bởi Joe trong câu trả lời của ông) Shannon - trong bài báo năm 1948 của mình, " Một lý thuyết toán học của truyền thông " xây dựng lý thuyết về nén dữ liệu và thiết lập rằng có một giới hạn cơ bản để nén dữ liệu lossless. Giới hạn này, được gọi là tỷ lệ entropy, được ký hiệu là H. Giá trị chính xác của H phụ thuộc vào nguồn thông tin --- cụ thể hơn là bản chất thống kê của nguồn. Có thể nén nguồn, theo cách không mất mát, với tốc độ nén gần bằng H. Về mặt toán học không thể làm tốt hơn H.

Tuy nhiên, một số loại hình ảnh (ví dụ hình ảnh thang độ xám y tế) không có các cạnh có độ tương phản cao và với các chuyển tiếp mức độ mịn có thể được nén (không hiệu quả lắm).

JPEG-LSJPEG2000 dường như là tiêu chuẩn để lưu trữ hình ảnh y tế không mất dữ liệu. Xem bảng này để so sánh các tỷ lệ nén (JPEG-LS đạt được độ nén tốt hơn một chút).

Sử dụng "nén hình ảnh y tế không mất dữ liệu" tôi đã tìm thấy các bài viết sau có thể giúp bạn:

Một khảo sát gần đây (2011) về kỹ thuật nén hình ảnh y tế: Kỹ thuật nén hình ảnh y tế hai chiều - Một khảo sát

... Bài viết này trình bày tổng quan về các kỹ thuật nén khác nhau dựa trên DCT, DWT, ROI và Mạng thần kinh cho hình ảnh y tế hai chiều (2D).

Một bản trình bày chi tiết về hai thuật toán nén không tổn hao tiêu chuẩn: JPEG-LS và JPG2000 ở chế độ lossless: Nén không mất hình ảnh màu xám - Hiệu quả của phương pháp tiếp cận truyền thống và hiện đại

... Ba nghìn, sáu trăm bảy mươi chín (3.79) hình ảnh thang độ xám khung đơn từ nhiều vùng giải phẫu, phương thức và nhà cung cấp, đã được thử nghiệm. ...

Một khảo sát khác: Khảo sát về kỹ thuật nén hình ảnh y tế đương đại

BIÊN TẬP

Có lẽ bạn vẫn đang tự hỏi "Cái quái gì là entropy của một hình ảnh?" ... OK, đó là lượng thông tin có trong hình ảnh ... nhưng để hiểu rõ hơn về nó, bạn nên đọc một cái gì đó về 3 giai đoạn thường được sử dụng trong nén hình ảnh :

  • biến đổi (ví dụ: Biến đổi Wavelet rời rạc)
  • lượng tử hóa
  • mã hóa entropy

Bạn có thể sử dụng Google để tìm kiếm hướng dẫn hoặc sách về nén hình ảnh (ví dụ: hướng dẫn nhanh ) hoặc thử xem video kỹ thuật trực tuyến (ví dụ: Bài giảng 16 - Giới thiệu về mã hóa hình ảnh và video ).


7

Hãy nghĩ về một tập tin như một chuỗi.

Bạn không bao giờ có thể làm tốt hơn độ phức tạp Kolmogorov của một chuỗi (điều này theo định nghĩa về độ phức tạp Komogorov).

Sửa chiều dài chuỗi. Vì vậy, bây giờ chúng ta chỉ nhìn vào chuỗi có độ dài n.

Một nửa của tất cả các chuỗi như vậy có thể được nén tối đa 1 bit. 1/4 của tất cả các chuỗi có thể được nén tối đa 2 bit. 1/8 của tất cả các chuỗi như vậy có thể được nén tối đa 3 bit.

Vì vậy, phần nào của chuỗi (hình ảnh, tệp, v.v.) có thể được nén theo tỷ lệ 2: 1 - rất, rất ít. Vậy tại sao nén bao giờ làm việc? Bởi vì hầu hết tất cả dữ liệu mà những người thực sự đang cố nén đều có cấu trúc cao - nó không giống như một tệp ngẫu nhiên. Dữ liệu tìm kiếm càng ngẫu nhiên, càng khó nén. Họ đi tay trong tay. Hầu hết các chuỗi trông ngẫu nhiên.

Để thấy điều này trong thực tế, tạo một tệp ngẫu nhiên bằng cách sử dụng một số quy trình ngẫu nhiên. Tôi có nghĩa là một tập tin thực sự, thực sự ngẫu nhiên. Bây giờ hãy thử nén nó bằng thuật toán nén yêu thích của bạn. Nó sẽ giữ nguyên kích thước hoặc lớn hơn, hầu như mọi lúc.

Mặt trái, có các chuỗi có khả năng nén cao. Lấy chuỗi sau: 100000..000 (1 theo sau là một triệu số không). Mô tả của nó phù hợp với câu trước và một máy tính có thể tái cấu trúc nó từ mô tả đó (hoặc một cái rất giống nó). Tuy nhiên, mô tả đó không dài gần một triệu chữ số.

Thực tế là các chuỗi có thuộc tính đó (có khả năng nén cao) là cực kỳ hiếm trong số tất cả các chuỗi có thể. Một thực tế thứ hai là hầu như tất cả dữ liệu do con người tạo ra đều siêu, siêu nén vì nó có cấu trúc như vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.