2009-07-14 4 views
2

나는 파이프 꿈일지도 모르는 질문이 있지만, 필자의 동료 인 Stack Overflowers가 나를 도와 줄 수 있는지 알고 싶었습니다.GDI + 대신 그래픽 카드를 사용하여 이미지 조작

내가 일하는 회사에서 매월 억 개의 개의 이미지 조작을합니다. 기본적으로, 우리는 방대한 이미지를 가지고 그것을 256 픽셀의 정사각형 이미지로 슬라이스하고, 그들을 양자화하여 png로 저장하고, 다음 매머드 이미지로 이동합니다. 가능한 한 빨리이 작업을 수행하기 위해 숫자 기법을 사용합니다. 현재는 속도가 매우 빠르지 만 속도가 빨라질 수있는 기회가 있다고 생각합니다.

응용 프로그램 자체는 .Net 2.0이며 큰 이미지의 다양한 바이트를 반복하고 각 작은 이미지의 바이트를 읽고 양자화 알고리즘을 실행 한 후 GDI를 사용하여 이미지를 저장합니다. 우리는이 응용 프로그램을 실행하는 수십 대의 기계를 가지고 있으며 모두 Nvidia Geforce 8 비디오 카드 (또는 그 이상)를 가지고 있습니다.

위의 작업 중 일부 또는 전부를 수행하기 위해 CPU 대신 GPU를 사용할 수 있습니까? 그렇다면 어떻게해야합니까? 불행히도 나는 이런 식으로 코딩 한 적이 없기 때문에 누구든지 나를 도울 수 있다면 꽤 철저히 (그리고 천천히) 설명해야 할 수도 있습니다.

+0

우연히 위성 이미지를 처리하지 않으십니까? – hannson

+0

실제로는 아니지만 교장이 동일합니다. – Ash

답변

1

몇 가지 기술로보고 :

  1. Windows Imaging Components. 이것은 내가 GPU를 사용한다고 생각하지 않기 때문에 당신이 뭘했는지 정확하게 알 수는 없지만 (비록 내가 wong 일 수는 있지만) GDI +보다 훨씬 빠르다.

  2. Direct2D. 이것은 많은 드로잉 작업에 GPU를 사용하고 Windows Imaging Components와 잘 통합됩니다. 그러나 설명을 통해 GPU에 최적화 된 드로잉 작업이 필요한 작업과 정확히 일치하는지 여부는 분명하지 않습니다.

위에는 이미지 조작을 위해 픽셀 쉐이더를 사용할 수 있습니다. 이것은 내가 탐구하지 않은 부분이므로 다른 사람들이 논평 할 수 있도록 남겨 두겠습니다.

다른 말로하면 Windows Imaging Components는 PNG로드/저장 병목 현상을 크게 줄여야합니다. 그것이 제공하는 작업은 아마도 또한 GDI +보다 훨씬 더 최적의 방법으로 이미지를 조각 내리는 데 도움이 될 것입니다. Direct2D 및/또는 픽셀 쉐이더는 픽셀 수준의 조작에 도움이됩니다. 픽셀 쉐이더는 이미지에 필요한 색상 양자화 작업을 직접 수행 할 수있는 방법이 없으면 필요할 것입니다.

2

대규모를 정의 하시겠습니까? 그것은 가능한 사용의 CUDA입니다

(. 즉, 대규모는 상대적입니다) - NVIDIA GPU의 -

http://developer.download.nvidia.com/compute/cuda/sdk/website/projects/dxtc/doc/cuda_dxtc.pdf

+0

+1 쿠다에 대해 알고 있습니다. –

+0

쿠다 (CUDA)는 이미지를 잘라내 기보다는 이미지 압축에 관한 것 같습니다. 프로세스가 끝날 때 압축은 차갑지 만 (문제의 일부) * 나는 동안 여전히 PNG 출력이 필요합니다. 큰 이미지는 제가 자르고있는 이미지가 8192px X 1024px입니다. – Ash