opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()

这篇具有很好参考价值的文章主要介绍了opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是图像金字塔?

图像金字塔(Image> Pyramid)是一种用于多尺度图像处理和分析的技术,它通过构建一系列不同分辨率的图像,从而使得图像可以在不同尺度下进行处理和分析。图像金字塔在计算机视觉、图像处理和计算机图形学等领域中广泛应用,可以用于目标检测、特征提取、图像匹配、尺度不变特征变换(SIFT)等任务。

图像金字塔通常分为两种类型:高斯金字塔和拉普拉斯金字塔。

  1. 高斯金字塔(Gaussian Pyramid):高斯金字塔通过不断降采样(缩小)原始图像来构建,每一层图像都是前一层图像的一半大小。降采样可以通过平均像素值或使用高斯滤波器来实现。高斯金字塔在图像缩放、分割、模糊等任务中有用。

  2. 拉普拉斯金字塔(Laplacian Pyramid):拉普拉斯金字塔是通过从高斯金字塔中的每一层图像减去其上一层的上采样图像得到的。这一过程使得每一层图像包含了高频成分,即图像细节。拉普拉斯金字塔在图像增强、压缩、图像融合等方面有用。

使用图像金字塔,可以在不同尺度下对图像进行处理,从而能够更好地应对图像中存在的不同尺度的特征。例如,在目标检测中,可以使用图像金字塔来检测不同大小的目标物体。在SIFT等特征提取方法中,金字塔可以帮助提取出尺度不变的特征点。

总之,图像金字塔是一种重要的多尺度处理工具,能够在图像分析和处理中提供更丰富的信息,以适应不同尺度的特征和任务。

应用场景:

图像金字塔在计算机视觉、图像处理和计算机图形学等领域中有许多应用场景,下面列举了一些常见的应用场景:

  1. 目标检测:在目标检测任务中,物体可能以不同的尺度出现在图像中。使用图像金字塔可以在不同尺度下进行检测,从而识别不同大小的目标物体。

  2. 特征提取:一些特征提取方法,如尺度不变特征变换(SIFT)、尺度不变特征点检测(SURF)等,需要在不同尺度下提取特征。图像金字塔可以帮助提取出尺度不变的特征点和描述符。

  3. 图像匹配与对准:在图像配准和匹配任务中,图像可能存在缩放、旋转等变换。使用图像金字塔可以在不同尺度下进行匹配和对准,提高匹配的准确性和鲁棒性。

  4. 图像融合:将两幅图像融合成一幅图像时,可能需要考虑图像的尺度和细节。图像金字塔可以帮助在不同尺度下融合图像,实现平滑的过渡和自然的融合效果。

  5. 图像增强与去噪:在图像增强和去噪任务中,可以通过图像金字塔在不同尺度下对图像进行处理,实现局部增强和噪声抑制。

  6. 缩放与旋转:对于图像的缩放和旋转操作,图像金字塔可以帮助实现平滑的过渡和保留图像细节。

  7. 纹理分析:在纹理分析任务中,不同尺度下的纹理特征可能会影响分析结果。图像金字塔可以用于提取不同尺度下的纹理特征。

  8. 图像压缩:在图像压缩中,可以使用金字塔结构来分析图像的不同尺度特征,从而更有效地进行压缩编码。

实现原理:

图像金字塔是由一幅图像的多个不同分辨率的子图所构成的图像集合。该组图像是由单个图像通过不断地降采样所产生的,最小的图像可能仅仅有一个像素点。
图 11-1 是一个图像金字塔的示例。从图中可以看到,图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低的图像集合。

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能

通常情况下,图像金字塔的底部是待处理的高分辨率图像(原始图像),而顶部则为其低分辨率的近似图像。向金字塔的顶部移动时,图像的尺寸和分辨率都不断地降低。通常情况下,每向上移动一级,图像的宽和高都降低为原来的二分之一。

图像金字塔是同一图像不同分辨率的子图集合,是通过对原图像不断地向下采样而产生的,即由高分辨率的图像(大尺寸)产生低分辨率的近似图像(小尺寸)。

最简单的图像金字塔可以通过不断地删除图像的偶数行和偶数列得到。例如,有一幅图像,其大小是 NN,删除其偶数行和偶数列后得到一幅(N/2)(N/2)大小的图像。经过上述处理后,图像大小变为原来的四分之一,不断地重复该过程,就可以得到该图像的图像金字塔。

