python生成金字塔-简书,python图像处理实战 豆瓣

  python生成金字塔-简书,python图像处理实战 豆瓣

  本文主要介绍图像处理中的图像金字塔,包括图像的上采样和下采样。文章中的示例代码解释得很详细,感兴趣的朋友可以向边肖学习。

  00-1010一、形象金字塔原理二。图像上采样III。图像缩减采样IV。摘要

  

目录

  上一篇文章中解释的图像采样过程可以减小图像的大小。本文将补充图像金字塔的知识,了解专门用于图像上采样和下采样的pyrUp()和pyrDown()函数。

  金字塔是指一组不同分辨率的子图像,是图像的一种多尺度表达。它用多分辨率来解释图像的结构,主要用于图像分割或压缩。图像的金字塔是一系列呈金字塔形状排列的图像,其分辨率逐渐降低,且来自同一幅原始图像。如图10-1所示,它包括四层图像,与金字塔相比较。金字塔可以通过逐步向下采样来获得,并且直到达到某个终止条件才停止采样。在下采样中,级别越高,图像越小,分辨率越低[1-2]。

  有两种方法可以生成影像金字塔:

  下采样上采样在图中,图像G0转换为G1、G2、G3,图像分辨率递减的过程称为下采样;将G3转换为G2、G1、G0并提高图像分辨率的过程称为上采样。

  

一.图像金字塔原理

  向上采样图像是一个连续再现小图像的过程。它将图像在各个方向上放大到原图像的2倍,用0填充新的行和列,将与“下采样”相同的卷积核乘以4,然后与放大后的图像进行卷积运算,得到“新增像素”的新值。如图10-2所示,它在原始像素45、123、89和149之间添加了一行和一列值为0的像素。

  在OpenCV中,用于上采样的函数是pyrUp(),其原型如下:

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

  src代表输入图像,

  DST表示输出图像,其大小和类型与输入图像相同。

  dst Size表示输出图像的大小,默认值为Size()

  border type表示像素外推方法。详见cv:bordertypes。

  向上采样的代码如下:

  # -*-编码: utf-8 -*-

  # By:伊斯特蒙特

  导入cv2

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  #阅读原文图片

  img=cv2.imread(lena-small.png )

  #图像上采样

  r=cv2 . pyrap(img)

  #显示图像

  cv2.imshow(原始,img)

  cv2.imshow(PyrUp ,r)

  cv2.waitKey()

  cv2.destroyAllWindows()

  输出如图10-3所示,它将原始图像放大了四倍。

  多重上采样的代码如下。

  # -*-编码: utf-8 -*-

  # By:伊斯特蒙特

  导入cv2

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  #阅读原文图片

  img=cv2.imread(lena-small.png )

  #图像上采样

  R1=cv2 . pyrap(img)

  R2=cv2 . pyrap(R1)

  R3=cv2 . pyrap(R2)

  #显示图像

  cv2.imshow(原始,img)

  cv2.imshow(丙酮酸1 ,r1)

  cv2 . im show( pyrop 2 ,r2)

  cv2 . im show( pyrop 3 ,r3)

  cv2.waitKey()

  cv2.destroyAllWindows()

  输出结果如图10-4所示。每次上采样都是前一幅图像的四倍,但是图像的清晰度会降低。

  

二.图像向上取样

  在图像缩减像素采样中,大多数

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

  

  

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

  

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

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

  – src表示输入图像,

  – dst表示输出图像,和输入图像具有一样的尺寸和类型

  – dstsize表示输出图像的大小,默认值为Size()

  – borderType表示像素外推方法,详见cv::bordertypes

  向下取样的代码如下所示:

  

# -*- coding: utf-8 -*-

  # By:Eastmount

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

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

  

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

  

# -*- coding: utf-8 -*-

  # By:Eastmount

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

  输出结果如图10-7所示,每次向下取样均为上次的四分之一,并且图像的清晰度会降低。

  

  

  

四.总结

  本文主要讲解图像金字塔处理,包括图像向上取样和向下取样。需要注意,向上取样放大后的图像比原始图像要模糊,而每次向下取样会删除偶数行和列,它会不停地丢失图像的信息。此外,向上采样和向下采样不是互逆的操作,经过两种操作后,是无法恢复原始图像的。

  以上就是Python图像处理之图像金字塔详解的详细内容,更多关于Python图像金字塔的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: