2011-12-28 52 views
5

Tôi phải hạ thấp và giải nén một tập hợp các hình ảnh JPG có kích thước 4608 x 3456. Hiện tại, tôi đã có thể giải nén hình ảnh chính xác sang định dạng RGB và chuyển đổi chúng thành một Bitmap.Downscaling JPG trong khi giải nén JPG

Bây giờ tôi cần phải thực hiện các downscale, và từ những gì tôi đã đọc cho đến nay để hạ thấp một hình ảnh một cách chính xác nên sử dụng Bilinear Interpolation. Sau đó, tôi nên thay thế các pixel (2x2) đã được sử dụng cho nội suy bởi các điểm ảnh kết quả từ nội suy. Tôi cần khoảng 1/4 kích thước hiện tại của nó.

Tôi không quá lo lắng về chất lượng của hình ảnh bị thu nhỏ, vì tôi về tốc độ mà tại đó nó được thực hiện. Toàn bộ quá trình nên nhanh như nó có thể được.

Câu hỏi của tôi là, khi Tôi nên thực hiện phép nội suy song tuyến trong giai đoạn giải nén của JPG. Tôi có nên làm điều đó sau IDCT (Inverse Discrete Cosine Transform) hay tôi nên thực hiện nội suy trước IDCT?

Có sử dụng các hệ số DCT và thực hiện nội suy trên chúng và sau đó sử dụng các giá trị đó vào IDCT không?

+0

Ai nói bạn nên sử dụng bilinear? Đó là cách tồi tệ nhất có thể ngoài việc lấy mẫu điểm. Ngoài ra, điều quan trọng là phải chú ý đến việc xử lý đúng gamma. –

+0

@AxelGneiting Đó chỉ là những gì tôi đã tìm thấy từ nghiên cứu của tôi, nếu bạn có thể đề xuất một cách tốt hơn, hãy làm như vậy. –

+0

@AxelGneiting, trong bilinear ứng dụng cụ thể này sẽ tương đương về mặt toán học để lấy trung bình tất cả 4 pixel. Đó phải là chất lượng rất nhanh và có thể chấp nhận được. Có thể có được chất lượng cao hơn với chi phí cho tốc độ. Tương tự để xử lý gamma - kết quả tốt hơn, ít tốc độ hơn. –

Trả lời

3

Nói chung, tôi không tin rằng có bất kỳ cách hợp lý nào để bạn có thể thực hiện điều này theo hệ số DCT.

Tuy nhiên, nếu bạn muốn một hình ảnh có kích thước bằng một nửa kích thước, bạn có thể nhận được hình ảnh được in nghiêng một cách thô lỗ bằng cách loại bỏ các hệ số tần số cao và thực hiện một IDCT 4x4.

+0

Nó không phải là một ý tưởng vô lý - Tôi đã làm việc với một thư viện sử dụng phương pháp này để tạo hình thu nhỏ. Thật không may tôi không bao giờ học được các chi tiết về cách nó hoạt động. –

+0

@Oli bạn có thể cho tôi biết thêm một chút dữ liệu về cách thực hiện điều này không? –

+1

@Tony: Mỗi khối 8x8 của hình ảnh có một DCT 2D được áp dụng cho nó (tôi chắc rằng bạn đã biết điều này). Mỗi hệ số đại diện cho biên độ của một tần số không gian 2D cụ thể. Bạn muốn downsample, mà về cơ bản liên quan đến việc lọc đi các tần số cao đầu tiên (đây là những gì nội suy đang làm). Bạn sẽ nhận được một hiệu ứng tương tự bằng cách thiết lập các coeffs tần số cao 0. Ngoài ra, bạn chỉ có thể bỏ qua chúng, và giữ lại chỉ coeffs 4x4 freq thấp từ mỗi khối, và thực hiện một 4x4 IDCT trên chúng (xem trang Wikipedia về DCT cho môn toán). –