>  기사  >  웹 프론트엔드  >  Photoshop Gaussian Blur 필터의 알고리즘 요약

Photoshop Gaussian Blur 필터의 알고리즘 요약

高洛峰
高洛峰원래의
2017-02-20 09:40:351849검색

최근 일부 네티즌들의 가우시안 블러 필터 연구에 깊은 인상을 받아 다음과 같이 정리합니다. 가우시안 블러(Gaussian Blur)는 일종의 디지털 이미지 템플릿 처리 방법입니다. 해당 템플릿은 2차원 정규 분포(가우스 분포) 함수를 기반으로 계산됩니다.
정규분포는 A. Demoivre가 이항분포의 점근식을 구하면서 처음으로 구해졌습니다. C.F. Gauss는 측정 오류를 연구할 때 다른 각도에서 이를 도출했습니다. 추신: Laplace와 Gauss는 그 특성을 연구했습니다. 따라서 가우시안 블러라는 이름이 붙었습니다.

1차원 정규분포의 함수 정의:

Photoshop Gaussian Blur 필터의 알고리즘 요약

확률변수 유형의 분포, 첫 번째 매개변수 μ는 뒤에 오는 확률변수의 평균값입니다. 정규분포에서 두 번째 매개변수 σ2는 이 확률변수의 분산이므로 정규분포는 N(μ, σ2)로 기록됩니다. 정규 분포를 따르는 확률 변수의 확률 규칙은 μ에 가까운 값을 취할 확률이 높고, μ에서 멀어지는 값을 취할 확률이 작을수록 분포가 더 집중된다는 것입니다. 는 μ에 가깝고, σ가 클수록 분포는 작아집니다. 정규분포의 밀도함수의 특징은 μ를 중심으로 대칭이고, μ에서 최대값에 도달하고, 양(음)의 무한대에서 0의 값을 가지며, μ±σ에서 변곡점을 갖는다. 그 모양은 중앙이 높고 양쪽이 낮으며, x축 위에서는 종 모양의 곡선을 이루는 형상이다. μ = 0, σ2 = 1일 때, 이를 표준 정규 분포라고 하며 N(0, 1)로 기록됩니다.

두 상수의 의미: μ-기대값, σ^2 분산.

이제 첫 번째 질문인 가우시안 블러 필터의 반경은 얼마인지 풀어보겠습니다. 답은 공식에서 가우스 반경이 σ라는 것입니다.

가우스 곡선의 모양과 반경의 의미는 다음 그림에 나와 있습니다(Adobe SDK의 기술 지원 전문가 문서에서 발췌).

> 가우스 곡선이 반경(σ)은 곡선의 모양에 영향을 미칩니다. σ가 작을수록 곡선은 더 높고 더 날카로워집니다. 2차원 이미지의 경우 종 모양의 표면입니다. 가우스 반경이 작을수록 표면은 더 높고 날카롭고 가파르고 가우스 반경이 클수록 표면은 더 낮고 완만합니다. 따라서 가우시안 반경이 작을수록 흐림 효과가 작아지고, 가우시안 반경이 클수록 흐림 효과가 커집니다. 가우스 반경에 대한 ps의 범위 정의는 [0.1~250]임을 알 수 있습니다. 반경이 0.1인 경우 계산 후 가우시안 템플릿의 가운데 픽셀만 1이고 나머지 픽셀은 모두 = 0(실제로는 0에 거의 접근)이므로 이미지가 변경되지 않습니다.

두 번째 질문은 가우스 템플릿 크기와 가우스 반경의 관계는 무엇입니까? 이것은 항상 우리를 괴롭히는 오해입니다. 우리의 생각이 물리적 구현에 대한 오해에 빠졌기 때문입니다. 물리적 구현에서 가우스 템플릿은 제한되어 있으므로 이 질문에 대한 실제 대답을 무시하게 됩니다. 가우스 템플릿은 논리적으로 제한되지 않습니다. 즉, 가우스 템플릿은 본질적으로 논리적으로 무한하게 확장된 표면의 근사치입니다. 따라서 템플릿 크기는 무한하다고 간주해야 합니다. 단지 계산 중에 거리가 0에 가까워지기 때문에 더 이상 특정 임계값 아래의 값을 고려하지 않습니다. 이 임계값은 템플릿 경계입니다. Photoshop Gaussian Blur 필터의 알고리즘 요약

다음은 2차원 가우스 표면의 공식입니다(x, y는 픽셀의 템플릿 좌표를 나타내고 템플릿 중심 위치가 원점입니다).

🎜>

즉, g(x,y)= ( 1 / (2*pi*σ^2) ) * exp( -(x^2+y^2)/ (2*σ^2 ) ) ;

이 공식을 기반으로 다양한 반경에서 가우스 템플릿을 계산할 수 있습니다. 실제로 템플릿은 중심에서 멀리 떨어져 0에 접근합니다. 예를 들어, =0.7일 때 r 정규화된 가우스 템플릿을 계산합니다.

