Menggunakan Presisi Tinggi (dari integer 8-bit tanpa tanda tangan) Gambar Buffer untuk Ketinggian di Jawa


8

Saya membuat peta ketinggian untuk setiap quad di quadtree saya di openCL. Cara saya membuat gambar adalah sebagai berikut:

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);

Ini berfungsi dengan baik tetapi masalah utamanya adalah ketika paha depan semakin kecil dan lebih kecil, format 8-bit dari gambar buffered mulai menyebabkan masalah "melangkah" yang tak tertahankan seperti yang terlihat di bawah ini:

masukkan deskripsi gambar di sini

Saya bertanya-tanya apakah ada cara alternatif saya bisa melakukan ini?

Terima kasih untuk waktunya.


Apakah ini "loncatan" yang sedang Anda bicarakan? i.imgur.com/Sx9egmm.png?1
MichaelHouse

Ya, benar.
pl12

Bisakah Anda mengubah judul menjadi sesuatu yang lebih terkait dengan pertanyaan Anda? Saya mencoba untuk membuat sesuatu tetapi tidak ingin salah menafsirkan pertanyaan Anda.
MichaelHouse

Oh ya pasti
pl12

Mengapa Anda harus menggunakan BufferedImage? Apa format gambar input Anda?
msell

Jawaban:


1

Apakah Anda menggunakan pemfilteran tekstur saat membaca peta ketinggian? Saya berharap bahwa filter bilinear akan memuluskan sedikit.

Jika Anda masih membutuhkan ketelitian yang lebih baik maka ubah format gambar menjadi sesuatu seperti CL_UNORM_INT16 atau CL_FLOAT - lihat http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/cl_image_format.html

Saya tidak begitu yakin bagaimana Anda melakukannya dari Jawa.


Ya itu masalahnya: Saya tidak tahu bagaimana cara menggunakan selain integer 8-bit dengan BufferedImage.
pl12

Karena Java tidak memiliki dukungan OpenCL asli, mungkin membantu untuk mengetahui perpustakaan mana yang Anda gunakan. Pilihan lain adalah menggunakan gambar lebar ganda, dan mendekode di GPU seperti katakanlah (pixel [x] /256.0 + pixel [x + 1]).
Adam

Saya mencoba menggunakan interpolasi bilinear tanpa hasil ... Saya hanya menggunakan Java OpenCL (JOCL)
pl12

OpenCL versi Java juga mendukung format ini. cl_image_formatmemiliki image_channel_data_typeanggota yang dapat digunakan untuk menentukan format data (mis. CL_FLOATdll . )
bummzack

2
docs.oracle.com/javase/7/docs/api/java/awt/image/… mengatakan BufferedImage mendukung TYPE_USHORT_GREY yang 16-bit.
Adam
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.