2010-05-31 31 views
6

Bir HSLS piksel gölgelendiricisi kullanarak, görüntüdeki tüm piksellerin toplamını nasıl verimli bir şekilde hesaplayabilirim? WPF shader efekti olarak çağırabileceğim Pixel Shader 2.0 ile ilgileniyorum.Tüm piksellerin etkili piksel gölgelendiricisi toplamı

+0

"Tüm piksellerin toplamı" derken ne demek istiyorsunuz - tüm R/G/B değerlerinin toplamı mı yoksa farklı bir şey mi? –

cevap

-1

WPF'deki etkiler görsel sonuç elde etmek için çok daha uygundur. Farklı bir hesaplama türü için kullanmak istediğiniz gibi geliyor, bunun için görüntü sonuçlarını RenderTargetBitmap'a ihtiyaç duyacaksınız. GPGPU için tasarlanmış bu projelere bakmak isteyebilirsiniz.

Brahma

OpenTK

Accelerator Ben OpenTK içinde OpenCL bağlamaları durumunu bilmiyorum. DirectCompute ve CUDA gibi diğer teknolojiler de dikkate değer olabilir.

6

Gölgelendiricileri kullanmayan daha basit bir çözüm var: görüntüyü bir doku olarak yükleyin, bir mipmap zinciri oluşturun ve son mipmap değerini (1x1 piksel) geri okuyun. Bu hile, bir sahnenin (örneğin, HDR tonlama uygulamasının uygulanması için) ortalama brigthness'ini hesaplamak için kapsamlı olarak kullanılır. Doğruluk ve verimliliğe doğrulukta değer veriyorsanız harika bir numaradır.

+0

WPF'deki bir görüntüden tam olarak nasıl bir mipmap zinciri oluşturursunuz, bu bir piksel gölgelendiricisini uygulamak kadar hızlı mı? – luvieere

+0

Bir kutu filtresi kullanarak görüntüyü 1x1'e kadar yeniden boyutlandırarak. –

+0

Bunun için teşekkürler. Dokularm biraz dejenere (yüksek hassasiyetli sayısal FFT'ler) ve bunun yerine üçgen filtrenin kullanılması, benim için yeterince iyi olan çok iyi sonuçlar verdi (artı veya eksi% 1 eksi). Ancak kutu filtre kapalıydı. – Thomas

3

görüntüdeki r/g/b kanal değerlerini toplamak istediğimizi varsayalım (ve orijinal pikselleri yok varsayılarak) - burada kısmi bir çözüm:

  1. Her 10. piksel ortalama renk hesaplamak olacaktır 10 komşu piksel ve bu ortalama rengi görüntü üzerine koy.
  2. Daha sonra her 10 pikselin CPU tarafında toplam
    Pix_Value*10
    .

Bu durumda, yalnızca CPU tarafında toplama piksel değerleriyle karşılaştırıldığında yaklaşık 10x hız artışı elde ederiz.

+0

Bu güzel bir şey, +1 – luvieere

+0

İşlemciyi dahil etmeye gerek yok, her şey GPU'da yapılabilir. "verimsiz" bu yaklaşımı tanımlamaya başlamaz, CPU-GPU iletişiminin maliyetini bile dikkate almaz. -1 – Thomas