OpenCV-C++ 图像上采样和降采样
图像金字塔是由一系列图像组成的,最底层图像的尺寸最大,最上层图像的尺寸最小;
有两种类型的金字塔:
- 高斯金字塔: 用于下采样;
- 拉普拉斯金字塔: 用于重建一张图片,利用上层的降采样图像进行恢复;
图像金字塔中包含两种操作,分别是上采样操作和降采样操作;
具体来看OpenCV中有关pyrUp
和pyrDown
的使用;
图像上采样
用于放大图像;
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);
另外,有关subtract
API的使用:
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: