[소 재료] 2차원 가우스 함수의 그림

7909 단어 파이썬OpenCV

머리



바로 사용할 수 있습니다! 업무로 실천 할 수 있습니다! Python에 의한 AI · 기계 학습 · 심층 학습 앱을 만드는 방법의 3장 4항에서 가우시안 필터가 되는 것을 만났다. 전혀 처음 보았기 때문에 여러가지 조사하면,
  • 이미지는 고주파와 저주파로 분리 가능
  • 고주파는 변화가 심하고 저주파는 변화가 적다. 자연의 이미지라면 저주파의 부분이 많아진다
  • 일반적으로 이미지 처리를 수행 할 때 전처리로 평활화를 수행하여 고주파수를 줄입니다 (엣지 및 노이즈 감소)
  • 평활화를 실시하여 화상의 본질인 저주파 부분을 가능한 한 손상시키지 않고 처리를 용이하게 한다(???)
  • 평활화에 사용되는 필터에는 몇 가지 종류가 있으며, 그 중 하나가 가우시안 필터
  • 가우시안 필터는 일률적으로 평활화하는 것이 아니라, 주목 화소로부터의 거리에 따라 가중치를 바꾸는 것으로, 자연스러운 평활화를 실현할 수 있다(??)

  • 같다. 어쨌든 윤곽 검출시에 하는 루틴과 같은 것이었습니다.

    본편



    가우시안 필터는 다음 공식에 따라 이미지의 평활화를 수행합니다.

    $$f(x, y) =\frac{1}{2\pi\sigma^2}exp\left(-\frac{x^2 + y^2}{2\sigma^2}\right)$ $

    $x, y$는 주목 화소로부터의 거리, $\sigma$는 표준 편차이며, $\sigma$를 크게 할수록 흐림이 단단해지는 것 같습니다.

    여기서 심플하게 의심스럽게 생각한 것이, 「원래 이 함수는 누구인가?」라고 하는 것입니다. 최근에는 4차원 이상의 함수나 벡터? 에 어울리는 타이밍도 많아, 그림이 못되어 꽤 이해에 시달리고 있습니다만, 「이것이라면 3차원으로 갈 수 있어!」라고 하는 것으로, matplotlib를 사용해 그래프로 해 보았습니다.

    코드

    $x,y,\sigma$로부터 값을 돌려주는 가우스 함수의 함수를 준비해, np.arrange로 지정한 공간상에 메쉬 그리드로서 표시하고 있습니다. 3차원 그래프를 간단한 코드로 바삭바삭하게 그릴 수 있는 matplotlib군은 정말 우수합니다.

    gaussian.py
    import math
    
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    import numpy as np
    
    def gaussian_func(x, y, sigma):
        exponent = - (x ** 2 + y ** 2) / (2 * pow(sigma, 2))
        denominator = 2 * math.pi * pow(sigma, 2)
        return pow(math.e, exponent) / denominator
    
    x = np.arange(-3.0, 3.0, 0.001)
    y = np.arange(-3.0, 3.0, 0.001)
    X, Y = np.meshgrid(x, y)
    Z = gaussian_func(X, Y, 1)
    
    fig = plt.figure(figsize=(10, 10))
    ax = Axes3D(fig)
    ax.set_xlabel("x")
    ax.set_ylabel("y")
    ax.set_zlabel("f(x, y)")
    
    ax.plot_wireframe(X, Y, Z)
    plt.savefig("gaussian.jpg")
    plt.show()
    

    출력 이미지

    이번은 $(x, y) = (0, 0)$를 중심으로 하기 때문에, 거기에서 바깥쪽을 향해 부드럽게 내려가는 형태가 되었습니다. 실제로는 이 중심이 주목 화소이며, 거기로부터 거리가 멀어짐에 따라 흐림이 강해, 원래의 정보가 손상되어 가는군요. 실제의 계산으로서는 화소와 가우시안 함수의 값의 컨벌루션 화려합니다.



    후기



    어쩌면 20% 정도 밖에 알고 있지 않을까 생각합니다만, 적어도 가우시안 필터가 무엇을 하고 있는 것인지 근심하게 잡을 수 있었습니다.

    집합 지식에 감사.

    참고 사이트님


  • 이미지 솔루션 - 가우시안 필터의 처리 알고리즘과 그 효과 -
  • 니시즈미 공방 -【이미지 처리】가우시안 필터의 원리·특징·계산식-
  • Daily Tech Blog - Gaussian Filter를 사용하여 이미지를 능가합니다. -
  • htsuda.net - 공간 필터링에 의한 평활화 및 에지 검출 -
  • Qiita - Python 3 : 3 차원 그래프를 작성하는 방법 (matplotlib, pyplot, mplot3d, MPL)-
  • Qiita - OpenCV에서 이미지의 평활화를 시도했습니다 -
  • 좋은 웹페이지 즐겨찾기