也可以先对原始图像滤波,得到原始图像的近似图像,然后将近似图像的偶数行和偶数列删除以获取向下采样的结果。有多种滤波器可以选择。例如:

  • 邻域滤波器:采用邻域平均技术求原始图像的近似图像。该滤波器能够产生平均金字塔。
  • 高斯滤波器:采用高斯滤波器对原始图像进行滤波,得到高斯金字塔。这是 OpenCV 函数 cv2.pyrDown()所采用的方式。

高斯金字塔是通过不断地使用高斯金字塔滤波、采样所产生的,其过程如图 11-2 所示。

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能
经过上述处理后,原始图像与各次向下采样所得到的结果图像共同构成了高斯金字塔
例如,可以将原始图像称为第 0 层,第 1 次向下采样的结果图像称为第 1 层,第 2 次向下采样的结果图像称为第 3 层,以此类推。上述图像所构成的高斯金字塔如图 11-3 所示。在本章中为了便于表述,统一将图像金字塔中的底层称为第 0 层,底层上面的一层称为第 1 层,并以此类推。

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能
---------------------------------------------------------------------
在向上采样的过程中,通常将图像的宽度和高度都变为原来的 2 倍。这意味着,向上采样的结果图像的大小是原始图像的 4 倍。因此,要在结果图像中补充大量的像素点。对新生成的像素点进行赋值,称为插值处理,该过程可以通过多种方式实现,例如最临近插值就是用最邻
近的像素点给当前还没有值的像素点赋值。

有一种常见的向上采样,对像素点以补零的方式完成插值。通常是在每列像素点的右侧插入值为零的列,在每行像素点的下方插入值为零的行。在图 11-4 中,左侧是要进行向上采样的4 个像素点,右侧是向上采样时进行补零后的处理结果。

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能
接下来,使用向下采样时所用的高斯滤波器(高斯核)对补零后的图像进行滤波处理,以获取向上采样的结果图像。但是需要注意,此时图像中四分之三像素点的值都是零。所以,要将高斯滤波器系数乘以 4,以保证得到的像素值范围在其原有像素值范围内。

例如,针对图 11-4 右侧的像素点,其对应的是 8 位图像,像素值的范围是[0, 255]。由于其中四分之三的像素点的值都为零,如果直接使用高斯滤波器对其进行卷积计算,会导致像素值的范围变为[0, 255*1/4]。
所以,要将所使用的高斯滤波器系数乘以 4,以保证得到像素值的范围仍旧在[0, 255]内。

或者,从另一个角度理解,在原始图像内每个像素点的右侧列插入零值列,在每个像素点的下一行插入零值行,将图像变为原来的两倍宽、两倍高。接下来,将补零后的图像用向下采样时所使用的高斯滤波器进行卷积运算。最后,将图像内每个像素点的值乘以 4,以保证像素值的范围与原始图像的一致。

通过以上分析可知,向上采样和向下采样是相反的两种操作。但是,由于向下采样会丢失像素值,所以这两种操作并不是可逆的。也就是说,对一幅图像先向上采样、再向下采样,是无法恢复其原始状态的;同样,对一幅图像先向下采样、再向上采样也无法恢复到原始状态。

pyrDown 函数及使用

OpenCV 提供了函数 cv2.pyrDown(),用于实现图像高斯金字塔操作中的向下采样,其语法形式为:

dst = cv2.pyrDown( src[, dstsize[, borderType]] )

其中:

  • dst 为目标图像。
  • src 为原始图像。
  • dstsize 为目标图像的大小。
  • borderType 为边界类型, 默认值为 BORDER_DEFAULT , 且这里仅 支 持BORDER_DEFAULT。
    默认情况下,输出图像的大小为 Size((src.cols+1)/2, (src.rows+1)/2)。在任何情况下,图像尺寸必须满足如下条件:
|dst. width ∗ 2 − src. cols|≤2
|dst. height ∗ 2 − src. rows|≤2

cv2.pyrDown()函数首先对原始图像进行高斯滤波变换,以获取原始图像的近似图像。比如,高斯滤波变换所使用的核(高斯滤波器)为:

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能
在获取近似图像后,该函数通过抛弃偶数行和偶数列来实现向下采样。

代码示例

使用函数 cv2.pyrDown()对一幅图像进行向下采样,观察采样的结果。

