2008-09-16 30 views
8

Quá trình mã hóa nén JPEG tách một hình ảnh nhất định thành các khối 8x8 pixel, làm việc với các khối này trong các lần nén mất mát và mất mát trong tương lai. Nó cũng được đề cập rằng nếu hình ảnh là một khối 1MCU nhiều (được định nghĩa là một đơn vị mã hóa tối thiểu, 'thường là 16 pixel trong cả hai hướng') mà thay đổi lossless cho một JPEG có thể được thực hiện. [source]Có chất lượng, kích thước tệp hay lợi ích khác đối với kích thước JPEG là bội số của 8px hoặc 16px không?

Tôi đang làm việc với hình ảnh sản phẩm và muốn biết cả hai và có bao nhiêu lợi ích từ việc sử dụng bội số của 16 trong kích thước hình ảnh cuối cùng của tôi (ví dụ: sử dụng hình ảnh có kích thước 480px x 360px) không phải bội số của 16 (chẳng hạn như 484x362). Trong ví dụ này, tôi không quan tâm đến việc sửa đổi, chỉnh sửa hoặc sửa lại hình ảnh cuối cùng.

Để thử để có được gần gũi hơn với một câu trả lời cụ thể mà tôi biết có phải là chủ yếu chỉ nói chung chung: Cho một hình ảnh 480x360 đó là 64k và lưu ở chất lượng tối đa trong Photoshop [example]:

  • Tôi có thể mong đợi bất kỳ tổn thất chất lượng từ một hình ảnh có kích thước 484x362
  • Tôi có thể mong đợi số lượng kích thước tệp nào (ví dụ: không gian bổ sung sẽ là pixel trắng)
  • Có bất kỳ nhược điểm nào khác để phát triển lớn hơn lưới 8px không?

Tôi biết tùy ý sử dụng ví dụ cụ thể đó, nhưng vẫn hữu ích (đối với tôi và bất kỳ ai khác có thể cân nhắc kích thước hình ảnh) để hiểu mức độ thỏa hiệp mà tôi sẽ giải quyết Lưới -8px.

Vấn đề chính ở đây là một cuộc tranh luận mà tôi đã có là hình ảnh chia nhỏ 8 pixel có chất lượng cao hơn hình ảnh không chia hết cho 8 pixel.

Trả lời

18

8 pixel là điểm ngắt. Lý do là vì hình ảnh JPEG đơn giản là một mảng các khối DCT 8x8; nếu độ phân giải hình ảnh không phải là mod8 theo cả hai hướng, thì bộ mã hóa phải làm tròn các cạnh lên đến độ phân giải mod8 tiếp theo. Điều này trong thực tế không phải là rất tốn kém bit-khôn ngoan; những gì tệ hơn nhiều là các trường hợp khi một hình ảnh có các đường màu đen sắc nét (chẳng hạn như một hình ảnh hộp thư) mà không nằm trên ranh giới khối. Điều này đặc biệt có vấn đề trong mã hóa video. Lý do cho vấn đề này là việc biến đổi tần số của một đường sắc nét là sự phân bố các hệ số Gaussian - dẫn đến một số lượng lớn các bit để mã hóa.

Đối với những người tò mò, phương pháp phổ biến nhất của các cạnh đệm trong nén nội (chẳng hạn như ảnh JPEG) là để phản ánh các dòng pixel trước mép. Ví dụ, nếu bạn cần phải pad ba dòng và dòng X là cạnh, dòng X + 1 bằng dòng X, dòng X + 2 bằng với dòng X-1, và dòng X + 3 bằng với dòng X- 2. Điều này khá hiệu quả giảm thiểu chi phí trong các hệ số biến đổi của các dòng phụ. Tuy nhiên,

Trong mã hóa liên tiếp, thuật toán đệm thường đơn giản là sao chép dòng cuối cùng, vì phương pháp nhân bản không hoạt động tốt cho nén liên tiếp, chẳng hạn như trong nén video.

2

Kích thước hình ảnh là bội số của 8 hoặc 16 sẽ không ảnh hưởng đến kích thước trên đĩa, nhưng bạn có thể tiết kiệm đáng kể nếu bạn có thể xếp các nội dung trực quan vào lưới 8x8 pixel, chẳng hạn như nếu có một mẫu lặp lại hoặc kết cấu trong hình ảnh.

2

JPG có kích thước nhân với 8 cũng có thể được xoay/lật mà không bị mất chất lượng. Ví dụ gthumb có thể làm điều này trên Linux.

1

Điều gì Tometzky cho biết. Nếu bạn không có nhiều chính xác, các thuật toán lật và xoay không mất hiệu quả sẽ không hoạt động. Đó là bởi vì padding ở bên phải/dưới cùng mà có thể được bỏ qua một cách an toàn bây giờ kết thúc ở bên trái/đầu, nơi nó không thể.

3

Đôi khi bạn cần phải sử dụng 16 pixel ranh giới thay vì 8 vì subsampling; mỗi điểm ảnh thứ 2 được vứt bỏ trong quá trình mã hóa và các khối DCT 8x8 bắt đầu là 16x16 và sẽ giải mã trở lại thành 16x16. Đây không phải là vấn đề ở cài đặt chất lượng cao nhất.

Các vấn đề liên quan