OpenCV12---图像的采样和降采样(图像金字塔)

十二、图像上的采样和降采样
1、图像金字塔
在这里插入图片描述
概念:

  • 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但图像金字塔可以保证每一层图像的特征不变。
  • 一个图像金字塔是一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像一个古代的金字塔。
  • 高斯金字塔是从底向上,逐层降采样得到。
  • 降采样之后图像大小是原图像M*N的M/2 * N/2,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片。

步骤:

  • 对当前层进行高斯模糊
  • 删除当前层的偶数行与列,即可得到上一层的图像,这样上一层跟下一层比,都只有它的1/4大小。

分类:

  • 高斯金字塔:用来对图像进行降采样
  • 拉普拉斯金字塔:用来重建一张图片根据它的上层降采样图片

2、高斯不同(DOG)

  • 定义
    就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像。称为高斯不同。
  • 高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。

3、采样相关API

  • 上采样()— zoom in 放大
    pyrUP(Mat src, Mat dst, Size(src.cols*2, src.rows*2));生成的图像是原图在宽与高各放大2倍
  • 降采样()— zoom out 缩小
    pyrUP(Mat src, Mat dst, Size(src.cols/2, src.rows/2));生成的图像是原图在宽与高各缩小1/2
  • 高斯不同
GaussianBlur(gray_src, g1, Size(3,3), 0, 0);
GaussianBlur(g1, g2, Size(3, 3), 0, 0);
subtract(g1, g2, dog, Mat());//将两个图象g1、g2的像素值相减赋给图像dog
  • 归一化操作
    可将图像像素值控制在某个范围之内。(用于扩大或缩小像素范围)
normalize(dog, dog, 255, 0, NORM_MINMAX);//将图片像素值放大到0到255之间,dog为输入输出图像;255为最大值;0为最小值;类型为NORM_MINMAX。计算公式:最大值255 *(用图像中的每个像素值-最小像素值)/(图像中最大像素值-最小像素值)+ 最小值

示例代码:(上采样、降采样及高斯不同)

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    Mat src, dst;
    src = imread("添加图片路径");
    if (src.empty()) {
        cout << "could not load image..." << endl;
        return -1;
    }
    char INPUT_WIN[] = "input image";
    char OUTPUT_WIN[] = "Up";
    namedWindow(INPUT_WIN, WINDOW_AUTOSIZE);
    namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);
    imshow(INPUT_WIN, src);

    //上采样
    pyrUP(src, dst, Size(src.cols*2, src.rows*2));
    imshow(INPUT_WIN, dst);

   //降采样
   Mat s_down;
   pyrDOWN(src, s_down, Size(src.cols / 2, src.rows / 2));
   imshow("Down", s_down);

   //高斯不同
   Mat gray_src, g1, g2, dog;
   cvtCOLOR(src, gray_src, COLOR_BGR2GRAY);//转灰度
   GaussianBlur(gray_src, g1, Size(3,3), 0, 0);//将灰度图进行高斯模糊
   GaussianBlur(g1, g2, Size(3, 3), 0, 0);//将模糊后的图像在进行模糊
   subtract(g1, g2, dog, Mat());//将两个图象g1、g2的像素值相减赋给图像dog

   normalize(dog, dog, 255, 0, NORM_MINMAX);//将图片像素值放大到0到255之间 
   imshow("dog image", dog);
       
    waitKey(0);
    return 0;
}

输出结果:(input image:原图像;UP:上采样 ;DOWN:降采样;dog image:高斯不同)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值