OpenCV-C++ 图像上采样和降采样

图像金字塔是由一系列图像组成的,最底层图像的尺寸最大,最上层图像的尺寸最小;

有两种类型的金字塔:

  • 高斯金字塔: 用于下采样;
  • 拉普拉斯金字塔: 用于重建一张图片,利用上层的降采样图像进行恢复;

图像金字塔中包含两种操作,分别是上采样操作和降采样操作;

具体来看OpenCV中有关pyrUppyrDown的使用;

图像上采样

用于放大图像;

OpenCV中的pyrUp的使用:

// 图像上采样
Mat srcUp;
pyrUp(src, srcUp, Size(src.cols*2, src.rows*2));

图像降采样

用于缩小图像;

OpenCV中的pyrDown的使用:

// 图像降采样
Mat srcDown;
pyrDown(src, srcDown, Size(src.cols/2, src.rows/2));

高斯不同(Difference of Gaussian, DOG)

高斯不同(Different of Gaussian-DOG)

  • 定义: 就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像,称为高斯不同(DOG);
  • 高斯不同是图像图像的内在特征,在灰度图像增强, 角点检测中经常用到;\
Mat srcGray, g1, g2, dogImg;

// 将RGB图像转换称Gray图像
cvtColor(src, srcGray, COLOR_BGR2GRAY);

// 高斯不同(Difference of Gaussian, DOG)
GaussianBlur(srcGray, g1, Size(5, 5), 0, 0);
GaussianBlur(g1, g2, Size(5, 5), 0, 0);
subtract(g1, g2, dogImg, Mat());
// 归一化显示
normalize(dogImg, dogImg, 255, 0, NORM_MINMAX); 

另外,有关subtractAPI的使用:

void subtract(InputArray src1, InputArray src2, OutputArray dst,
              InputArray mask = noArray(), int dtype = -1);

该方法用于计算两个数组或者数组与标量之间的差;

  • src1表示第一个数组或者标量
  • src2表示第二个数组或者标量
  • dst表示输出,与输入数组的维度和通道数目一致;
  • mask可选,一个8-bit单通道数组,用于指定要更改的输出数组的元素;

上面的API等同于:

dst = src1 - src2;
dst -= src1; // equivalent to subtract(dst, src1, dst);

Reference:

posted @ 2021-04-11 19:42  chenzhen0530  阅读(803)  评论(0编辑  收藏  举报