Chia sẻ  Giải mã định dạng ảnh HEIF đang được Samsung, Apple và Xiaomi 10 sử dụng

Administrator
Các dòng điện thoại thông minh cao cấp như Samsung, Apple, Xiaomi Mi 10 series mới được phát hành gần đây đang sử dụng định dạng hình ảnh mới là HEIF. Định dạng ảnh này giúp kích thước tệp tin giảm tới 50% nhưng vẫn đảm bảo chất lượng với công nghệ định dạng trước.

bPl2l5h.jpg


rHUjokX.gif



Ảnh định dạng HEIF thường có phần mở rộng tập tin .HEIC (một số có các định dạng khác). Người dùng iPhone nhìn định dạng này chắc sẽ thấy rất quen thuộc.

20200225_174931_956.jpg

Apple đã hỗ trợ định dạng hình ảnh này trên hệ thống iOS 11 vào năm 2017.

Hệ điều hành Windows 10 và Android 9 cũng hỗ trợ định dạng hình ảnh HEIF năm 2018. Trong cùng năm đó, Samsung Note 9 cũng hỗ trợ ảnh .HEIC.

Dự kiến nếu HEIF phổ biến thì định dạng ảnh JPEG và GIF có thể bị loại bỏ. Tại sao định dạng HEIF có thể giảm đáng kể kích thước tệp so với định dạng JPEG mà không thay đổi chất lượng hình ảnh?

Đầu tiên định dạng hình ảnh JPEG là gì. ? Hình ảnh định dạng JPEG là một tiêu chuẩn kỹ thuật để nén hình ảnh. Hình ảnh được nén bằng tiêu chuẩn này được gọi là "tệp JPEG".
Theo Wiki định dạng JPEG được viết tắt từ Joint Photographic Experts Group đây là một trong những phương pháp nén ảnh hiệu quả, có tỷ lệ nén ảnh tới vài chục lần. Tuy nhiên chất lượng hình ảnh sau khi được nén sẽ khác với ảnh ban đầu, thường là bị suy giảm . Chất lượng hình ảnh này càng giảm nếu người ta tăng hệ số nén .
Phần mở rộng của các file JPEG thường có dạng.jpeg,.jfif,.jpg,.JPG, hay.JPE; dạng.jpg là dạng được dùng phổ biến nhất. Hiện nay dạng nén ảnh JPEG rất được phổ biến trong Điện thoại di động cũng như những trang thiết bị lưu giữ có dung lượng nhỏ.

Cũng theo Wiki
Các nhà nghiên cứu đã phát minh ra định dạng này để hiển thị các hình ảnh đầy đủ màu hơn (full-colour) cho định dạng di động mà kích thước file nhỏ hơn. Giống như GIF, JPEG cũng được sử dụng rất nhiều trên web. Lợi ích chính của chúng là có thể hiển thị các hình ảnh với các màu chính xác (true-colour) chúng có thể lên đến 16 triệu màu. Điều đó cho phép chúng được sử dụng tốt nhất cho các hình ảnh chụp và hình ảnh minh hoạ với lượng màu lớn.
Nhược điểm lớn nhất là chất lượng ảnh đã bị nén mất đi (lossy), một số đường bao giữa các khối màu sẽ xuất hiện điểm mờ, và các vùng sẽ mất đi sự rõ nét. Và giống như dạng mp3, JPEG sẽ không thể phục hồi giống như hình ảnh ban đầu dù dung lượng được tăng lên giống dung lượng ảnh thật.
Các ảnh JPEG không thể làm trong suốt hoặc chuyển động.

ezgif-6-2e064e936a6a.gif

Với định dạng JPEG sau khi hình ảnh được phóng to, bạn có thể nhìn thấy từng pixel.

Mỗi pixel chứa một tập hợp các giá trị mô tả màu của từng pixel. Đây được gọi là không gian màu, chẳng hạn như không gian màu RGB mà chúng ta quen thuộc và không gian màu CMYK.

khonggianmau.jpg

Ảnh thông thường sử dụng không gian màu RGB, trong khi tiêu chuẩn JPEG sử dụng không gian màu có tên là YCbCr. Vì vậy, trước khi nén, bắt buộc phải chuyển đổi không gian màu
CCD.png

Hình ảnh minh họa từ Wikipedia

Trong không gian màu YCbCr, chữ Y biểu thị độ sáng, Cb đại diện cho sắc độ màu xanh lam và Cr đại diện cho sắc độ màu đỏ. Nói cách khác, Y là viết tắt của độ sáng và CbCr là viết tắt của màu sắc.

Sau khi chuyển đổi, có một bộ giá trị khác đằng sau mỗi pixel. Do mắt người nhạy cảm với độ sáng mà không quá nhạy cảm với màu sắc, định dạng JPEG không thay đổi nhiều thông tin độ sáng khi hình ảnh bị nén. Định dạng này chủ yếu nén thông tin màu.

