2010-05-31 12 views
6

Làm cách nào tôi có thể tính hiệu quả tổng của tất cả các pixel trong một hình ảnh, bằng cách sử dụng trình đổ bóng pixel HSLS? Tôi quan tâm đến Pixel Shader 2.0, mà tôi có thể gọi là hiệu ứng đổ bóng WPF.Hiệu ứng đổ bóng pixel hiệu quả của tất cả các pixel

+0

Ý của bạn là gì bằng cách nói 'tổng của tất cả các pixel' - đó là tổng của tất cả các giá trị R/G/B hoặc cái gì khác? –

Trả lời

-1

Hiệu ứng trong WPF phù hợp hơn nhiều để tạo ra kết quả trực quan. Có vẻ như bạn muốn sử dụng chúng cho một loại tính toán khác, để làm điều này, bạn sẽ cần phải xử lý kết quả hình ảnh như dữ liệu này sẽ cần RenderTargetBitmap mà sẽ được thực hiện trong phần mềm anyway. Bạn có thể xem các dự án này được thiết kế cho GPGPU.

Accelerator

Brahma

OpenTK Tôi không biết tình trạng của các ràng buộc OpenCL trong OpenTK. Các công nghệ khác như DirectCompute và CUDA có thể đáng xem.

6

Có một giải pháp đơn giản hơn nhiều mà không sử dụng trình đổ bóng: tải hình ảnh dưới dạng kết cấu, tạo chuỗi mipmap và đọc lại giá trị của mipmap cuối cùng (1x1 pixel). Thủ thuật này được sử dụng trong các trò chơi rộng rãi để tính toán, ví dụ, độ chẵn trung bình của một cảnh (để áp dụng HDR tonemapping). Đó là một thủ thuật tuyệt vời nếu bạn coi trọng tính đơn giản và hiệu quả về độ chính xác.

+0

Làm cách nào để tạo chuỗi mipmap từ một hình ảnh trong WPF, nhanh như khi áp dụng trình đổ bóng pixel? – luvieere

+0

Bằng cách đổi kích thước hình ảnh bằng cách sử dụng 1x1 bằng bộ lọc hộp. –

+0

Cảm ơn bạn vì điều này. Kết cấu của tôi là phần nào thoái hóa (độ chính xác cao FFT's) và sử dụng bộ lọc tam giác thay vì cho kết quả rất tốt (cộng hoặc trừ 1% của kết quả mong muốn) đó là đủ tốt cho tôi. Tuy nhiên, bộ lọc hộp đã bị tắt. – Thomas

3

Giả sử rằng bạn muốn tổng hợp các giá trị kênh r/g/b trong hình ảnh (và giả định rằng bạn có thể phá hủy pixel gốc) - đây là giải pháp một phần của tôi:

  1. Mỗi pixel thứ 10 sẽ tính toán màu trung bình 10 pixel lân cận và đặt màu trung bình này vào hình ảnh.
  2. Sau đó, trong tổng số CPU
    Pix_Value*10
    của mỗi pixel thứ 10.

Trong trường hợp này, chúng tôi tăng tốc độ gấp 10 lần so với tổng giá trị pixel chỉ ở phía CPU.

+0

Thật tuyệt vời, +1 – luvieere

+0

Không cần phải liên quan đến CPU, mọi thứ có thể được thực hiện trên GPU. "không hiệu quả" không bắt đầu mô tả cách tiếp cận này, nó thậm chí còn không xem xét chi phí truyền thông CPU-GPU. -1 – Thomas