![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
通常、私たちは一定サイズの画像を扱う。しかし、場合によっては(同じ)画像を異なる解像度で扱う必要がある。例えば、画像内で顔のような何かを探索する際、その対象がその画像内でどのサイズで存在するかは分からない。その場合、同じ画像を異なる解像度で集合として作成し、それらすべての中で対象を探索する必要がある。これらの異なる解像度の画像の集合は画像ピラミッドと呼ばれる(最高解像度の画像を一番下に、最低解像度の画像を一番上にしてスタックに積むと、ピラミッドのように見えるからである)。
画像ピラミッドには2種類ある。1) ガウシアンピラミッド と 2) ラプラシアンピラミッド である
ガウシアンピラミッドの上位レベル(低解像度)は、下位レベル(高解像度)の画像において連続する行と列を除去することで形成される。そして上位レベルの各ピクセルは、下位レベルの5ピクセルからの寄与にガウシアン重みを掛けて形成される。これにより、\(M \times N\) の画像は \(M/2 \times N/2\) の画像になる。したがって面積は元の面積の4分の1に縮小される。これはオクターブと呼ばれる。ピラミッドを上に進む(すなわち解像度が下がる)につれて同じパターンが続く。同様に、拡大する際には各レベルで面積が4倍になる。ガウシアンピラミッドは cv.pyrDown() と cv.pyrUp() 関数を使って求めることができる。
ラプラシアンピラミッドはガウシアンピラミッドから作られる。専用の関数は存在しない。ラプラシアンピラミッドの画像はエッジ画像のようなもので、要素のほとんどはゼロである。これらは画像圧縮に用いられる。ラプラシアンピラミッドのあるレベルは、ガウシアンピラミッドの同じレベルと、その一つ上のレベルを拡大したものとの差分によって作られる。
次の関数を使う: cv.pyrDown (src, dst, dstsize = new cv.Size(0, 0), borderType = cv.BORDER_DEFAULT)
| src | 入力画像。 |
| dst | 出力画像。指定されたサイズを持ち、src と同じ型である。 |
| dstsize | 出力画像のサイズ。 |
| borderType | ピクセル外挿の方法( cv.BorderTypes を参照、cv.BORDER_CONSTANT はサポートされていない)。 |
次の関数を使う: cv.pyrUp (src, dst, dstsize = new cv.Size(0, 0), borderType = cv.BORDER_DEFAULT)
| src | 入力画像。 |
| dst | 出力画像。指定されたサイズを持ち、src と同じ型である。 |
| dstsize | 出力画像のサイズ。 |
| borderType | ピクセル外挿の方法( cv.BorderTypes を参照、cv.BORDER_DEFAULT のみサポートされている)。 |