Apakah mungkin memalsukan gambar melalui blur?

9

Saya menggunakan libGDX untuk game android; sejauh yang saya tahu, itu tidak memiliki API untuk kabur.

Membaca di Wikipedia, sepertinya blur dibentuk dengan mengatur setiap piksel nilai RGB ke rata-rata semua nilai yang berdekatan. Yang sepertinya tidak mudah dilakukan di libGDX - mengatur data piksel.

Jadi pertanyaan saya sederhana:

Apakah mungkin memalsukan (yang layak) hanya menggunakan gambar?

Saya berpotensi overlay beberapa gambar (dalam jumlah, transparansi, jenis); tapi bisakah saya membuat blur yang meyakinkan seperti ini?

Saya tergoda untuk mengatakan "tidak," tetapi mungkin orang lain telah mencapai hal serupa. Untuk kejelasan, saya ingin satu set gambar generik 1+ saya dapat membuat di atas gambar APA PUN untuk menghasilkan efek seperti blur.

ashes999
sumber
Pertanyaan bagus! Saya sudah memikirkan hal yang sama, saya sendiri!
Daniel berkata Reinstate Monica
@DantheMan di platform mana?
ashes999
Unity3d atau bahasa bayangan CG.
Daniel berkata Reinstate Monica
Anda menyarankan overlay gambar transparan satu sama lain. Jika Anda sedikit mengimbangi mereka, Anda akan menjadi rata-rata piksel, mencapai blur
Jeff
1
@ ashes999, jika Anda sedang mencari "gambar ajaib" yang dapat di-overlay pada hal-hal untuk membuat mereka tampak buram, itu tidak ada. Alpha-blending (overlaying) tidak sama dengan mengaburkan, maaf.
Nathan Reed

Jawaban:

7

Jika Anda dapat secara aduk memadukan gambar dan mengalikannya dengan konstanta saat melakukannya, maka Anda dapat melakukan blur. Alih-alih rata-rata piksel di lingkungan, Anda akan rata-rata beberapa salinan gambar yang dipindahkan oleh sejumlah kecil piksel dari satu sama lain. Atau lebih umum, Anda bisa melakukan blur Gaussian atau jenis blur apa pun, dengan mengendalikan bobot - yaitu, mengalikan setiap salinan gambar yang dipindahkan dengan konstanta saat ditambahkan ke yang lainnya.

Secara algoritmik, tampilannya akan seperti ini:

clear output_image to 0
foreach offset, weight in filter_kernel:
    output_image += input_image * weight, shifted by offset

Anda akan menggunakan offset dan bobot yang sama seperti pada cara standar melakukan blur. Ada banyak artikel di Web tentang cara menghasilkan bobot untuk Gaussian blur, misalnya.

Nathan Reed
sumber
+1 jawaban yang bagus. Dalam kasus saya, saya tidak memiliki kemampuan aditif.
ashes999
0

Kabur bisa menjadi operasi yang mahal, mungkin pendekatan yang berbeda bisa berhasil, misalnya:

  1. Simpan beberapa salinan gambar yang kabur dalam beberapa arah yang berbeda (mis. Kelipatan 45 derajat), lalu tampilkan gambar yang paling cocok saat runtime. Ini akan menawarkan kinerja tertinggi, dengan biaya penggunaan memori.
  2. Skala gambar ke bawah dan kemudian kembali ke ukuran penuh dengan anti-aliasing / smoothing. Seringkali ini dapat dilakukan dengan perangkat keras grafis dengan dampak kinerja yang sangat kecil.
Luke Van In
sumber
Ini tidak akan berfungsi, karena itu harus dinamis, yaitu saya tidak bisa mengetahui pengaturan layar yang tepat sebelumnya.
ashes999