가우시안 블러는 어떻게 구현됩니까?


42

블러는 한 축에서 다른 축으로 수행하여 실시간 그래픽에서 수행된다는 것을 읽었습니다.

나는 과거에 1D에서 약간의 컨볼 루션을 해왔지만 그것에 익숙하지 않거나이 경우 정확히 무엇을 관련 시킬지 알지 못합니다.

누구든지 이미지의 2D 가우시안 블러가 어떻게 수행되는지 일반 용어로 설명 할 수 있습니까?

또한 Blur의 반경이 성능에 영향을 줄 수 있다고 들었습니다. 더 큰 회선이 필요하기 때문입니까?

답변:


48

컨볼 루션에서는 두 개의 수학 함수가 결합되어 세 번째 함수를 생성합니다. 이미지 처리 기능에서 일반적으로 커널이라고합니다. 커널은 픽셀의 정사각형 배열에 지나지 않습니다. 일반적으로 커널의 값은 1을 더합니다. 이것은 작동 후 이미지에 에너지가 추가되거나 제거되지 않도록하기위한 것입니다.

특히 가우시안 커널 (가우시안 블러에 사용)은 픽셀 값이 가우시안 곡선의 값 (2D)에 해당하는 정사각형 픽셀 배열입니다.

http://homepages.inf.ed.ac.uk/rbf/HIPR2/gsmooth.htm에서 링크 된 이미지

이미지의 각 픽셀은 가우스 커널로 곱해집니다. 이는 커널의 중앙 픽셀을 이미지 픽셀에 놓고 원래 이미지의 값에 겹치는 커널의 픽셀을 곱하여 수행됩니다. 이 곱셈으로 인한 값이 더 해지고 그 결과는 대상 픽셀의 값에 사용됩니다. 이미지를 보면 입력 배열의 (0,0)에있는 값과 커널 배열의 (i)에있는 값, 입력 배열의 (1,0)에있는 값에 (h)의 값을 곱합니다. 커널 배열 등). 그런 다음이 값을 모두 추가하여 출력 이미지에서 (1,1)의 값을 가져옵니다.

http://www.songho.ca/dsp/convolution/convolution.html에서 링크 된 이미지

두 번째 질문에 먼저 답하기 위해 커널이 클수록 작업 비용이 더 많이 듭니다. 따라서 흐림 반경이 클수록 작업 시간이 길어집니다.

첫 번째 질문에 대답하기 위해 위에서 설명한 것처럼 각 입력 픽셀에 전체 커널을 곱하여 컨볼 루션을 수행 할 수 있습니다. 그러나 커널이 대칭 (가우시안 커널) 인 경우 각 축 (x 및 y)을 독립적으로 곱할 수 있으므로 총 곱셈 횟수가 줄어 듭니다. 적절한 수학적 용어로, 행렬이 분리 가능하면 (M × 1) 및 (1 × N) 행렬로 분해 될 수 있습니다. 위의 가우스 커널의 경우 다음 커널도 사용할 수 있습니다.

1256[1464141624164624362464162416414641]=1256[14641][14641]

이제 입력 이미지의 각 픽셀에 두 커널을 곱하고 결과 값을 추가하여 출력 픽셀의 값을 얻습니다.

커널을 분리 할 수 ​​있는지 확인하는 방법에 대한 자세한 내용은이 링크 를 참조하십시오 .

편집 : 위에 표시된 두 커널은 약간 다른 값을 사용합니다. 이러한 커널을 만들기 위해 가우스 곡선에 사용 된 (sigma) 매개 변수가 두 경우 모두 약간 다르기 때문입니다. 가우스 곡선의 모양에 영향을 미치는 매개 변수에 대한 설명과 커널 값은이 링크를 참조하십시오.

편집 : 위의 두 번째 이미지에서 사용되는 커널이 뒤집혀 있습니다. 물론 사용하는 커널이 대칭이 아닌 경우에만 차이가 있습니다. 커널을 뒤집어 야하는 이유는 컨볼 루션 연산의 수학적 속성과 관련이 있습니다 (컨볼 루션 에 대한 자세한 설명 은 링크 참조 ). 간단히 말하면 커널을 뒤집지 않으면 컨벌루션 작업의 결과가 뒤집 힙니다. 커널을 뒤집 으면 올바른 결과를 얻을 수 있습니다.


1
서로 다른 5 x 5 커널 두 개가 약간 다른 숫자 (하나는 273, 다른 하나는 256)를 설명하는 간단한 메모를 추가 할 수 있습니까? 새로운 사람에게는 혼란 스러울 것 같습니다.
trichoplax

마찬가지로 두 번째 다이어그램에서 커널이 뒤집힌 이유를 설명 할 수 있습니까? 나는 그것이 설명과 관련이 있다고 생각하지 않지만 그것이 명백한 추가 단계라는 사실은 그것이 필요하지 않다는 것을 모르는 누군가에게 이해를 방해 할 수 있습니다.
trichoplax

정확한 결과를 위해 선형 색 공간에서 작업하는 것을 잊지 마십시오.
v.oddou

16

