일반 C++을 사용하여 끊김없는 블렌딩을위한 이미지 혼합 방법을 구현했습니다. 이제이 코드를 GPU (OpenGL ES 2 Shaders for mobile devices 사용)로 변환하고 싶습니다. 기본적으로이 방법은 각 이미지에 대해 가우스 및 라플라시안 피라미드를 생성 한 다음 저해상도에서부터 최상위로 결합합니다 (Burt et al. 1983의 "라플라시안 피라미드를 컴팩트 이미지 코드"참조).GPU 기반 Laplacian 피라미드
내 문제는 Laplacian 피라미드 레벨이 음수 값을 가질 수 있지만 내 장치가 float 또는 정수 유형 텍스처 (예 : ORB_texture_float 확장명 사용)를 지원하지 않는다는 것입니다.
GPU 기반 피라미드를 다루는 논문을 찾았지만 정말 유용한 것을 찾지 못했습니다.
- GPU에서 어떻게 이러한 피라미드를 효과적으로 구현할 수 있습니까?
- 이전 레벨을 반복하지 않고 Gaussian/Laplacian 피라미드 레벨을 계산할 수 있습니까?
감사합니다,
편집 하지 않는 두 개의 패스 (표지판 하나, 값 하나)를 사용하여 제외 GPU에 완전히 라플라시안 피라미드를 계산 할 "좋은"방법이없는 것처럼 보인다 이미지의 데이터 범위가 [0..255] 사이 인 경우 서명 된 유형 (예 : ARB_texture_float) 또는 바이트보다 큰 유형을 지원합니다. 내 Laplacian Pyramid는 ARB_texture_float 확장 기능을 갖춘 GPU에서 완벽하게 실행되지만 확장 기능을 사용하지 않으면 범위 압축으로 인해 피라미드가 "잘못"됩니다. 라플라스와의 픽셀의 부호를 저장하는 또 다른 피라미드의 기울기의 크기를 포함하는 하나의 피라미드 -
힌트를 보내 주셔서 감사합니다. 나는 라플라스 피라미드를 두 번 (표지판에 하나, 절대 값으로 하나) 계산해야한다는 것이 맞습니까? – Hyndrix
댓글을 다시 생각한 후에 알파 채널에 RGB 기호를 인코딩 할 수도 있습니다 (사용하지 않음). 피라미드를 두 번 계산하는 것보다 속도가 느릴 수 있지만 장치에 너무 적은 메모리가 저장됩니다. – Hyndrix
알파 채널을 사용하는 것이 좋습니다. 이제 피라미드를 두 번 계산하거나 두 개의 피라미드를 저장할 필요가 없습니다. 필터를 통해 Laplacian 값을 계산하고 부호가있는 변수에 저장하십시오. 부호있는 변수의 abs()를 r/g/b에 두십시오. 부호있는 변수를 텍스처에 저장된 값으로 나눈 다음 결과에 1을 더하고 알파 채널에 저장합니다.알파의 값이 0이고 원래의 그래디언트가 음수이면 2 인 경우 그래디언트가 양수입니다. –