[그래픽스 렌더링 개념] 가우시안 블러
가우시안 블러를 이해하기전에 Seperable Convolution을 이해해야합니다. 개념은 다음과 같습니다.
1. 합성곱(Convolution) 이해
일반적인 2D 합성곱은 이미지에서 각 픽셀에 커널(kernel)이라는 작은 행렬을 적용하여 새로운 값을 계산하는 과정입니다. 이를 통해 이미지에 다양한 효과를 줄 수 있습니다.
예를 들어, 3x3 커널을 사용하는 합성곱의 경우, 각 픽셀 주변 8개의 이웃 픽셀을 포함한 9개의 픽셀에 커널을 적용하여 새로운 픽셀 값을 계산합니다.
2. 분리 가능한 합성곱 (Separable Convolution)
분리 가능한 합성곱은 이러한 2D 합성곱을 두 번의 1D 합성곱으로 분리할 수 있는 경우를 말합니다. 즉, 2D 커널을 한 번에 적용하지 않고, 가로 방향과 세로 방향으로 각각 따로 합성곱을 수행하는 방식입니다.
장점
- 효율성: 2D 합성곱을 직접 계산하는 것보다, 두 번의 1D 합성곱을 계산하는 것이 연산량이 적습니다. 2D 합성곱은 m × n 크기의 커널을 사용할 때 m × n개의 곱셈을 해야 하지만, 분리 가능한 경우에는 m + n개의 곱셈만 필요합니다. 예를 들어 3x3 커널을 사용할 때는 9개의 곱셈이 필요하지만, 분리 가능한 경우 6개의 곱셈으로 줄어듭니다.
- 속도: 연산량이 줄어들어 속도가 빨라집니다. 특히, 큰 필터를 사용할 때 성능 개선이 두드러집니다.
1) 가로 Seperable Convolution의 예시를 들어보겠습니다. 이미지는 가로*세로만큼의 픽셀로 이루어져있고 블러 처리를 하기위해서는 각 픽셀당 가로의 주변 값들을 평균내어 하나의 픽셀에 다시 넣는 것입니다. 예를들어 pixels[5][50]이 있다면 pixels[5][48]~pixels[5][52]를 평균내어 다시 pixels[5][50]에 넣는 작업입니다. 사진을 예시로 들어보겠습니다.


출처 : 홍정모의 컴퓨터 그래픽스 세삭코스
이렇게 가로로 블러 처리가 되었습니다. 보통 한번만 계산한다고 되는 것은 아니라 10번 이상은 반복해야 이런 결과가 나옵니다.
2) 세로 Seperable Convolution을 예시로 들어보겠습니다. 이번엔 가로대신 세로이기 때문에,위 아래로 블러 처리가 됩니다.

3) 가로와 세로 둘다 적용해 보곘습니다.

출처 : 홍정모의 컴퓨터 그래픽스 세삭코스
3. 가우시안 블러
위의 이미지는 그냥 주변의 값들 5개를 평균내서 각 픽셀에 대체한 것입니다. 가우시안 블러란 주변의 값들에 가중치를 가장 가까운 쪽에 크게 매기고 멀리 떨어질 수록 작게 매겨서 계산합니다. 예를들어 pixels[5][50]이 있다면 float weights[5] = {0.05, 0.15, 0.4, 0.15, 0.05} 이렇게 pixels[5][48~52]*weight[k]로 계산합니다. 이미지가 그러면 좀 더 선명하게 블러처리가 될 수 있습니다. 여기서 중요한 점은 위의 가중치는 양 옆으로 대칭이 되어야 하고 각 값들의 합은 1이 되어야 한다는 점입니다.

가우시안 블러랑 비교하여 그냥 Seperable Convolution은 각 가중치는 0.2가 될 것입니다.
가우시안 블러를 적용한 이미지 입니다

출처 : 홍정모의 컴퓨터 그래픽스 세삭코스
위의 이미지들 보다 더 선명하게 블러처리가 된 것을 볼 수 있습니다.
출처 :
honglab
Introduction to Computer Graphics with DirectX 11 - Part 4. Computer Animation Course • 102 lessons [그래픽스 Part4 - 컴퓨터 애니메이션] 파트1,2,3에서 배운 내용들로 이번에는 요소 기술들이 따로따로 작동하도록 구
honglab.co.kr