OpenCV学习 基础图像操作(八):图像上采样和降采样

图像金字塔

在图像处理中常常会调整图像大小,最常见的是放大(zoom in)和缩小(zoom out),一个图像金字塔是一系列的图像组成,最底下的尺寸最大,最上方的尺寸最小,从空间上看就像一个金字塔。

高斯金字塔

  • 高斯金字塔是从底向上,逐层降采样得到的。
  • 降采样之后图像大小由MxN变为M/2xN/2,就是对原图像删除偶数的行与列,即获得上一层的图片。
  • 高斯金字塔的生成过程分为两步:
    • 对当前层进行高斯模糊
    • 删除当前层的偶数行与列

高斯不同(DOG)

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

Laplace金字塔

  • 由逐层的高斯不同组成。
  • 经常用于从小尺度图像恢复大尺度的图像融合中

API介绍

上采样与降采样

void pyrUp(InputArray src,//输入图像,即源图像,填Mat类的对象即可
           OutputArraydst,//输出图像,和源图片有一样的尺寸和类型。
           const Size& dstsize=Size(),// 输出图像的大小;有默认值Size(),即默认情况下由Size(src.cols*2,src.rows*2)来进行计算
           int borderType=BORDER_DEFAULT )   //边界模式 默认deaft就好



void pyrDown(InputArray src,//输入图像,即源图像,填Mat类的对象即可
           OutputArraydst,//输出图像,和源图片有一样的尺寸和类型。
           const Size& dstsize=Size(),// 输出图像的大小
           int borderType=BORDER_DEFAULT )   //边界模式 默认deaft就好

矩阵归一化


normalize(src, det, 255, 0, NORM_MINMAX);	
//src输入;dst输出,支持原地运算;alpha:range normalization模式的最小值;beta:range normalization模式的最大值,不用于norm normalization(范数归一化)模式。	
//normType	
//归一化的类型,可以有以下的取值:	
//NORM_MINMAX : 数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。	
//NORM_INF : 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C - 范数(绝对值的最大值)	
//NORM_L1 : 归一化数组的L1 - 范数(绝对值的和)	
//NORM_L2 : 归一化数组的(欧几里德)L2 - 范数

代码与实践

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

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
	//src = imread("src.jpg");
	Mat src = imread("cat.png");
	if (!src.data)
	{
		cout << "cannot open image" << endl;
		return -1;
	}
	namedWindow("input image", WINDOW_AUTOSIZE);
	imshow("input image", src);

	Mat up_out(src.size(),src.type());
	Mat down_out(src.size(), src.type());

	pyrDown(src, down_out);
	pyrUp(src,up_out);
	imshow("Down", down_out);
	imshow("Up", up_out);


	//高斯不同DOG(different of gaussian)	
        //就是把同一张图像在不同的参数下做高斯模糊之后的结果相减,得到的输出图像;
        //高斯不同是图像的内在特征,在灰度图像增强、角点检测中经常用到。
	Mat gray_src, dst2, dst3, dog_Image;	

	cvtColor(src, gray_src, COLOR_BGR2GRAY);	

	GaussianBlur(gray_src, dst2, Size(3, 3), 0, 0);	
	GaussianBlur(dst2, dst3, Size(3, 3), 0, 0);	
	subtract(dst2, dst3, dog_Image);

	//归一化显示	
	normalize(dog_Image, dog_Image, 255, 0, NORM_MINMAX);	
	

	imshow("DOG", dog_Image);
	
	waitKey(0);
	return 0;
}

图片金字塔

DOG

猜你喜欢

转载自blog.csdn.net/fan1102958151/article/details/107096978
今日推荐