Sử dụng Độ chính xác cao hơn (số nguyên không dấu 8 bit) Hình ảnh được đệm cho Chiều cao trong Java


8

Tôi đang tạo một sơ đồ chiều cao cho mỗi quad trong quadtree của tôi trong openCL. Cách tôi tạo hình ảnh như sau:

DataBufferInt dataBuffer =
            (DataBufferInt)img.getRaster().getDataBuffer();
      int data[] = dataBuffer.getData();
      //img is a bufferedimage 
        inputImageMem = CL.clCreateImage2D(
        context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
        new cl_image_format[]{imageFormat}, size, size,
        size * Sizeof.cl_uint, Pointer.to(data), null);

Điều này hoạt động tốt, nhưng vấn đề chính là khi các hình tứ giác ngày càng nhỏ hơn, định dạng 8 bit của hình ảnh được đệm bắt đầu gây ra các vấn đề "bước" không thể chịu đựng được như dưới đây:

nhập mô tả hình ảnh ở đây

Tôi đã tự hỏi nếu có một cách khác tôi có thể đi về làm điều này?

Cảm ơn vì thời gian bạn dành cho tôi.


Đây có phải là "bước" bạn đang nói về? i.imgur.com/Sx9egmm.png?1
MichaelHouse

Vâng, đó là nó.
pl12

Bạn có thể thay đổi tiêu đề thành một cái gì đó liên quan nhiều hơn đến câu hỏi của bạn? Tôi đã cố gắng đưa ra một cái gì đó nhưng không muốn giải thích sai câu hỏi của bạn.
MichaelHouse

Oh yea chắc chắn
pl12

Tại sao bạn phải sử dụng BufferedImage? Định dạng hình ảnh đầu vào của bạn là gì?
msell

Câu trả lời:


1

Bạn đang sử dụng lọc kết cấu khi đọc bản đồ chiều cao? Tôi hy vọng rằng một bộ lọc song tuyến sẽ làm mọi thứ trơn tru hơn một chút.

Nếu bạn vẫn cần độ chính xác cao hơn thì hãy thay đổi định dạng hình ảnh thành một cái gì đó như CL_UNORM_INT16 hoặc CL_FLOAT - xem http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/cl_image_format.html

Tôi không chắc chắn làm thế nào bạn làm điều đó từ Java.


Phải, đó là vấn đề: Tôi không thể tìm ra cách sử dụng bất cứ thứ gì ngoài số nguyên 8 bit với BufferedImage.
pl12

Vì Java không có hỗ trợ OpenCL riêng, nên có thể giúp biết thư viện nào bạn đang sử dụng. Tùy chọn khác sẽ là sử dụng hình ảnh có chiều rộng gấp đôi và giải mã nó trên GPU như nói (pixel [x] /256.0 + pixel [x + 1]).
Adam

Tôi đã thử sử dụng phép nội suy song tuyến nhưng không có may mắn ... Tôi chỉ đang sử dụng Java OpenCL (JOCL)
pl12

Phiên bản Java của OpenCL dường như cũng hỗ trợ các định dạng này. cl_image_formatcó một image_channel_data_typethành viên có thể được sử dụng để chỉ định định dạng dữ liệu (ví dụ: CL_FLOATv.v.)
bummzack

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.