LoginSignup
0
0

More than 3 years have passed since last update.

OpenCL を使って ガウスぼかしをする(その1)

Last updated at Posted at 2020-02-11

OpenCL

OpenCL(Open Computing Language)は、マルチコアCPUやGPU などによる異種混在の計算資源において、
並列コンピューティングのためのクロスプラットフォームなAPIである。

wikipedia : OpenCL

ガウスぼかし

ガウスぼかしは、重みづけ平滑化の1つである。
重みづけにガウス関数(ガウスカーネル)を使用する

ガウス関数は、下記の数式で表現される。

G\left( x \right) = \dfrac {1}{ \sqrt { 2 \pi \sigma} } \mathrm{e}^{ - \dfrac {x^{2}}{ 2 \sigma^{2} } }

図示すると 釣鐘型になる。
図はwikipedia より引用。
Normal_Distribution.png

ガウスぼかしは、輪郭の特徴を残してぼかしを行う。
ガウスぼかしは、ガウスカーネルの大きさが大きく標準偏差 σが大きいほどぼかしの効果が顕著である。
図はwikipedia より引用。
Cappadocia_Gaussian_Blur.png

wikipedia : ガウシアンぼかし

wikipedia : ガウス関数

ガウスぼかしのサンプルコード

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]

この大きさでは、ぼかしの効果は微小で、画像を拡大して、やっとぼかしの効果がわかる。
comparison_3x3.png

サンプルを少し修正して、macOS で実行できるものを Github に公開した。
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 };

結果は、3x3と大差なかった
comparison_5x5.png

もっと大きなものについては、その2に続く。
https://qiita.com/ohwada/items/435afc3df419d29439f3

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0