가우시안 블러-표준 편차, 반경 및 커널 크기


19

GLSL에서 가우시안 블러 프래그먼트 셰이더를 구현했습니다. 나는 모든 개념의 기본 개념을 이해합니다 : 회선, 선형성을 사용하여 x와 y의 분리, 반경을 증가시키는 여러 패스 ...

그래도 여전히 몇 가지 질문이 있습니다.

  • 시그마와 반지름의 관계는 무엇입니까?

    시그마가 반지름과 동일하다는 것을 읽었으며 시그마가 픽셀로 어떻게 표현되는지 알 수 없습니다. 아니면 "반경"은 픽셀과 관련이없는 시그마의 이름일까요?

  • 시그마를 어떻게 선택합니까?

    시그마를 늘리기 위해 여러 패스를 사용하는 것을 고려할 때 주어진 패스에서 원하는 시그마를 얻기 위해 좋은 시그마를 어떻게 선택합니까? 결과 시그마가 시그마 제곱의 합의 제곱근 과 같고 시그마가 반지름과 같은 경우 원하는 반지름을 얻는 쉬운 방법은 무엇입니까?

  • 커널에 적합한 크기는 무엇이며 시그마와 어떤 관련이 있습니까?

    대부분의 구현에서 5x5 커널을 사용하는 것을 보았습니다. 적절한 품질의 빠른 구현에는 좋은 선택이지만 다른 커널 크기를 선택해야하는 또 다른 이유가 있습니까? 시그마는 커널 크기와 어떤 관련이 있습니까? 커널 외부의 계수가 무시할 수 있고 정규화되도록 최상의 시그마를 찾아야합니까?

답변:


21

시그마와 반지름의 관계는 무엇입니까? 시그마가 반지름과 동일하다는 것을 읽었으며 시그마가 픽셀로 어떻게 표현되는지 알 수 없습니다. 아니면 "반경"은 픽셀과 관련이없는 시그마의 이름일까요?

여기에는 세 가지가 있습니다. 분산, ( σ2 ), 반지름 및 픽셀 수 이것은 2 차원 가우스 함수이므로 공분산 행렬 에 대해 이야기하는 것이 좋습니다.Σ 좋습니다. 그러나이 세 가지 개념은 약하게 관련되어 있습니다.

우선, 2 차원 가우시안은 다음 방정식으로 주어진다 :

()=1(2π)2|Σ|이자형12(μ)Σ1 (μ)

여기서 는 이미지 의 및 좌표를 포함하는 열 벡터 입니다. 따라서 이고 은 가우스 함수의 평균을 및 방향으로 나타내는 열 벡터입니다. . x y z = [ x y ] μ x y μ = [ μ x μ y ]엑스와이=[엑스와이]μ엑스와이μ=[μ엑스μ와이]

예:

이제 공분산 행렬 및 설정한다고 가정하겠습니다. 입니다. 또한 픽셀 수를 x 합니다. 또한이 PDF를 평가하는 'grid' 는 와 모두 에서 으로 갈 것입니다 . 이것은 의 그리드 해상도를 의미 합니다. 그러나 이것은 완전히 임의적입니다. 이 설정을 사용하면 왼쪽에 확률 밀도 함수 이미지가 표시됩니다. 이제 '분산'(실제로 공분산)을 변경하면Σ=[1001]μ=[00]1001001010엑스와이10(10)100=0.2Σ=[9009] 그리고 다른 모든 것을 동일하게 유지하면 오른쪽 이미지가 나타납니다.

여기에 이미지 설명을 입력하십시오

픽셀 수는 여전히 x 모두 동일 하지만 분산을 변경했습니다. 대신 동일한 실험을 수행하지만 대신 x 픽셀을 사용한다고 가정 하지만 여전히 에서 까지 실행했습니다 . 그런 다음 그리드의 해상도는 입니다. 이전과 동일한 공분산을 사용하면 다음과 같은 결과를 얻습니다.1001002020101010(10)20=1

여기에 이미지 설명을 입력하십시오

이러한 변수 간의 상호 작용을 이해해야합니다. 코드를 원한다면 여기에도 게시 할 수 있습니다.

시그마를 어떻게 선택합니까?

가우시안 필터의 분산 / 공분산 매트릭스 선택은 애플리케이션에 따라 매우 다릅니다. '정답'은 없습니다. 이는 필터에 어떤 대역폭을 선택해야 하는지를 묻는 것과 같습니다. 다시 말하지만, 응용 프로그램에 따라 다릅니다. 일반적으로 이미지에서 상당한 양의 고주파 성분을 제거하도록 가우스 필터를 선택하려고합니다. 좋은 측정을하기 위해 할 수있는 한 가지는 이미지의 2D DFT를 계산하고 2D 가우스 이미지와 그 계수를 오버레이하는 것입니다. 이것은 어떤 계수가 심하게 벌칙을 받고 있는지 알려줄 것입니다.