import cv2
o=cv2.imread("lena.png",cv2.IMREAD_GRAYSCALE)
r1=cv2.pyrDown(o)
r2=cv2.pyrDown(r1)
r3=cv2.pyrDown(r2)
print("o.shape=",o.shape)
print("r1.shape=",r1.shape)
print("r2.shape=",r2.shape)
print("r3.shape=",r3.shape)
cv2.imshow("original",o)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)
cv2.waitKey()
cv2.destroyAllWindows()

使用 cv2.pyrDown()函数进行了 3 次向下采样,并且用 print()函数输出了每次采样结果图像的大小。cv2.imshow()函数显示了原始图像和经过 3 次向下采样后得到的结果图像。
运行结果:

o.shape= (512, 512)
r1.shape= (256, 256)
r2.shape= (128, 128)
r3.shape= (64, 64)

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能
从上述结果可知,经过向下采样后,图像的行和列的数量都会变为原来的二分之一,图像整体的大小会变为原来的四分之一。这里为了便于比较,将它们调整成了等高格式展示。通过图像的比例关系,可以推断出各个图像的大致尺寸比例

pyrUp 函数及使用

OpenCV 中,使用函数 cv2.pyrUp()实现图像金字塔操作中的向上采样,其语法形式如下:
dst = cv2.pyrUp( src[, dstsize[, borderType]] )
其中:

  • dst 为目标图像。
  • src 为原始图像。
  • dstsize 为目标图像的大小。
  • borderType 为边界类型, 默认值为 BORDER_DEFAULT , 且这里仅 支 持BORDER_DEFAULT。

默认情况下,目标图像的大小为 Size(src.cols*2, src.rows*2)
在任何情况下,图像尺寸需要满足下列条件:

|dst. width − src. cols ∗ 2|≤mod(dst. widh, 2)
|dst. height − src. rows ∗ 2|≤mod(dst. height, 2)

对图像向上采样时,在每个像素的右侧、下方分别插入零值列和零值行,得到一个偶数行、偶数列(即新增的行、列)都是零值的新图像 New。接下来,用向下采样时所使用的高斯滤波器对新图像 New 进行滤波,得到向上采样的结果图像。需要注意的是,为了确保像素值区间在向上采样后与原始图像保持一致,需要将高斯滤波器的系数乘以 4。
上一段描述的是 OpenCV 函数 cv2.pyrUp()所实现的向上采样过程。了解上述过程,有助于我们更好地理解和使用该函数。

但是,OpenCV 库的目的就是要让我们忽略这些细节,直接使
用函数 cv2.pyrUp()完成向上采样。所以,在刚开始的学习阶段,我们也可以先忽略这些细节。

代码示例:

import cv2
o=cv2.imread("lena.png")
r1=cv2.pyrUp(o)
r2=cv2.pyrUp(r1)
r3=cv2.pyrUp(r2)
print("o.shape=",o.shape)
print("r1.shape=",r1.shape)
print("r2.shape=",r2.shape)
print("r3.shape=",r3.shape)
cv2.imshow("original",o)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

o.shape= (512, 512, 3)
r1.shape= (1024, 1024, 3)
r2.shape= (2048, 2048, 3)
r3.shape= (4096, 4096, 3)

从上述输出结果可知,经过向上采样后,图像的宽度和高度都会变为原来的 2 倍,图像整体大小会变为原来的 4 倍。

采样可逆性的研究

图像在向上采样后,整体尺寸变为原来的 4 倍;在向下采样后,整体尺寸变为原来的四分之一。

图 11-7 展示了图像在采样前后的大小变化关系。一幅 MN 大小的图像经过向下采样后大小会变为(M/2)(N/2);一幅 MN 大小的图像经过向上采样后大小会变为(2M)(2N)。

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能
一幅图像在先后经过向下采样和向上采样后,会恢复为原始大小,如图 11-8 所示。

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能

虽然一幅图像在先后经过向下采样、向上采样后,会恢复为原始大小,但是向上采样和向下采样不是互逆的。也就是说,虽然在经历两次采样操作后,得到的结果图像与原始图像的大小一致,肉眼看起来也相似,但是二者的像素值并不是一致的

代码示例:

使用函数 cv2.pyrDown()和 cv2.pyrUp(),先后将一幅图像进行向下采样、向上采样,观察采样的结果及结果图像与原始图像的差异。