Photoshop Gaussian Blur 필터의 알고리즘 요약

高斯模板(guass radius=0.700000)
//Guass 반경=0.700000
0.000000    0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000 000   
0.000000   0.000000   0.000001   0.000012    0.000033   0.000012   0.000001   0.000000   0.000000   
0.000000   0.000001 0.000093   0.001976   0.005481   0.001 976   0.000093   0.000001   0.000000   
0.000000   0.000012   0.001976   0.042189   0.117046   0.042189   0.001976   0.000012   0.000000   
0.000000   0.000033   0.005481   0.117 046   0.324724   0.117046   0.005481   0.000033   0.000000   
0.000000   0.000012   0.001976   0.042189   0.117046   0.042189   0.001976   0.000012   0.000000   
0.00 0000    0.000001   0.000093   0.001976   0.005481   0.001976   0.000093   0.000001    0.000000   
0.000000   0.000000   0.000001   0.000012   0.000033   0.000012   0.000 001   0.000000   0.000000   
0.000000   0.000000    0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000  

 

        :

         1 2 1

         2 4 2    /16

         1 2 1

실제 검증 결과, 이 3*3 템플릿은 가우스 반경이 약 0.849일 때 실제로 근사치라는 것을 발견했습니다. r=0.849일 때 3*3 정규화된 템플릿은 다음과 같습니다(MATLAB에서는 h=fspecial( 입력). 'gaussian', 3, 0.849); 이 템플릿을 얻으려면):

0.062467 0.125000 0.062467 0.125000 0.250131 0.125000 0.062467 0.125000 0 .062467


그런 다음 Matlab에서 imfilter를 사용하여 이미지에 가우시안 흐림 처리를 수행할 수 있습니다.

img = imread('c:demo.bmp');

h = fspecial('gaussian', 3, 0.849); img2 = imfilter(img, h); subplot(121), imshow(img) title('원본 이미지') subplot(122), imshow(img2); title('가우시안 블러 후')



효과는 다음과 같습니다:

Matlab에서 다음과 같이 사용할 수 있습니다. 가우시안 표면 그리기:

Photoshop Gaussian Blur 필터의 알고리즘 요약

가우시안을 그리는 Matlab 코드 표면

Actipro에서 제작한 코드 강조 표시 CodeHighlighter(프리웨어)http:// www.php.cn/

%

가우시안 블러 표면을 그려보세요!
---------r=
0.849
; %가우스 반경(0.1~250) x=-
3
:0.2:3;y=
x ;
[X,Y]=
메시그리드(x,y);
Z=
exp(
-(X.^2+Y.^ 2)./(2*r *r))/(2*pi*r*r);mesh(X,Y,Z)
효과 사진은 다음과 같습니다:

                                                      >Photoshop Gaussian Blur 필터의 알고리즘 요약 주파수 도메인 곡선에서 볼 수 있듯이 가우시안 블러는 본질적으로 저역 통과 필터입니다. 이미지 처리에 반영되어 이미지 가장자리 등 그레이스케일 변화가 급격한 장소에 해당하는 고주파 정보가 필터링됩니다.

마지막으로 가우시안 블러 템플릿을 계산하기 위한 C 언어 코드를 제공합니다. 가우시안 템플릿은 대칭이므로 실제로는 템플릿의 약 1/4만 계산하면 됩니다. 하지만 여기 코드에서는 그러한 최적화를 수행하지 않았습니다. 우리가 출력하는 템플릿은 (2*N+1)*(2N+1)이고 가우스 반경은 r로 표시됩니다.

가우스 템플릿 계산
#include math.h>
#include
stdio.h>
#define N 3 3 🎜>/ * 템플릿 크기: (2N+1) * (2N+1) */
void main(){

더블a[2*N+1][2*N+1] /* 가우스 template*/
double
r=0.6 /* 가우스 반경: [ 0.1, 250] */ 
더블
A=1/ (2*M_PI*r*r); int
i,j; 
for (i=-1*N;i
N;i++) for
(j=-1*N;j
N;j++ )a[i+N][j+N]=A*exp((-1)*( 나*+j*j) / (2*r*r));
}

동시에 비교를 위해 Matlab에서 Gaussian 템플릿을 생성하는 코드를 제공합니다(fspecial의 코드 부분, 여기서 p3은 3개의 매개변수가 가우스 반경입니다.):

  case 'gaussian' % Gaussian filter

     siz   = (p2-1)/2;  %注:p2即模板边长,默认值为33
     std   = p3;        %注:p3即高斯半径,默认为为0.5
     
     [x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
     arg   = -(x.*x + y.*y)/(2*std*std);

     h     = exp(arg);
     h(h<eps*max(h(:))) = 0;

     sumh = sum(h(:));  %注:模板归一化
     if sumh ~= 0,
       h  = h/sumh;
     end;

Photoshop 가우시안 흐림 필터의 알고리즘 요약에 대한 자세한 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.