C++OpenCV系统学习(6)——图像金字塔上采样和降采样、角点检测

目录

1.概念

1.1图像金字塔的概念

1.2高斯金字塔

1.2.1高斯金字塔

 1.2.2采样相关API

1.2.3代码演示

1.2.4高斯不同DOG案例

2.补充


1.概念

1.1图像金字塔的概念

  • 我们在图像处理中常常会调整图像的大小,最常见的就是方法(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像分放大和缩小,但是这里我们介绍图像金字塔
  • 一个图像金字塔式一系列图片组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就像是一个古埃及金字塔。
  • 在图像金字塔在图像中产生不同分辨率的图像,然后在不同的尺度空间去寻找图像对应的特征。金字塔变换会保持图像的特征一直存在

1.2高斯金字塔

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

1.2.1高斯金字塔

  • 高斯金字塔是从低向上,逐层降采样得到
  • 降采样之后图片大小是原图像MxN的M/2 xN/2,就是对原图像删除偶数行与列,即得到降采样之后上一层的图片
  • 高斯金字塔的生成过程分为两步:(1)对当前层进行高斯模糊(2)删除当前层的偶数行与列,即可得到上一层的图像,这样上一层跟下一层相比都只有它的1/4的大小

那么图像在金字塔每层的特征是如何得到的呢?

注意通过高斯不同(DOG=difference of Gaussian)

知识点扩展——高斯不同:

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

 1.2.2采样相关API

  • 上采样(cv::pyrUp)--zoom in放大
  • 降采样(cv::pyrDown)--zoom out缩小

pyrUp(Mat src,Mat dst,Size(src.cols*2,src.rows*2))生成的图像是原图在宽与高各放大二倍

pyrDown(Mat src,Mat dst,Size(src.cols/2,src.rowa/2))生成的图像是原图在宽和高都缩小1/2

1.2.3代码演示

void MyApi::image_pyramid_(Mat& image)
{
	Mat dst;
	//上采样
	pyrUp(image, dst, Size(image.cols * 2, image.rows * 2));
	imshow("上采样输出", dst);

	//降采样
	Mat s_down;
	pyrDown(image, s_down, Size(image.cols / 2, image.rows / 2));
	imshow("降采样输出", s_down);
}

分别是原图、上采样、降采样结果


1.2.4高斯不同DOG案例

void MyApi::image_pyramid_(Mat& image)
{

	//高斯不同DOG
	Mat gray_image,g1,g2,diff_image;
	cvtColor(image, gray_image, COLOR_BGR2GRAY);
	GaussianBlur(gray_image, g1, Size(3, 3), 0, 0);
	GaussianBlur(g1, g2, Size(3, 3), 0, 0);
	//计算高斯不同
	subtract(g1, g2, diff_image, Mat());
	imshow("DOG图像", diff_image);
}

                       

 原图和DOG图:仔细看才可以看到脸的轮廓。

由于不容易看清晰,我们可以把像素放缩都255.

 代码如下:

void MyApi::image_pyramid_(Mat& image)
{

	//高斯不同DOG
	Mat gray_image,g1,g2,diff_image;
	cvtColor(image, gray_image, COLOR_BGR2GRAY);
	GaussianBlur(gray_image, g1, Size(3, 3), 0, 0);
	GaussianBlur(g1, g2, Size(3, 3), 0, 0);
	//计算高斯不同
	subtract(g1, g2, diff_image, Mat());
	normalize(diff_image, diff_image, 255, 0, NORM_MINMAX);//把他放缩到0-255空间就可以看到了
	imshow("DOG图像", diff_image);
}

结果如下: 

2.补充

补充:角点检测 

角点检测是计算机视觉系统中用来获取图像特征的一种方法。我们都常说,这幅图像很有特点,但是一问他到底有哪些特点,或者这幅图有哪些特征可以让你一下子就识别出该物体,你可能就说不出来了。

角点通常被定义为两条边的交点。比如,三角形有三个角,矩形有四个角,这些就是角点,也是他们叫做矩形、三角形的特征,我们看到一些几何图形具有三个角,那么我们便可以脱口而出说这是一个三角形。

上面所说的是严格意义上的角点,但是从广义来说,角点指的是拥有特定特征的图像点,这些特征点在图像中有具体的坐标,并具有某些数学特征(比如局部最大或最小的灰度)。

图像特征类型可以被分为三种:

  • 边缘
  • 角点(感兴趣关键点)
  • 斑点(感兴趣区域)

角点是个很特殊的存在。如果某一点在任意方向的一个微小的变动都会引起灰度很大的变化,那么我们就可以把该点看做是角点。

Harris 角点检测

Harris角点检测是一种直接基于灰度图的角点提取算法,稳定性高,尤其对L型角点(也就是直角)检测精度高。缺点也是明显的,就是运算速度慢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI炮灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值