Có hai phương pháp nén, một là nén làm mất dữ liệu và phương pháp còn lại là nén mà không làm mất dữ liệu. Khi ảnh JPEG được nén , cả hai phương pháp này đều được sử dụng. Nhưng phương pháp nén làm mất dữ liệu được thực hiện trước sau đó nén không mất dữ liệu mới được thực hiện.

Bước đầu tiên là nén làm mất dữ liệu

Cách nén làm mất dữ liệu được thực hiện đầu tiên sẽ lấy dữ liệu màu của của kênh Cb và kênh Cr theo một tỷ lệ nhất định, quá trình này làm mất một số dữ liệu.

giatrimau.jpg

Bước thứ hai là chia các pixel trong một hình ảnh thành vô số hình vuông 8 × 8 pixel, mỗi ô vuông có 64 pixel, tương ứng với 64 bộ dữ liệu.

nenanh.jpg


nenDCT.jpg

Sau đó, 64 bộ dữ liệu tiếp tục được xử lý qua một quy trình toán học gọi là biến đổi cosine rời rạc (DCT). Sau khi xử lý, 64 bộ dữ liệu trở thành ma trận hệ số gọn hơn.

Phương pháp đổi cosine rời rạc này, bạn không cần phải hiểu nó. Nó dành cho các chuyên gia . Sau khi chuyển đổi DCT, 64 pixel trở thành 64 hệ số và quá trình này làm mất dữ liệu. Vì không thể xử lý trực tiếp bộ ma trận thứ tự 8 × 8 này nữa người ta sẽ sử dụng quá trình gọi là Lượng tử hóa để tiếp tục xử lý nó. . Mục đích của lượng tử hóa là giảm sự khác biệt giữa các pixel trong ma trận sao cho hợp lý nhất . Bởi vì mắt người không có khả năng nhận biết cao đối với các vùng pixel có độ chênh lệch cao trong các khu vực nhỏ, nên tất hơn là người ta sẽ làm giảm sự khác biệt giữa các vùng pixel. Sau quá trình lượng tử hóa, ma trận thứ tự 8 × 8 trở thành ma trận số ngắn gọn hơn với diện tích bằng 0.

luongtuhoa.jpg



Bước tiếp theo là nén không mất dữ liệu.

Đầu tiên, ma trận kỹ thuật số 8 × 8 sau khi lượng tử hóa trước đó sẽ được trích xuất khai thác với thứ tự gọi là Z zig zag

20200225_174932_893.png.jpg


Sau khi trích xuất, thu được 64 dữ liệu. Trong 64 dữ liệu, số đầu tiên được gọi là mã hóa hệ số DC và 63 số tiếp theo được gọi là mã hóa hệ số AC.

trichxuat64.jpg

Việc xử lý khối 8 x 8 điểm ảnh với 64 hệ số được thực hiện bằng cách quét zig zag để các hệ số 0 liên tiếp nhau đạt giá trị lớn nhất nhằm giảm tốc độ bit khi mã hóa, tăng tối đa chuỗi có các giá trị 0. Với một chuỗi các hệ số 0 liên tiếp ta sẽ sử dụng mã độ dài RLC để mã hóa các giá trị lặp lại của các điểm ảnh, sau đó sử dụng mã VLC để giảm tốc độ dòng bit tối thiểu. Trong một khối sau các hệ số khác 0 là một chuỗi các số 0 liên tiếp, khi đó sử dụng ký hiệu ‘SEB’(end of subimage block ) để đánh dấu vị trí đầu tiên

Một hình ảnh có thể chứa rất nhiều các ô 8 × 8. Sau khi được xử lý bởi tất cả các quả trình ở trên sẽ có rất nhiều hệ số DC. Những hệ số DC này sẽ được trích xuất tạo thành một tập hợp các hệ số , sau đó thực hiện vi sai mã hóa Huffman với tập hợp hệ số đó.

Còn hệ số AC sẽ được mã hóa theo chiều dài . Mã hoá theo độ dài loạt RLE (Run Length Encoding) là một phương pháp nén ảnh dựa trên sự cắt bớt các dư thừa về không gian (môt vài hình ảnh có vùng màu lớn không đổi đặc biệt đối với ảnh nhị phân). Loạt được định nghĩa là dãy các phần tử điểm ảnh (pixel) liên tiếp có cùng chung một giá trị.

