欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-03 18:19:31
上采样与降采样上采样降采样图像金字塔在图像处理中常常会调整图像大小,最常见的是放大(zoom in)和缩小(zoom out),一个图像金字塔是一系列的图像组成,最底下的尺寸最大,最上方的尺寸最小,从空间上看就像一个金字塔。高斯金字塔高斯金字塔是从底向上,逐层降采样得到的。降采样之后图像大小由MxN变为M/2xN/2,就是队员图像删除偶数的行与列,即获得上一层的图片。高斯金字塔的生成过程分为两步:对当前层进行高斯模糊删除当前层的偶数行与列高斯不同(DOG)...

图像金字塔

在图像处理中常常会调整图像大小,最常见的是放大(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;
}

图片金字塔

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

DOG

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

 

本文地址:https://blog.csdn.net/fan1102958151/article/details/107096978