예를 들어, 가우스 이미지의 공분산이 너무 넓어서 이미지의 많은 고주파수 계수를 포함하는 경우 공분산 요소를 더 작게 만들어야합니다.


1
순차 컬러 맵을 사용하면 이미지가 더 좋습니다. 제트기가 최악입니다.
endolith

@endolith "더 나은"는 응용 프로그램에 따라 다릅니다. 시각적 대비 식별이 필요한 경우 제트를 사용하지 않습니다. (뜨거운 것이 좋습니다). 그러나 메시지는 가우스 크기 내에 있으므로 제트로 인한 피해는 없습니다. 그래도 링크 주셔서 감사합니다.
Tarin Ziyaee

2
이것은 훌륭하게 생각되고 잘 시각화 된 답변입니다! 예를 들어 왼쪽 위 이미지를 보자. 분산과 커널 크기의 조합은 중앙 30x30 (~ 9 %)만이 0이 아닌 100x100 커널이기 때문에 낭비가 될 것입니다.
Adam Smith

5

sigma 매개 변수는 연속적인 관점에서 가우시안 블러를 정의하기에 충분합니다. 그러나 실제로 이미지와 컨볼 루션 커널은 별개입니다. 연속 가우스 커널의 최적 이산 근사를 선택하는 방법은 무엇입니까?

더 큰 반경을 사용하는 경우 불연속 근사는 연속 가우스 커널에 더 가깝습니다. 그러나 이는 추가 계산 시간이 소요될 수 있습니다.

이상적으로는 시그마 값을 선택한 다음 해당하는 연속 가우시안 커널을 충실하게 나타낼 수있는 반경을 계산합니다. 주어진 근사 오차의 경우, 시그마가 클수록 반지름이 커야합니다.

흥미롭게도 이것은 올바르게 이해하기가 매우 복잡해질 수 있습니다. 가우스 행렬을 구성 할 때 연속 커널을 샘플링하는 가장 좋은 솔루션입니까, 아니면 더 나은 근사값이 있습니까? 잘린 부분을 설명하기 위해 계산 된 이산 커널을 정규화하는 방법은 무엇입니까? 기타

참고로 Mathematica에서 GaussianMatrix 기능은 가우스 이산 행렬을 계산하는 여러 가지 방법을 제공합니다 (예 : 이산 베셀 근사법 사용). 기본적으로 radius = 2 * sigma는 sigma = 1 인 경우 행렬이 5x5임을 의미합니다.


이것은 꽤 오래된 질문입니다. 그러나 2 * 시그마의 반경이 9x9 인 행렬을 생성하지 않습니까?
망상 논리

시그마 = 1, 반경 = 2 인 @DelusionalLogic이므로 행렬의 크기는 4이지만 크기는 5x5이므로 홀수 크기가 필요합니다. 적어도 그게 내가 이해하는 방법이야 ..
Micka

반경이 2 인 경우 이웃은 중앙 픽셀을 왼쪽으로 2 픽셀, 오른쪽으로 2 픽셀 씩 확장합니다. Mathematica가 사용하는 규칙 일뿐입니다.
Matthias Odisio

2

파스칼의 삼각형 행은 가우시안에 근사하고 합이 2의 정수인 정수 값을 갖는 실질적인 이점이 있음이 밝혀졌습니다 (이 값 을 정수, 고정 소수점 값 또는 부동 소수점으로 정확하게 저장할 수 있음 ). 예를 들어, 7x7 가우시안 커널을 구성한다고 가정하면 파스칼 삼각형의 7 번째 행을 다음과 같이 사용할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이 필터는 정수 값을 유지하면서 모서리에 최소한의 영향을 미칩니다. 이 경우 중간 값 20/64를 사용하여 근사화 된 가우스에 대한 해당 표준 편차 시그마 인 64 / (20 * sqrt (2 * pi)) = 1.276을 결정할 수 있습니다. 가우시안그래프 로 표시하여 이것이 적합하다는 것을 알 수 있습니다 .

따라서 가우스 커널에 대한 합리적인 표준 편차를 결정하기위한 좋은 출발점은 파스칼의 삼각형 (일명 이항 계수 ) 에서 비롯 됩니다. 위의 건축 용도에 해당하는 (N + 1) x (N + 1) 필터

여기에 이미지 설명을 입력하십시오

Wolfram Alpha의 GaussianMatrix [3] 는 r / 2 = 1.5 만 사용합니다. 이상하게도 GaussianMatrix [{3,1.276}]는 광산과 동일한 2D 필터를 생성 하지 않으며 -3과 3 사이의 x, y에 대해 다음 이 아닙니다 .

여기에 이미지 설명을 입력하십시오

왜 그런지 잘 모르겠습니다. 내 2D 필터는 매우 적합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.