답변:
컨볼 루션에서는 두 개의 수학 함수가 결합되어 세 번째 함수를 생성합니다. 이미지 처리 기능에서 일반적으로 커널이라고합니다. 커널은 픽셀의 정사각형 배열에 지나지 않습니다. 일반적으로 커널의 값은 1을 더합니다. 이것은 작동 후 이미지에 에너지가 추가되거나 제거되지 않도록하기위한 것입니다.
특히 가우시안 커널 (가우시안 블러에 사용)은 픽셀 값이 가우시안 곡선의 값 (2D)에 해당하는 정사각형 픽셀 배열입니다.
이미지의 각 픽셀은 가우스 커널로 곱해집니다. 이는 커널의 중앙 픽셀을 이미지 픽셀에 놓고 원래 이미지의 값에 겹치는 커널의 픽셀을 곱하여 수행됩니다. 이 곱셈으로 인한 값이 더 해지고 그 결과는 대상 픽셀의 값에 사용됩니다. 이미지를 보면 입력 배열의 (0,0)에있는 값과 커널 배열의 (i)에있는 값, 입력 배열의 (1,0)에있는 값에 (h)의 값을 곱합니다. 커널 배열 등). 그런 다음이 값을 모두 추가하여 출력 이미지에서 (1,1)의 값을 가져옵니다.
두 번째 질문에 먼저 답하기 위해 커널이 클수록 작업 비용이 더 많이 듭니다. 따라서 흐림 반경이 클수록 작업 시간이 길어집니다.
첫 번째 질문에 대답하기 위해 위에서 설명한 것처럼 각 입력 픽셀에 전체 커널을 곱하여 컨볼 루션을 수행 할 수 있습니다. 그러나 커널이 대칭 (가우시안 커널) 인 경우 각 축 (x 및 y)을 독립적으로 곱할 수 있으므로 총 곱셈 횟수가 줄어 듭니다. 적절한 수학적 용어로, 행렬이 분리 가능하면 (M × 1) 및 (1 × N) 행렬로 분해 될 수 있습니다. 위의 가우스 커널의 경우 다음 커널도 사용할 수 있습니다.
이제 입력 이미지의 각 픽셀에 두 커널을 곱하고 결과 값을 추가하여 출력 픽셀의 값을 얻습니다.
커널을 분리 할 수 있는지 확인하는 방법에 대한 자세한 내용은이 링크 를 참조하십시오 .
편집 : 위에 표시된 두 커널은 약간 다른 값을 사용합니다. 이러한 커널을 만들기 위해 가우스 곡선에 사용 된 (sigma) 매개 변수가 두 경우 모두 약간 다르기 때문입니다. 가우스 곡선의 모양에 영향을 미치는 매개 변수에 대한 설명과 커널 값은이 링크를 참조하십시오.
편집 : 위의 두 번째 이미지에서 사용되는 커널이 뒤집혀 있습니다. 물론 사용하는 커널이 대칭이 아닌 경우에만 차이가 있습니다. 커널을 뒤집어 야하는 이유는 컨볼 루션 연산의 수학적 속성과 관련이 있습니다 (컨볼 루션 에 대한 자세한 설명 은 링크 참조 ). 간단히 말하면 커널을 뒤집지 않으면 컨벌루션 작업의 결과가 뒤집 힙니다. 커널을 뒤집 으면 올바른 결과를 얻을 수 있습니다.
다음은이 주제에서 읽은 최고의 기사 입니다. 선형 샘플링을 통한 효율적인 가우시안 블러 . 그것은 당신의 모든 질문을 해결하고 실제로 접근 할 수 있습니다.
평신도에 대한 간단한 설명 : 가우시안은 분리 할 수있는 훌륭한 속성을 가진 함수입니다. 즉, 2D 가우시안 함수는 두 개의 1D 가우시안 함수를 결합하여 계산할 수 있습니다.
일반적으로 슬라이딩 윈도우에서 두 함수의 곱을 적분하여 컨벌루션을 수행하지만 수학 배경이 아닌 경우 이는 매우 유용한 설명이 아니며 확실히 유용한 직관을 제공하지 않습니다. 그것을 위해. 보다 직관적으로 컨벌루션을 사용하면 입력 신호의 여러 지점이 출력 신호의 단일 지점에 영향을 줄 수 있습니다.
컨볼 루션에 익숙하지 않으므로 먼저 이와 같은 개별 컨텍스트에서 컨볼 루션이 무엇을 의미하는지 검토 한 다음 더 간단한 흐림 효과를 살펴 보겠습니다.
이산 문맥에서, 우리는 단순히 각각의 해당 샘플을 곱함으로써 두 신호를 곱할 수 있습니다. 적분은 또한 신중하게 수행하기가 간단합니다. 통합하는 간격으로 각 샘플을 합산합니다. 간단한 이산 컨볼 루션 중 하나는 이동 평균을 계산하는 것입니다. 10 개 샘플의 이동 평균을 가져 오려면, 길이가 10 개이고 키가 0.1 개인 분포로 신호를 좁히는 것으로 생각할 수 있습니다. 창의 각 샘플에 먼저 0.1을 곱한 다음 10 개를 모두 더하여 생성합니다. 평균. 이것은 또한 컨볼 루션으로 흐리게 처리 할 때 사용하는 분포가 모든 샘플에 대해 1.0이되어야한다는 흥미롭고 중요한 차이점을 보여줍니다. 그렇지 않으면 이미지를 적용 할 때 이미지의 전체 밝기가 증가하거나 감소합니다.
컨볼 루션을 살펴 보았으므로 이제 흐리게 처리 할 수 있습니다. 가우시안 블러는 가우시안 분포에 의해 이미지를 축소하여 구현됩니다. 다른 블러는 일반적으로 이미지를 다른 분포로 모아서 구현됩니다. 가장 간단한 흐림 효과는 상자 흐림 효과이며, 위에서 설명한 것과 동일한 분포 (단위 면적이있는 상자)를 사용합니다. 10x10 영역을 흐리게하려면 상자의 각 샘플에 0.01을 곱한 다음 모두 합하여 중앙 픽셀을 만듭니다. 이미지가 밝거나 어두워지지 않도록 블러 분포의 모든 샘플의 총합이 1.0인지 확인해야합니다.
r
물론 블러를 계산하기 위해 많은 픽셀을 샘플링해야하므로 반경이 매우 큰 곳에서 수행하면이 두 프로세스가 모두 비용이 많이 듭니다. 가우스 블러와 박스 블러는 모두 "분리 가능한"블러입니다. 즉, 한 축을 따라 블러를 수행 한 다음 다른 축을 따라 블러를 수행하면 동시에 두 축을 따라 블러를 수행 한 것과 동일한 결과를 얻을 수 있습니다. 이것은 매우 중요 할 수 있습니다. 흐림 효과가 10px 인 경우 순진한 형태의 샘플 100 개가 필요하지만 분리 할 때는 20 개만 필요합니다. 블러가 결합되어 차이가 커집니다..
그러나 실제 구현에서 고려해야 할 두 가지 트릭이 더 있습니다.
필터는 특정 반지름을 가지고 있기 때문에 경계에서 이미지 바깥쪽으로 떨어지는 픽셀로 계산해야합니다. 이러한 경우 다음 중 하나를 시도해 볼 수 있습니다. 외부 픽셀의 경우 마지막으로 가능한 값 (예 :max(x, 0)
하거나 이미지를 외부로 "반영"(처럼 x < 0 ? -x : x
) 할 수 있습니다. 또는 단순히 경계에서 멈출 수 있지만 컨볼 루션 필터의 분모를 조정하여 합계가 1이되도록해야합니다. 예를 들면 다음과 같습니다.
1
1 1
1 2 1
1 3 3 1
[1 4 6 4 1]