一、图像金字塔
1.1 高斯金字塔
- 向上采样法(放大操作)
- 向下采样法(缩小操作)
它们不是互逆的操作,这两种操作都会一定程度上的丢失图像信息。
1.2 拉布拉斯金字塔
用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。
L 为第i层结果,G 为第i层图像,Up 向上操作, Down 向下操作
二、代码与效果
2.1 效果
2.2 代码
// 1. 加载原图
var image1 = new Image<Bgr, byte>("bird.png");
//image1.Resize(160,160,Inter.Linear).Save("bird.png");
var image0 = image1.Mat.Clone();
PreviewImage1 = new WriteableBitmap(Bitmap2BitmapImage(Text(image1.Bitmap, "原图")));
// 2. 向上操作
Mat image2 = new Mat();
CvInvoke.PyrUp(image0.Clone(),image2);
PreviewImage2 = new WriteableBitmap(Bitmap2BitmapImage(Text(image2.Bitmap, "向上操作")));
// 3. 向下操作
Mat image3 = new Mat();
CvInvoke.PyrDown(image0.Clone(), image3);
PreviewImage3 = new WriteableBitmap(Bitmap2BitmapImage(Text(image3.Bitmap, "向下操作")));
// 4. 高斯金字塔 1级
PreviewImage4 = new WriteableBitmap(Bitmap2BitmapImage(Text(image0.Bitmap, "高斯 1级")));
// 5. 高斯金字塔 2级
Mat img5 = new Mat();
CvInvoke.PyrDown(image0.Clone(), img5);
PreviewImage5 = new WriteableBitmap(Bitmap2BitmapImage(Text(img5.Bitmap, "2级")));
// 6. 高斯金字塔 3级
Mat img6 = new Mat();
CvInvoke.PyrDown(img5.Clone(), img6);
PreviewImage6 = new WriteableBitmap(Bitmap2BitmapImage(Text(img6.Bitmap, "3")));
// 7. 拉布拉斯 1 级
var imgG = img6.Clone();
var imgL = new Mat();
var imgD = new Mat();
var imgU = new Mat();
CvInvoke.PyrDown(imgG,imgD);
CvInvoke.PyrUp(imgD, imgU);
imgL = imgG - imgU;
PreviewImage7 = new WriteableBitmap(Bitmap2BitmapImage(Text2(imgL.Bitmap, "1")));
// 8. 拉布拉斯 2 级
imgG = img5.Clone();
CvInvoke.PyrDown(imgG, imgD);
CvInvoke.PyrUp(imgD, imgU);
imgL = imgG - imgU;
PreviewImage8 = new WriteableBitmap(Bitmap2BitmapImage(Text2(imgL.Bitmap, "2级")));
// 9. 拉布拉斯 2 级
imgG = image0.Clone();
CvInvoke.PyrDown(imgG, imgD);
CvInvoke.PyrUp(imgD, imgU);
imgL = imgG - imgU;
PreviewImage9 = new WriteableBitmap(Bitmap2BitmapImage(Text2(imgL.Bitmap, "拉布拉斯 3级")));