ピラミッドとその応用
作成者: 怡土順一, 最終変更者: 怡土順一, 最終変更リビジョン: 309, 最終変更日時: 2007-09-26 01:28:01 +0900 (水, 26 9月 2007)
■ ピラミッド
画像ピラミッドは,解像度の異なる(同一の)画像群から構成される. このピラミッドは,画像の拡大縮小表示や,マッチングなどのcoarse-to-fine (低解像度画像に対する荒い探索や構成を行い,徐々に高精度化する)手法に用いられる.サンプル
画像ピラミッドの作成 cvPyrDown, cvPyrUp
入力画像から,ピラミッドの上下のレイヤー画像を作成する
サンプルコード
#include <cv.h> #include <highgui.h> int main (int argc, char **argv) { IplImage *src_img, *dst_img1, *dst_img2; if (argc != 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR)) == 0) return -1; dst_img1 = cvCreateImage (cvSize (src_img->width / 2, src_img->height / 2), src_img->depth, src_img->nChannels); dst_img2 = cvCreateImage (cvSize (src_img->width * 2, src_img->height * 2), src_img->depth, src_img->nChannels); // (1)入力画像に対する画像ピラミッドを構成 cvPyrDown (src_img, dst_img1, CV_GAUSSIAN_5x5); cvPyrUp (src_img, dst_img2, CV_GAUSSIAN_5x5); cvNamedWindow ("Original", CV_WINDOW_AUTOSIZE); cvShowImage ("Original", src_img); cvNamedWindow ("PyrDown", CV_WINDOW_AUTOSIZE); cvShowImage ("PyrDown", dst_img1); cvNamedWindow ("PyrUp", CV_WINDOW_AUTOSIZE); cvShowImage ("PyrUp", dst_img2); cvWaitKey (0); cvDestroyWindow ("Original"); cvDestroyWindow ("PyrDown"); cvDestroyWindow ("PyrUp"); cvReleaseImage (&src_img); cvReleaseImage (&dst_img1); cvReleaseImage (&dst_img2); return 0; }
// (1)入力画像に対する画像ピラミッドを構成
関数cvPyrDown()によって,入力画像の低解像(1/4)度画像を,
関数cvPryUp()によって,高解像度画像(2)を構成する.
最後の引数,CV_GAUSSIAN_5x5(現在サポートされている値は,これのみ)を
指定することによって,ガウシアンフィルタに基づいたリサンプリングが行われる.