跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

yizhihongxing

摘要:本文讲述图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp()和pyrDown()函数。

本文分享自华为云社区《[Python图像处理] 二十一.图像金字塔之图像向下取样和向上取样》,作者:eastmount。

一.图像金字塔

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

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

二.图像向下取样

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

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

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

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

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

实现代码如下所示:

# -*- 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()

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

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

# -*- 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()

输出结果如图所示:

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

三.图像向上取样

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

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

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

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

实现代码如下所示:

# -*- 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()

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

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

# -*- 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()

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

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

希望这篇基础性文章对您有所帮助,如果有错误或不足之处,请海涵!

感恩能与大家在华为云遇见!

参考文献:

 

点击关注,第一时间了解华为云新鲜技术~

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 当Serverless遇到Regionless:现状与挑战

    摘要:本文尝试基于分析现有的学术文章,剖析Serverless与Regionless并存时,在性能提升和成本控制两个方向的现状与挑战 本文分享自华为云社区《当Serverless遇到Regionless:现状与挑战》,作者:云容器大未来。 近年来,Serverless服务崛起的趋势是有目共睹的:从Berkeley将Serverless认定为云计算向用户呈现的…

    云计算 2023年5月8日
    00
  • 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

    摘要:本文讲解基于傅里叶变换的高通滤波和低通滤波。 本文分享自华为云社区《[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波》,作者:eastmount 。 一.高通滤波 傅里叶变换的目的并不是为了观察图像的频率分布(至少不是最终目的),更多情况下是为了对频率进行过滤,通过修改频率以达到图像增强、图像去噪、边缘检测、特征提取、压缩加密等目的。 …

    2023年4月2日
    00
  • Serverless冷启动:如何让函数计算更快更强?

    摘要:借助Serverless计算,开发者仅需上传业务代码并进行简单的资源配置便可实现服务的快速构建部署,云服务商则按照函数服务调用量和实际资源使用收费,从而帮助用户实现业务的快速交付和低成本运行。 本文分享自华为云社区《Serverless冷启动:如何让函数计算更快更强?》,作者:DevAI 。 问题背景 Serverless计算也称服务器无感知计算或函数…

    云计算 2023年4月17日
    00
  • 从0到1学Python丨图像平滑方法的两种非线性滤波:中值滤波、双边滤波

    摘要:常用于消除噪声的图像平滑方法包括三种线性滤波(均值滤波、方框滤波、高斯滤波)和两种非线性滤波(中值滤波、双边滤波),本文将详细讲解两种非线性滤波方法。 本文分享自华为云社区《[Python从零到壹] 五十六.图像增强及运算篇之图像平滑(中值滤波、双边滤波)》,作者:eastmount。 常用于消除噪声的图像平滑方法包括三种线性滤波(均值滤波、方框滤波、…

    2023年4月2日
    00
  • 云原生2.0网关API标准发展趋势

    摘要:Gateway API希望取代Ingress API。 本文分享自华为云社区《云原生2.0网关API标准发展趋势》,作者:华为云云原生团队 。 云原生网关API标准背景及发展现状 Gateway API是一个开源的API标准,源自Kubernetes SIG-NETWORK兴趣组。从出身角度讲,可谓根正苗红,自从开源以来备受关注,被寄予厚望。Gatew…

    云计算 2023年4月20日
    00
  • 人工智能打造充满创造力的新世界,华为云开发者日无锡站成功举办

    摘要:近日,华为云开发者日HDC.Cloud Day无锡站成功举行,开发者不仅聆听了华为云技术专家在生成式AI、元宇宙、AIoT、工业互联网等领域的前沿技术分享,还在KooLabs工作坊、展台等环节,亲身体验华为云产品的技术魅力。 3月21日,华为云开发者日HDC.Cloud Day无锡站成功举行,开发者不仅聆听了华为云技术专家在生成式AI、元宇宙、AIoT…

    云计算 2023年4月17日
    00
  • 云原生容器高可用运维能力应用

    摘要:华为云容器SRE在海量集群和容器运维实践中,从智能运维能力、确定性场景恢复等多方面总结出一套确定性运维实践,以应对云原生业务快速增长。 本文分享自华为云社区《云原生容器高可用运维能力应用》,作者:陈勇/刘志超/袁文峰。 云原生场景下,对架构高可用、应用高可用、基础云平台高可用提出了更高的要求,企业以及云平台都在不断致力于稳定性建设。但面对海量复杂的客户…

    云计算 2023年4月17日
    00
  • 云图说|云数据库GaussDB如何做到卓越性能

    摘要:对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区《【云图说】第275期 云数据库GaussDB如何做到卓越性能》,作者:阅识风云。 对于数据库来说,性能一直被视为最关键的部分。GaussDB作为华为自主创新研发的…

    MySQL 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部