Tôi đã thực hiện bộ giải mã jpeg, nhưng tôi đã không triển khai logic đánh dấu khởi động lại. Đó là lý do tại sao chương trình của tôi không hoạt động trên một số hình ảnh (ví dụ như hình ảnh được lưu với Photoshop: File-> Save As-> jpeg). Tôi muốn triển khai logic đánh dấu khởi động lại, nhưng không có giải thích trực tuyến chi tiết về cách hoạt động của logic đánh dấu khởi động lại. Xin vui lòng bất cứ ai có thể cho tôi biết thêm về khởi động lại đánh dấu, hoặc đề nghị tôi tài nguyên trực tuyến, nơi tôi có thể đọc thêm về nó. Cám ơn!Điểm đánh dấu khởi động lại Jpeg
Trả lời
Khởi động lại điểm đánh dấu khá đơn giản. Chúng được thiết kế để cho phép đồng bộ hóa sau một lỗi. Vì hầu hết các hình ảnh JPEG được truyền qua các kênh không có lỗi, chúng hiếm khi cần thiết. Khoảng thời gian khởi động lại được xác định bằng điểm đánh dấu FFDD dưới dạng số 2 byte. Điều này cho biết có bao nhiêu MCU giữa các điểm đánh dấu khởi động lại. Khi bạn gặp dấu khởi động lại (FFD0-FFD7), đặt lại các giá trị DC (Y, Cr, Cb) thành 0 và bitstream được bắt đầu trên một ranh giới byte (sau FFDx). Nó chỉ đơn giản là một vấn đề của đếm thông qua khoảng thời gian khởi động lại hơn và hơn khi bạn giải mã hình ảnh. Các giá trị đánh dấu khởi động lại sẽ tăng từ FFD0 lên FFD7 và sau đó bắt đầu lại ở FFD0. Giá trị điểm đánh dấu chính nó không phải là quan trọng khủng khiếp, nhưng nó có thể chỉ ra nếu khối lớn dữ liệu bị thiếu. Đây là một ví dụ về cách tôi làm điều đó trong bộ giải mã của tôi. Tôi vứt bỏ các dấu hiệu khởi động lại trong trình đọc bitstream của mình.
iRestartCount = iRestartInterval;
for (y=0; y<Height_in_MCUs; y++)
{
for (x=0; x<Width_in_MCUs; x++)
{
<decode an MCU>
if (iRestartInterval) // if there is a restart interval defined
{
if (--iRestartCount == 0)
{
iRestartCount = iRestartInterval; // reset restart inverval counter
iDCPred0 = iDCPred1 = iDCPred2 = 0; // reset DC predictors
if (*iBit & 7) // adjust bitstream to start on the next byte boundary
{
*iBit += (8 - (*iBit & 7));
}
} // if restart interval expired
} // if restart interval defined
} // for x
} // for y
Cập nhật: dấu Restart nay phục vụ cho một mục đích mới - để cho phép mã hóa JPEG và bộ giải mã đa luồng. Vì mỗi "dải" của MCUs có giá trị DC được đặt lại ở đầu mỗi khoảng thời gian khởi động lại và bắt đầu trên một ranh giới byte, mỗi khoảng thời gian khởi động lại có thể được mã hóa độc lập hoặc giải mã bằng một chuỗi khác nhau. Một bộ mã hóa bây giờ có thể tùy ý chia nhiệm vụ thành N luồng và sau đó 'dán' dữ liệu cùng với các dấu khởi động lại. Đối với bộ giải mã, nó không phải là dễ dàng. Nếu có dấu khởi động lại thì mỗi khoảng thời gian có thể được gán cho một luồng khác. Nếu không có mặt, bạn vẫn có thể thực hiện một số thủ thuật giải mã trước để phân chia công việc thành nhiều chuỗi.
- 1. Phân tích tệp jpeg, SOS đánh dấu
- 2. Giao diện điểm đánh dấu
- 3. InputStream, đánh dấu(), đặt lại()
- 4. Nhận Dấu thời gian khởi động lại Windows cuối cùng?
- 5. muốn lấy nội dung của thông tin đánh dấu của một điểm đánh dấu?
- 6. Vô hiệu hoá di chuột đánh dấu chỉ trong một điểm đánh dấu của highchart
- 7. Đặt điểm đánh dấu trên tất cả các điểm đánh dấu khác trong Google Maps SDK iOS
- 8. Khởi động lại khi khởi động/Khởi động lại hành khách
- 9. Thay đổi điểm đánh dấu xung đột git
- 10. Cách nhận vị trí điểm đánh dấu trước khi kéo?
- 11. Google Maps: Hiển thị điểm đánh dấu phía trên markerclusterer
- 12. Khởi động lại Sidekiq
- 13. Thêm nhiều điểm đánh dấu với infowindows (API Google Maps)
- 14. Hoạt ảnh ngược lại để xóa đánh dấu Google Map?
- 15. Thêm ID vào các điểm đánh dấu bản đồ google
- 16. Bóng không hiển thị điểm đánh dấu bản đồ google
- 17. Xóa điểm đánh dấu khi chạm vào thông tinWindow adapter
- 18. Điểm đánh dấu Matplotlib biến mất khi edgecolor = 'none'
- 19. URL cho nhiều điểm đánh dấu trong Google Maps
- 20. kích hoạt điểm đánh dấu bản đồ google nhấp
- 21. Chế độ org có tiếp tục danh sách được đánh số thay vì khởi động lại
- 22. Điểm đánh dấu Bouncy trong Google Maps v3
- 23. Mục đích của giao diện điểm đánh dấu là gì?
- 24. highchart lấy màu và điểm đánh dấu là
- 25. Căn giữa điểm đánh dấu bản đồ trong Android
- 26. đặt điểm đánh dấu biểu tượng bằng vạch cao
- 27. Đặt LongClickListener trên bản đồ Điểm đánh dấu
- 28. Android OverlayItem.setMarker(): Thay đổi điểm đánh dấu cho một mục
- 29. Tờ rơi: Thêm liên kết vào các điểm đánh dấu
- 30. Nhiều Điểm đánh dấu trên Bản đồ Google
Bạn có thể cho tôi biết thêm chi tiết triển khai và logic không? – MrD
nếu nó là một hình ảnh đa thành phần với xen kẽ thì sao? – adikshit
@adikshit - Theo như tôi đã thấy, khoảng thời gian khởi động lại đề cập đến MCUs (đơn vị mã hóa tối thiểu) bất kể cấu hình là gì. Đối với ảnh màu 3 thành phần (Y/Cb/Cr), khoảng thời gian khởi động lại đề cập đến các nhóm gồm 3 khối DCT. Ví dụ, một khoảng 100 sẽ có nghĩa là 300 khối DCT (100 MCUs). – BitBank