Chúng tôi trích xuất nhiều và nhiều hệ số DC này để tạo thành một tập thể, và sau đó thực hiện mã hóa vi sai và mã hóa Huffman trên chúng. Đối với các hệ số AC khác cũng được mã hóa. Các bước nén của chuẩn JPEG theo cách này về cơ bản là như vậy. Sau khi hoàn thành các bước nén tệp .JPG được nén sẽ nhỏ hơn nhiều so với ảnh gốc và tất nhiên chất lượng của ảnh sẽ giảm đi.
Người dùng bình thường không cần biết đến các quy trình mã hóa nén không mất dữ liệu ở trên. Khác biệt trong quá trình mã hóa nằm ở một số chuỗi số, ngoại trừ số đầu tiên, tất cả các số khác được biểu thị bằng chênh lệch giữa số đó và số trước.

HEIF017ebfc3ed541ad9cf.jpg

Ví dụ: dữ liệu của 100, 101, 103, 104 và 107 có thể được biểu thị dưới dạng 100, 1, 2, 1 và 3. Quá trình này được coi như là nén dữ liệu.

HEIF02.jpg
Mã hóa độ dài chạy có thể hiểu đơn gian qua ví dụ minh họa trên. Nếu có một chuỗi ký tự "aaabbbccccdddddd", trong chuỗi này bao gồm 3 a, 3 b, 4 c, 6 d, nó sẽ được mã hóa thành "3a3b4c6d" một dạng rút gọn quen thuộc


Trong khoa học máy tính và lý thuyết thông tin, mã hóa Huffman là một thuật toán mã hóa dùng để nén dữ liệu. Huffman hoạt động dựa trên bảng tần suất xuất hiện các ký tự cần mã hóa để xây dựng một bộ mã nhị phân cho các ký tự đó sao cho dung lượng (số bít) sau khi mã hóa là nhỏ nhất.
Thông thường, trong một bức ảnh, có rất nhiều pixel giống nhau hoặc tương tự nhau, điều đó có nghĩa là dữ liệu đằng sau chúng có rất nhiều chỗ để nén. Mục đích của quá trình nén JPEG là để làm điều này còn HEIF thì sao?

1-xyR_Z5y5uAp-sdl9VUXFEw.png

Phương thức hoạt động của HEIF rất giống với cách mã hóa nhiều định dạng video. Quá trình mã hóa nén dữ liệu của HEIF tương tự như JPEG, nhưng được cải tiến ở một số bước. HEIF thực ra là một định dạng đóng gói hình ảnh sử dụng phương pháp mã hóa gọi là HEVC.

HEIF03.jpg

Thông tin của hình ảnh được mã hóa bằng phương pháp mã hóa HEVC, sau đó thông tin được mã hóa này được đóng gói trong một hộp (thùng chứa). Hộp này được gọi là HEIF. HEIF tách các hộp và phương thức để mã hóa, trong khi JPEG thì không .

Các định dạng video như MP4, MKV, AVI, v.v. chúng ta thường thấy chính là các hộp và phương thức mã hóa bên trong . Định dạng MPEG-4, H.264, H.265 cũng như vậy. Khi phần mềm âm thanh , video phát các tệp video, âm thanh, những hộp này được mở trước và sau đó các tệp mã hóa được giải mã.

H.265 hay còn gọi High Efficiency Video Coding – HEVC cũng là phương pháp mã hóa ở định dạng HEIF, HEIF “chứa” những hình ảnh tĩnh nén bằng thuật toán mã hóa HEVC . Ngoài HEVC, định dạng HEIF cũng có thể sử dụng các phương thức mã hóa khác, nhưng rất hiếm

Vậy làm thế nào mà mã hóa HEVC giảm kích thước? Có 2 điểm chính

- Một là định dạng JPEG là cách nén hình ảnh thành các khối pixel 8 × 8 để mã hóa. Nhưng trong phương pháp mã hóa HEVC, việc phân chia khối pixel này linh hoạt hơn. Hình ảnh có thể được chia thành 64 × 64, sau đó trong khối 64 × 64 pixel, được chia thành các khối pixel phụ một cách linh hoạt , chia thành 32 × 32. ,hoặc các khối con 16 × 16, 8 × 8. Đây được gọi là phân chia tế bào bốn cây.

20200225_174934_159.jpg


Lợi ích của việc này là gì? Câu trả lời là đối với một hình ảnh, thông tin tương đối bằng phẳng, chúng ta có thể sử dụng các pixel lớn hơn để phân chia nó. Nếu thông tin dày đặc, chúng ta có thể chia thành các pixel nhỏ hơn.

20200225_174934_268.jpg

Các đơn vị mã hóa được phân chia theo tình hình thực tế từ đó cải thiện đáng kể hiệu quả mã hóa. Đặc biệt đối với 4K và hình ảnh có độ phân giải cao, pixel lớn , sẽ có lợi thế hơn khi mã hóa. Kích thước tệp ảnh HEIF có thể được giảm xuống là phụ thuộc vào điều này.