import cv2
o=cv2.imread("lena.png")
down=cv2.pyrDown(o)
up=cv2.pyrUp(down)
diff=up-o #构造 diff 图像,查看 up 与 o 的区别
print("o.shape=",o.shape)
print("up.shape=",up.shape)
cv2.imshow("original",o)
cv2.imshow("up",up)
cv2.imshow("difference",diff)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

o.shape= (512, 512, 3)
up.shape= (512, 512, 3)

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown(),opencv,计算机视觉,人工智能,opencv,计算机视觉,目标跟踪,人工智能

  • 左图是原始图像 o。
  • 中间图是对图像 down(通过对原始图像 o 向下采样得到)进行向上采样后获得的结果图
    像 up。
  • 右图是对图像 up 和原始图像 o 进行减法运算的结果(差值)图像 diff。图像 diff 反映的是图像 up 和原始图像 o 的差值。

本例在尝试向大家说明,原始图像先后经过向下采样、向上采样后,所得到的结果图像与原始图像的大小一致,看起来也很相似,但是它们的像素值并不是一致的。文章来源地址https://www.toymoban.com/news/detail-643665.html

到了这里,关于opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV基础补充自适应阈值及图像金字塔

    对于OpenCV知识点还有很多,基础的大家可以参考前面几节。 OpenCv基础之绘图及几何变换实例 OpenCV基础操作之图像的形态学运算 OpenCV基础操作之边界填充、图像阈值以及图像平滑处理 OpenCV基础之边缘检测与轮廓描绘 OpenCV基础之模板匹配与直方图 OpenCV图像处理之傅里叶变换

    2024年02月02日
    浏览(25)
  • OpenCv之图像金字塔

    目录 一、图像金字塔介绍  二、高斯金字塔 三、拉普拉斯金字塔 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说,图像金字塔是同一图像不同分辨率的子图集合。 图像金字塔的作用: 图像金

    2024年02月12日
    浏览(25)
  • OpenCV 11(图像金字塔)

    **图像金字塔**是图像中 多尺度表达 的一种 ,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合. 图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采样获得,直到达到某个终止

    2024年02月09日
    浏览(26)
  • 【OpenCV】第十一章: 图像金字塔

    第十一章: 图像金字塔 一、什么是图像金字塔¶ 同一张图片不同分辨率的子图的集合。 图像金字塔底部是待处理的高分辨率图像,也就是原始图像,顶部是低分辨率的近似图像。一般情况下,都是每向上移动一级,图像的宽和高都降低为原来的1/2 。 二、为什么要生成图像金

    2024年02月03日
    浏览(36)
  • Python Opencv实践 - 图像金字塔

     

    2024年02月12日
    浏览(22)
  • 【OpenCV实现平滑图像金字塔,轮廓:入门】

    文章内容的概要: 平滑图像金字塔: 轮廓: 使用图像金字塔去创造一个新的水果,“橘果(Orapple)” 函数:cv.pyrUp(), cv.pyrDown() 通常,我们处理图像时使用的是固定分辨率。然而,在某些情况下,我们需要在不同的分辨率下处理同一张图像。例如,在搜索图像中的某些内容(

    2024年02月08日
    浏览(31)
  • OpenCV图像金字塔pyrDown下采样

    2024年02月13日
    浏览(27)
  • OpenCV官方教程中文版 —— 图像金字塔

    • 学习图像金字塔 • 使用图像创建一个新水果:“橘子苹果” • 将要学习的函数有:cv2.pyrUp(),cv2.pyrDown()。 一般情况下,我们要处理是一副具有固定分辨率的图像。但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一幅图像中查找某

    2024年02月07日
    浏览(33)
  • 构建图像金字塔:探索 OpenCV 的尺度变换技术

    在计算机视觉领域,图像金字塔是一种强大的技术,可用于在不同尺度下对图像进行分析和处理。金字塔的概念借鉴了古埃及的金字塔形状,其中每一级都是前一级的缩小版本。本篇博客将深入探讨如何构建图像金字塔,以及如何在实际应用中利用金字塔来解决各种计算机视

    2024年02月08日
    浏览(34)
  • Python-OpenCV中的图像处理-图像金字塔

    同一图像的不同分辨率的子图集合,如果把最大的图像放在底部,最小的放在顶部,看起来像一座金字塔,故而得名图像金字塔。 cv2.pyrUp():上采样 cv2.pyrDown():下采样 高斯金字塔的顶部是通过将底部图像中的连续的行和列去除得到的。顶部图像中的每个像素值等于下一层图

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包