다음은이 주제에서 읽은 최고의 기사 입니다. 선형 샘플링을 통한 효율적인 가우시안 블러 . 그것은 당신의 모든 질문을 해결하고 실제로 접근 할 수 있습니다.

평신도에 대한 간단한 설명 : 가우시안은 분리 할 수있는 훌륭한 속성을 가진 함수입니다. 즉, 2D 가우시안 함수는 두 개의 1D 가우시안 함수를 결합하여 계산할 수 있습니다.

n×nO(n2)2×nO(n)

nn


13

일반적으로 슬라이딩 윈도우에서 두 함수의 곱을 적분하여 컨벌루션을 수행하지만 수학 배경이 아닌 경우 이는 매우 유용한 설명이 아니며 확실히 유용한 직관을 제공하지 않습니다. 그것을 위해. 보다 직관적으로 컨벌루션을 사용하면 입력 신호의 여러 지점이 출력 신호의 단일 지점에 영향을 줄 수 있습니다.

컨볼 루션에 익숙하지 않으므로 먼저 이와 같은 개별 컨텍스트에서 컨볼 루션이 무엇을 의미하는지 검토 한 다음 더 간단한 흐림 효과를 살펴 보겠습니다.

이산 문맥에서, 우리는 단순히 각각의 해당 샘플을 곱함으로써 두 신호를 곱할 수 있습니다. 적분은 또한 신중하게 수행하기가 간단합니다. 통합하는 간격으로 각 샘플을 합산합니다. 간단한 이산 컨볼 루션 중 하나는 이동 평균을 계산하는 것입니다. 10 개 샘플의 이동 평균을 가져 오려면, 길이가 10 개이고 키가 0.1 개인 분포로 신호를 좁히는 것으로 생각할 수 있습니다. 창의 각 샘플에 먼저 0.1을 곱한 다음 10 개를 모두 더하여 생성합니다. 평균. 이것은 또한 컨볼 루션으로 흐리게 처리 할 때 사용하는 분포가 모든 샘플에 대해 1.0이되어야한다는 흥미롭고 중요한 차이점을 보여줍니다. 그렇지 않으면 이미지를 적용 할 때 이미지의 전체 밝기가 증가하거나 감소합니다.

컨볼 루션을 살펴 보았으므로 이제 흐리게 처리 할 수 ​​있습니다. 가우시안 블러는 가우시안 분포에 의해 이미지를 축소하여 구현됩니다. 다른 블러는 일반적으로 이미지를 다른 분포로 모아서 구현됩니다. 가장 간단한 흐림 효과는 상자 흐림 효과이며, 위에서 설명한 것과 동일한 분포 (단위 면적이있는 상자)를 사용합니다. 10x10 영역을 흐리게하려면 상자의 각 샘플에 0.01을 곱한 다음 모두 합하여 중앙 픽셀을 만듭니다. 이미지가 밝거나 어두워지지 않도록 블러 분포의 모든 샘플의 총합이 1.0인지 확인해야합니다.

r

ex2/22π

물론 블러를 계산하기 위해 많은 픽셀을 샘플링해야하므로 반경이 매우 큰 곳에서 수행하면이 두 프로세스가 모두 비용이 많이 듭니다. 가우스 블러와 박스 블러는 모두 "분리 가능한"블러입니다. 즉, 한 축을 따라 블러를 수행 한 다음 다른 축을 따라 블러를 수행하면 동시에 두 축을 따라 블러를 수행 한 것과 동일한 결과를 얻을 수 있습니다. 이것은 매우 중요 할 수 있습니다. 흐림 효과가 10px 인 경우 순진한 형태의 샘플 100 개가 필요하지만 분리 할 때는 20 개만 필요합니다. 블러가 결합되어 차이가 커집니다.O(n2)O(n).


1
다른 답변을 살펴보면 수학 배경이 작업했던 것보다 낫지 만 여전히 도움이 될 정도로 자세하게 설명하기를 바랍니다. 나는 어떤 배경을 가진 사람들에게도 도움이되기를 원했습니다.
porglezomp

1
당신이 나에게 이야기하고 있다면, 전혀 아닙니다. 당신의 대답과 Bert는 놀랍게도 깨달았습니다. 정말 고맙습니다! 정보를 조금 소화해야합니다 (:
Alan Wolfe

11

O(n2)O(n)

그러나 실제 구현에서 고려해야 할 두 가지 트릭이 더 있습니다.

필터는 특정 반지름을 가지고 있기 때문에 경계에서 이미지 바깥쪽으로 떨어지는 픽셀로 계산해야합니다. 이러한 경우 다음 중 하나를 시도해 볼 수 있습니다. 외부 픽셀의 경우 마지막으로 가능한 값 (예 :max(x, 0) 하거나 이미지를 외부로 "반영"(처럼 x < 0 ? -x : x) 할 수 있습니다. 또는 단순히 경계에서 멈출 수 있지만 컨볼 루션 필터의 분모를 조정하여 합계가 1이되도록해야합니다. 예를 들면 다음과 같습니다.

sum1256[1464141624164624362464162416414641]=sum1225[0000001624160024361600162416000000]=1.
     1
    1 1
   1 2 1
  1 3 3 1
[1 4 6 4 1]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.