Vin*_*zzz 2 image-processing ios gpuimage
我正在进行一些静态图像处理,而GPUImage是一个非常棒的框架(谢谢Brad Larson!).
我明白那个 :
GPUVideoCamera),RGB - > YUV可以硬编码到片段着色器(例如:GPUImageChromaKeyFilter)我有很多图像处理步骤,一些可以基于YUV,另一些基于RGB.基本上,我想混合RGB和YUV滤镜,所以我的一般问题是:
这种连续转换的成本/信息损失是多少,您会推荐任何设计吗?
谢谢!
(PS:iPhone4 YUV-> RGB转换和AVCaptureStillImageOutput像素格式有什么问题?)
在GPUImage中使用YUV是一个相当新的补充,我还在尝试一些东西.我想拉入YUV来尝试提高滤波器性能,减少内存使用,并可能提高色彩保真度.到目前为止,我的修改只实现了这三个中的一个.
如您所见,我从相机中拉出YUV帧,然后决定在过滤器管道的后续阶段如何处理它们.如果摄像机输入的所有滤镜仅需要单色输入,则摄像机输入将仅在管道下方发送未处理的Y通道纹理.如果任何滤镜需要RGB输入,相机输入将从YUV-> RGB执行基于着色器的转换.
对于采用单色的滤镜,这可以通过消除RGB转换阶段(由AV Foundation在请求BGRA数据时或在我的转换着色器中完成)以及RGB的冗余转换返回到显着的性能提升.亮度.在iPhone 4上,在720p帧上运行的Sobel边缘检测滤波器的性能从使用RGB输入的每帧36.0 ms到使用直接Y通道的15.1 ms.这还避免了由于将YUV转换为RGB并返回到亮度的舍入而导致的轻微信息丢失.8位色彩通道只有很大的动态范围.
即使使用RGB输入,这种转换从AV Foundation移动到我的着色器中也会带来性能提升.在iPhone 4S上,使用我的转换着色器而不是AV Foundation的内置BGRA输出,对1080p输入运行饱和滤波器从每帧2.2 ms降至每帧1.5 ms.
两种RGB方法之间的内存消耗几乎相同,所以我正在尝试一种改进方法.对于单色输入,由于输入的纹理尺寸较小,因此内存使用量会显着下降.
实现全YUV管道更具挑战性,因为您需要为Y和UV平面维护并行渲染路径和着色器,并为两者提供单独的输入和输出纹理.从RGB中提取平面YUV非常棘手,因为您需要以某种方式从一个输入中提取两个输出,这在OpenGL ES中本身不受支持.你需要做两个渲染过程,这是相当浪费的.交错式YUV444作为多级管道的颜色格式可能更实用,但我还没有玩过这个.
再一次,我只是开始修补这个.
| 归档时间: |
|
| 查看次数: |
2690 次 |
| 最近记录: |