Qperコピー 技術資料


▼画像回転 ▼画像縮小 ▼画像拡大 ▼エッジ検出

Qperコピーのページに戻る

  1. 画像回転
  2. ごくふつうの fine rotation アルゴリズムを使っています。

    fine rotation アルゴリズムについては、暇があったらそのうち……。

  3. 画像縮小
  4. ごくふつうの輝度の平均化により縮小しています。

    画像拡大に比べて画像縮小は非常に簡単であり、 輝度の平均化だけで十分綺麗になるので、特筆すべきことはないでしょう。

  5. 画像拡大
  6. 画像拡大には、[通常の拡大][エッジシャープ化]の 2個のオプションがあります。

    [通常の拡大]はごく単純な線形補完によって拡大しています。 いわゆるバイリニア補完です。

    [エッジシャープ化」は基本的にはバイリニア補完をしていますが、 エッジを検出し、 補完の計算をするときにエッジをまたがるピクセルの輝度に 1未満の係数を掛けることによって、 エッジを強調しています。これによって「ぼやけ」を抑制しています。 エッジ検出方法については4節を参照してください。

    「ぼやけ」を抑制するには、 エッジ部分をスプライン関数によって補完してやるのが 理論上最も綺麗になるのですが、Qperコピーでは、それはやってません。 IrfanView などではやってます。 ただし、IrfanView (ver 3.21) は補完処理が不完全なようで (バグがある?) 、 画像の端の部分が綺麗にならなかったりします。

  7. エッジ検出
  8. Qperコピーは画像を拡大するときにエッジを検出し、 エッジの部分だけを鮮鋭化することにより、 ぼやけを抑止する機能を持っています。 鮮鋭化は バイリニア補完において、 エッジをまたがるピクセルの輝度の参照割合を減らすことで 実現していますが、 エッジ検出には、特徴的なフィルタを使用しています。

    よく知られた3×3マスクのエッジ検出フィルタとして、 Prewittフィルタ、Sobelフィルタ、ラプラシアンフィルタなどがあります。 それぞれのフィルタ係数は以下のようになっています。

    Prewittフィルタ
    横方向
    -101
    -101
    -101
    縦方向
    -1-1-1
    000
    111
    Sobelフィルタ
    横方向
    -101
    -202
    -101
    縦方向
    -1-2-1
    000
    121
    ラプラシアンフィルタ
    111
    1-81
    111

    前者の2種類のフィルタは1次空間微分フィルタと呼ばれ、 横方向と縦方向の隣接しているピクセルの輝度の差分を算出する フィルタです (まあ一般的にはそういうことになっています) 。 画像のエッジの部分では、この差分の絶対値が大きな値になり、 それによってエッジが検出できる仕組みです。 つまり、画像のエッジの部分では、隣接しているピクセルの色が 例えば黒から白に、白から黒にと、急激に変化して、 輝度の差分が大きくなる (はずである) という考え方です。

    これらのフィルタを使うと、横方向と縦方向のエッジの検出だけでなく、 エッジの方向が斜めになっているとき、 そのエッジの角度を計算することができます。 横方向のフィルタを通した結果の値を dx、 縦方向のフィルタを通した結果の値を dy とおくと、 arctan(dx /dy) を計算することにより、エッジの角度が得られます。 ちなみに、斜め方向のピクセルの輝度の差分は sqrt(dx2 + dy2) (sqrt は平方根) で算出できます。

    一方、ラプラシアンフィルタは2次空間2回微分フィルタと呼ばれ、 輝度の差分の変化量が極端に大きくなっている部分を抽出する フィルタです (まあ一般的にはそういうことになっています) 。 このフィルタは、 輝度の差分を抽出すると同時に、(8個並んだ「1」の係数によって) 輝度の平均化も行っています。 そのため、1次空間微分フィルタに比べて、 ノイズ入りの画像や自然画像のエッジ検出に向いている、 ということになっています。 フィルタの数も1個だけで済むので、 エッジ検出にこのフィルタを使っているツールは インターネット上にも多く見受けられます。 しかしながら、1次空間微分フィルタのように、 斜め方向のエッジの角度を簡単に算出することはできません。 画像の輪郭線の様子を解析する上で、 エッジの角度は重要なファクターなので、 角度の計算ができるかどうかは重要なキーポイントなのです。 これは、ラプラシアンフィルタの大きな弱点であると言えます。

    さて、Qperコピーで使用しているフィルタも 3×3マスクのフィルタなのですが、 上記のどれでもありません。 それは1次空間微分フィルタと2次空間2回微分フィルタの 特徴を兼ね備えたようなフィルタです。 フィルタ係数は以下のようになっています。

    Qperコピーのエッジ検出フィルタ
    横方向
    1-21
    2-42
    1-21
    縦方向
    121
    -2-4-2
    121

    フィルタ係数を見ると、 なんとなく Sobelフィルタ とラプラシアンフィルタを組み合わせたような フィルタになっています。 もっと正確に言うと、Gaborフィルタを思い切り離散近似したフィルタ と言えるでしょう (Gaborフィルタ: cos関数と正規分布型関数を掛け合わせたもの。 局所コサイン級数の基底)。

    なぜわざわざ従来の有名なフィルタを使わず、 こんなフィルタを使ったのかというと、 このフィルタには、従来のフィルタと比べて、以下のような利点があるからです。

    • 斜め方向のエッジの角度が簡単に計算できる
    • ゼロ交差検出による、より厳密なエッジ検出

    斜め方向のエッジの角度が簡単に計算できることは 明白でしょう。 横方向と縦方向のフィルタがあるので、 1次空間微分フィルタと同様の方法で角度を計算すればよいのです。 では、ゼロ交差検出による、 より厳密なエッジ検出とはどういうことでしょうか? その説明のために、「エッジ」というものについて、 よく考えてみましょう。

    前述のフィルタも、Qperコピーで使っているフィルタ (便宜上、「Qperフィルタ」と呼びましょう。 一般的な呼び方があるかどうか、私は知りません) も、 画像をフィルタリングすることによって、 エッジの部分だけを抜き出した画像を作ることができます。 しかし、「エッジ」とは、厳密には、どこの部分を指すのでしょうか? それは画像の輝度が大きく変化している「境目」のことであり、 もし「境目」から1ピクセルでもテクスチャの内側に入ってしまったら、 それは厳密には「エッジ」ではないでしょう。 また、下のように、1 0 1 0 ……というパターンが続いていたら、 その 1 と 0 の間はエッジとはいえないでしょう。 それは全体で1枚の灰色のテクスチャだと考えるべきです。

    10101
    01010
    10101
    01010
    ところが、ラプラシアンフィルタを使うと、上のパターンでは、 以下のように、 パターン全体がエッジになっているかのような結果が得られてしまいます。
    -44-44-4
    4-44-44
    -44-44-4
    4-44-44

    次に、下のようなパターンを見てみましょう。

    00100
    00100
    00100
    00100
    直感的には、明らかに、上のパターンの「1」の部分はエッジです。 ところが、このパターンに対して、例えば横方向の Prewittフィルタ を通すと、以下のようになります。
    010-10
    010-10
    010-10
    010-10
    「0」の端の部分は「エッジ」ですが、「1」の部分は「エッジ」ではない? というおかしな結果になっています。 さて、ここでQperフィルタの出番です。 今までの2種類のパターンをそれぞれQperフィルタに通すと、 以下のような結果が得られます。
    1 0 1 0 …… のパターン 1 が1列に並んでいるパターン
    00000
    00000
    00000
    00000
    04-840
    04-840
    04-840
    04-840
    見事に「エッジ」が検出され、 かつ、1枚のテクスチャは1枚のテクスチャとみなされているのが 分かると思います。

    さらに、上の結果で、輝度の符号がプラス (+4) とマイナス (-8) で切り替わっている 部分に注目してください。 この、プラスとマイナスの境目こそが、まさに、 テクスチャの「境目」すなわち「エッジ」を示していることが分かると思います。 つまり、 「フィルタを通した結果において、 プラスとマイナスの符号の切り替わり (これを『ゼロ交差』と言います) が発生している境目を『エッジ』とする」 これが、ゼロ交差検出です。

    Qperフィルタを使っても、 ランダムパターンのように複雑な画像を使ったり、 意地悪なパターンを使ったりすると、 突然変なところにプラスまたはマイナスの輝度が現れたりします。 しかし、それらの結果から、 「ゼロ交差」が発生している部分だけを取り出すと、 概ね、エッジになっているように見えるような場所が残り、 視覚的にも納得がいくような結果が得られます。


著者:
作成日: 2003年8月1日
最終更新日: 2004年10月10日

Qperコピーのページに戻る