上节中对基本的图像形态学处理作了简要的介绍,本节继续介绍一些基本的图处理-图像金字塔。
拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔低层图像重建上层未采样图像
获取下一层图像: 和高斯内核卷积: 将所有偶数行列删掉。得到的 下一级图像约为上一级的1/4。
图像金字塔是一个图像集合,集合中所有的图像都源于同一个原始图像,通过对原始图像连续降采样所得,直到达到某个中止条件才停止降采样。常见的图像金字塔有下面两种:
高斯金字塔(Gaussian pyramid): 用来向下采样,从底层原始图逐渐向下采样,图像会越来越小。拉普拉斯金字塔(Laplacian pyramid): 用来从金字塔低层图像重建上层未采样图像
获取下一层图像: 和高斯内核卷积: 将所有偶数行列删掉。得到的 下一级图像约为上一级的1/4。
获得上一层图像:首先先将图片行列扩大为原来的两倍,然后将添加的行列用0填充,最后用高斯内核乘以4后卷积。
Opencv代码及处理结果(部分)如下:
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include "stdio.h"
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *src = cvLoadImage("test.jpg",1);
cvShowImage("test",src);
cvWaitKey(0);
IplImage *dst_down = cvCreateImage(cvSize(src->width/2,src->height/2),IPL_DEPTH_8U,src->nChannels);
IplImage *dst_up = cvCreateImage(cvSize(src->width*2,src->height*2),IPL_DEPTH_8U,src->nChannels);
double t = (double)cvGetTickCount();
cvPyrDown( src, dst_down, CV_GAUSSIAN_5x5 ); //
t= (double)cvGetTickCount() - t; //处理时间测定
printf( "Operating time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
// t = (double)cvGetTickCount();
cvPyrUp (src, dst_up, CV_GAUSSIAN_5x5);
t= (double)cvGetTickCount() - t;
printf( "Operating time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
cvShowImage("Pyrdown",dst_down);
cvShowImage("Pyrup",dst_up);
cvWaitKey(0);
cvReleaseImage (&src);
cvReleaseImage (&dst_down);
cvReleaseImage (&dst_up);
cvDestroyAllWindows();
return 0;
}