2012-10-12 4 views
0

내 프로젝트에서 GPUImage를 사용하고있어 효율적인 방법으로 열 합계를 가져와야합니다. 순진한 방법은 분명히 원시 데이터를 검색하고 모든 열의 값을 추가하는 것입니다. 아무도 더 빠른 방법을 제안 할 수 있습니까?GPUImage 이미지의 열 합계를 얻으려면

답변

1

이렇게하려면 GPUImageAverageColor 클래스 (this answer에서 설명)를 사용하는 방법을 사용하는 것이 좋습니다. 각 단계에서 각 프레임의 전체 크기를 줄이기보다는 한 영상.

평균 색상 필터는 X와 Y에서 4 배 단계로 내려 가서 각 단계에서 평균 16 픽셀을 하나씩 계산하여 전체 이미지의 평균 색상을 결정합니다. 단일 방향으로 작동하는 경우, 하드웨어 보간을 사용하여 단계 당 단 한 방향으로 18 배의 성능 향상을 얻을 수 있어야합니다. 마지막 단계는 더 작은 이미지에서 빠른 CPU 기반 반복 또는이 열의 마지막 몇 픽셀을 함께 모아 해당 열의 최종 결과 픽셀로 가져 오는이 셰이더의 조정 된 버전을 요구할 수 있습니다.

OpenGL ES 작동에 대한 출력 값은 채널 당 0-255 범위 만있는 색상으로되어 있어야하기 때문에 여기서는 평균화에 대해 설명했습니다. 합계가 쉽게 오버플로 될 수 있지만 합계의 근사치로 평균값을 사용할 수 있으며 동적 범위는 제한적입니다.

하나의 색상 채널에만 관심이 있다면 RGBA 채널에 더 큰 값을 인코딩하고 그런 식으로 32 비트 합계를 유지할 수 있습니다.

앞서 설명한 내용 이외에도 Accelerate 프레임 워크를 사용하여이 합계를 수행 할 수 있습니다. 셰이더 기반 축소를 수행하는 것만 큼 빠르지는 않지만 아마도 사용자의 요구에 충분히 적합 할 수 있습니다.

관련 문제