- Hai là : Ở phương pháp nén tệp JPEG , có quá trình mã hóa lossless không mất dữ liệu đó là mã hóa vi sai, mã hóa Huffman và mã hóa độ dài. Để giảm dữ liệu của tệp ảnh JPEG quan trọng nhất là mã hóa Huffman. Đối với HEIF, phương pháp mã hóa không mất dữ liệu sử dụng mã hóa số học nhị phân thích ứng ( "mã hóa số học"). So với mã hóa Huffman, mã hóa số học có thể cải thiện hơn nữa hiệu quả mã hóa. Thực tế, cách hoạt động mã hóa số học tương tự như mã hóa Huffman. Cả hai đều xem xét xác suất của các ký tự khác nhau trong dữ liệu và sau đó đưa ra các ký tự khác nhau cho các mã hóa khác nhau. Quá trình này phức tạp và rất khó trình bày rõ ràng ở mức kiến thức hạn hẹp của mình. Nói tóm lại, mã hóa số học sẽ cho ra kết quả là số thập phân rất ngắn gọn . Với các thuật toán sâu sắc , hiệu quả quá trình mã hóa của "mã hóa số học" tốt hơn mã hóa Huffman. Điều này giúp bức ảnh có thể được nén có dung lượng nhỏ hơn. Đây là lý do cơ bản tại sao HEIF có thể giảm dung lượng hình ảnh trong khi vẫn giữ cho chất lượng hình ảnh tốt

HEIF được hiểu Định dạng hình ảnh hiệu quả cao, HEIF được phát triển bởi Hiệp hội MPEG và được định nghĩa bởi MPEG-H Phần 12 (ISO / IEC 23008-12). vào năm 2013. Khác với tổ chức của JPEG trước đây.

Điều đáng nói là công nghệ tiên tiến HEIF được phát triển bởi đội ngũ kỹ thuật của Nokia. Công nghệ này được hoàn thiện vào năm 2015 và hiện đang được Nokia duy trì (trang web chính thức của HEIF: https://nokiatech.github.io/heif/index.html) Nokia đóng vai trò rất quan trọng ở định dạng HEIF.

Thú vị là Huawei cũng là một trong những nhà tài trợ cho HEVC và đang nắm giữ số lượng lớn các bằng sáng chế. Huawei tham gia nhóm bằng sáng chế HEVC Advance vào tháng 1 năm 2020.

57b90f41-d76b-44ec-bae8-9cb46004e7bd.png

Xiaomi 10 chiếc điện thoại mới ra mắt của Xiaomi cũng tham gia vào việc giúp định dạng ảnh HEIF phổ biến hơn.
Hiện tại thì camera của điện thoại có thể đạt tới 100 Megapixel , nếu tiếp tục lưu trữ dưới dạng JPG sẽ dẫn đến không gian lưu trữ của điện thoại thực sự là rất chật và bạn cần nâng cấp bộ nhớ cho chiếc điện thoại của mình. Liệu định dạng HEIF có thay thế cho định dạng JPG trong tương lai ?


Quang Vinh biên dịch tổng hợp tham khảo Wiki và nhiều nguồn trên internet
 
Trả lời

thaitudienha

Búa Gỗ
Bài viết hay. Giờ thì đã hiểu vì sao dần dần các hãng ít dùng định dạng JPG rồi :D
 

HDTVN

Búa Gỗ Đôi
1 bài viết đầy đủ, Rõ ràng, bố cục hợp lý, 10 điểm.
HEIFrồi sẽ thay dần cho chuản JPEG xem chừng sẽ lỗi thời sớm với cácđiện thạoibây giờ thôi
 

vanhieu282

Gà con
Trìu tượng quá, đọc xong mà loạn hết cả đầu lên, thôi thì mấy cái đề này mình chỉ cần biết kết quả, còn quá trình xử lý thế nào là dành cho chuyên gia
 

VanHieu94

Búa Gỗ
Đọc nghiền ngẫm nên mình khá hiểu về cách thức hoạt động của 2 loại, JPEG nó phân chia bố cục không linh hoạt bằng HEIF, nên khi xử lý vừa mất thời gian và mất năng lượng xử lý, chiếm nhiều dung lượng, tóm gọn lại là vậy.
Mình nghĩ khoa học càng phát triển thì các file như thế này nó lại càng hữu dụng trong thời đại số lưu trữ nhiều như hiện nay, tuy nhiên cái gì nén quá cũng không tốt.
 

longkeyz

Gà con
Mong là sẽ thay thế hẳn JPEG, file nặng hơn hẳn, mà cứ mỗi lần nén JPEG là lại 1 lần giảm chất lượng.
 

vanchuong1989

Búa Gỗ
Định dạng HEIF chưa mở được trong windows, chia sẻ khó khăn, hi vọng Microsoft sớm tích hợp vào windows photos.