OpenCL을 사용한 가우스 흐림(하나)

4848 단어 OpenCLC++

OpenCL


OpenCL(Open Computing Language)은 멀티 코어 CPU 및 GPU 등의 컴퓨팅 리소스에서
이것은 병렬 컴퓨팅에 사용되는 플랫폼 간 API입니다.
wikipedia : OpenCL

고스 모호


고스 모호함은 가중 평활화의 일종이다.
가우스 함수 사용하기 (가우스 핵) 가중
고스 함수는 다음과 같은 공식으로 표시된다.
G\left( x \right) = \dfrac {1}{ \sqrt { 2 \pi \sigma} } \mathrm{e}^{ - \dfrac {x^{2}}{ 2 \sigma^{2} } }
그림은 시계 모양이다.
그림은 위키백과에서 인용한 것이다.

고스 모호함은 윤곽의 특징을 남겨 모호하게 한다.
고스 모호함은 고스 내핵의 크기가 크고 표준 편차가 크다는 것이다σ크면 클수록 희미한 효과가 현저하다.
그림은 위키백과에서 인용한 것이다.

고스 모호
위키백과: 고스 함수

고스 모호한 샘플 코드


github가 공개한 것을 테스트하다.
https://github.com/bgaster/opencl-book-samples/tree/master/src/Chapter_8/ImageFilter2D
이 샘플 중 고스 내핵의 크기는 3x3이다.
 \frac{1}{16}
 \left[
    \begin{array}{ccc}
      1 & 2 & 1 \\
      2 & 4 & 2 \\
      1 & 2 & 1
    \end{array}
  \right]
이 크기에서 희미한 효과는 매우 작기 때문에 이미지를 확대해야만 희미한 효과를 알 수 있다.

샘플을 살짝 수정해 지이허브에 맥OS로 실행할 수 있는 샘플을 공개했다.
https://github.com/ohwada/MAC_cpp_Samples/tree/master/OpenCL-ImageFilter2D

가우스 커널의 크기 변경


다음 문장의 5x5를 시험해 보세요.
 \frac{1}{273}
 \left[
    \begin{array}{ccccc}
      1 & 4 & 7 & 4 & 1 \\
      4 & 16 & 26 & 16 & 4 \\
      7 & 26 & 42 & 26 & 7 \\
      4 & 16 & 26 & 16 & 4 \\
      1 & 4 & 7 & 4 & 1 \\
    \end{array}
  \right]
Gaussian Smoothing
고스 내핵의 부분을 교체하다.
gaussian_filter.cl
// 3x3
    float kernelWeights[9] = { 1.0f, 2.0f, 1.0f,
                               2.0f, 4.0f, 2.0f,
                               1.0f, 2.0f, 1.0f };
// 5x5
    float kernelWeights[25] = 
        { 1.0f, 4.0f, 7.0f, 4.0f, 1.0f,
          4.0f, 16.0f, 26.0f, 16.0f, 4.0f,
          7.0f, 26.0f, 41.0f, 26.0f, 7.0f,
           4.0f, 16.0f, 26.0f, 16.0f, 4.0f,
           1.0f, 4.0f, 7.0f, 4.0f, 1.0f };
결과는 3×3과 크게 다르지 않았다

더 큰 것이 두 번째에 이어진다.
https://qiita.com/ohwada/items/435afc3df419d29439f3

좋은 웹페이지 즐겨찾기