2012-10-12 30 views
0

在我的項目中使用GPUImage,我需要一種有效的方式來獲取列總和。天真的方式顯然是檢索原始數據並添加每列的值。任何人都可以爲此提出更快的方法嗎?要做到這一點GPUImage獲取圖像列的總和

回答

1

的一種方法將是使用予採取與GPUImageAverageColor類(如在this answer描述的)的方法中,只代替減少每幀的總大小在每個步驟中,只爲一名維要這樣做圖片。

平均彩色濾光片通過在X和Y兩個像素中逐步降低四倍來確定整個圖像的平均顏色,每個步驟將16個像素平均爲一個像素。如果在單一方向上操作,則應該能夠使用硬件插值法以每步一個方向減少18倍的性能。最後一步可能需要在更小的圖像上進行快速的基於CPU的迭代,或者需要對該着色器進行調整後的版本,將列中最後幾個像素一起放入該列的最終結果像素中。

您注意到我一直在討論這裏的平均值,因爲任何OpenGL ES操作的輸出值都需要使用顏色,每個通道只有0-255範圍的顏色。總和很容易溢出,但您可以使用平均值作爲總和的近似值,並使用更有限的動態範圍。

如果您只關心一個顏色通道,則可以將更大的值編碼到RGBA通道中,並以這種方式保持32位和。

除了我上面描述的,你可以看看在加速框架的幫助下執行這個總和。雖然可能不如基於着色器的縮減速度快,但它可能足夠滿足您的需求。