前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python图像识别] 二十二.图像金字塔之图像向下取样和向上取样

[Python图像识别] 二十二.图像金字塔之图像向下取样和向上取样

作者头像
Eastmount
发布2024-01-16 14:45:27
1650
发布2024-01-16 14:45:27
举报

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。

本文将讲解图像金字塔,包括图像向下采样和图像向上采样。基础性文章,希望对你有所帮助,且看且珍惜!

  • 一.图像金字塔
  • 二.图像向下采样
  • 三.图像向上采样
  • 四.总结

该系列在github所有源代码:

  • https://github.com/eastmountyxz/ ImageProcessing-Python

前文回顾(下面的超链接可以点击喔):

学Python近十年,认识了很多大佬和朋友,感恩。深知自己很菜,得拼命努力前行,编程也没有什么捷径,干就对了。希望未来能更透彻学习和撰写文章,同时非常感谢参考文献中的大佬们的文章和分享,共勉。 - https://blog.csdn.net/eastmount


一.图像金字塔

前面讲解的图像采样处理可以降低图像的大小,本小节将补充图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp()和pyrDown()函数。

图像金字塔是指由一组图像且不同分别率的子图集合,它是图像多尺度表达的一种,以多分辨率来解释图像的结构,主要用于图像的分割或压缩。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。如图1所示,它包括了四层图像,将这一层一层的图像比喻成金字塔。图像金字塔可以通过梯次向下采样获得,直到达到某个终止条件才停止采样,在向下采样中,层级越高,则图像越小,分辨率越低。

生成图像金字塔主要包括两种方式——向下取样、向上取样。在上图中,将图像G0转换为G1、G2、G3,图像分辨率不断降低的过程称为向下取样;将G3转换为G2、G1、G0,图像分辨率不断增大的过程称为向上取样。


二.图像向下取样

在图像向下取样中,使用最多的是高斯金字塔。它将对图像Gi进行高斯核卷积,并删除原图中所有的偶数行和列,最终缩小图像。其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(权重不同)经过加权平均后得到。常见的3×3和5×5高斯核如下:

高斯核卷积让临近中心的像素点具有更高的重要度,对周围像素计算加权平均值,如图2所示,其中心位置权重最高为0.4。

显而易见,原始图像Gi具有M×N个像素,进行向下取样之后,所得到的图像Gi+1具有M/2×N/2个像素,只有原图的四分之一。通过对输入的原始图像不停迭代以上步骤就会得到整个金字塔。注意,由于每次向下取样会删除偶数行和列,所以它会不停地丢失图像的信息。

在OpenCV中,向下取样使用的函数为pyrDown(),其原型如下所示:

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

  • src表示输入图像,
  • dst表示输出图像,和输入图像具有一样的尺寸和类型
  • dstsize表示输出图像的大小,默认值为Size()
  • borderType表示像素外推方法,详见cv::bordertypes

实现代码如下所示:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('nv.png')

#图像向下取样
r = cv2.pyrDown(img)

#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrDown', r)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果如图所示,它将原始图像压缩成原图的四分之一。

多次向下取样的代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('nv.png')

#图像向下取样
r1 = cv2.pyrDown(img)
r2 = cv2.pyrDown(r1)
r3 = cv2.pyrDown(r2)

#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrDown1', r1)
cv2.imshow('PyrDown2', r2)
cv2.imshow('PyrDown3', r3)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果如图所示:


三.图像向上取样

在图像向上取样是由小图像不断放图像的过程。它将图像在每个方向上扩大为原图像的2倍,新增的行和列均用0来填充,并使用与“向下取样”相同的卷积核乘以4,再与放大后的图像进行卷积运算,以获得“新增像素”的新值。如图所示,它在原始像素45、123、89、149之间各新增了一行和一列值为0的像素。

在OpenCV中,向上取样使用的函数为pyrUp(),其原型如下所示:

dst = pyrUp(src[, dst[, dstsize[, borderType]]])

  • src表示输入图像,
  • dst表示输出图像,和输入图像具有一样的尺寸和类型
  • dstsize表示输出图像的大小,默认值为Size()
  • borderType表示像素外推方法,详见cv::bordertypes

实现代码如下所示:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('lena.png')

#图像向上取样
r = cv2.pyrUp(img)

#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrUp', r)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果如图所示,它将原始图像扩大为原图像的四倍。

多次向上取样的代码如下:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import cv2  
import numpy as np  
import matplotlib.pyplot as plt

#读取原始图像
img = cv2.imread('lena2.png')

#图像向上取样
r1 = cv2.pyrUp(img)
r2 = cv2.pyrUp(r1)
r3 = cv2.pyrUp(r2)

#显示图像
cv2.imshow('original', img)
cv2.imshow('PyrUp1', r1)
cv2.imshow('PyrUp2', r2)
cv2.imshow('PyrUp3', r3)
cv2.waitKey()
cv2.destroyAllWindows()

输出结果如图所示,每次向上取样均为上次图像的四倍,但图像的清晰度会降低。


四.总结

希望这篇基础性文章对您有所帮助,如果有错误或不足之处,请海涵! 最近继续备考博士,接下来还有两个学校,一方面耐心等待之前的结果;另一方面继续复习,周末女神陪着来书店看书,岁月静好,砥砺前行!在这期间,自己经历了很多酸甜苦辣的事情,希望陌生的你也学会享受生活,共勉。

(By:Eastmount 2024-01-12 夜于贵阳)


参考如下文献:

  • eastmount - [数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
  • 《数字图像处理》(第3版),冈萨雷斯著,阮秋琦译,电子工业出版社,2013年.
  • 《数字图像处理学》(第3版),阮秋琦,电子工业出版社,2008年,北京.
  • 《OpenCV3编程入门》,毛星云,冷雪飞,电子工业出版社,2015,北京.
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 娜璋AI安全之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二.图像向下取样
  • 三.图像向上取样
  • 四.总结
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档