美文网首页
图像金子塔

图像金子塔

作者: Tsukinousag | 来源:发表于2021-10-26 11:10 被阅读0次

图像金子塔是由一幅图像的多个不同分辨率的子图所构成的图像集合,该组图像是由单个图像不断降采样所产生的,最小的图像可能仅仅有一个像素点


1. 理论基础

1.1 下采样

最简单的图像金字塔可以通过不断删除图像的偶数行和偶数列得到,(N * N) 到 (N/2 * N/2) ,图像大小变为原来的1/4

实际上下采样的过程是先滤波后删除偶数行列,有多种滤波器可以选择,例如:

  • 邻域滤波器:采用邻域平均技术,产生平均金字塔
  • 高斯滤波器:常用★

1.2 上采样

通常将图像的高度与宽度变为原来的两倍,往里面插值,通常是补零,在每列像素点的右侧插入值为0的列,在每行像素点的下方插入值为0的行

注意点:对于填充后的上采样图,像素范围是[0,255],由于其中3/4的像素点值为0,如果使用高斯滤波对其进行卷积运算,像素范围会变为[0,255/4],所以要将高斯滤波器系数乘以4,以保证像素的范围依旧是[0,255]

上采样和下采样两者不是可逆运算


2. 实验

下采样

cv2.pyrDown()
import cv2

img=cv2.imread('D:/hjb.jpg',cv2.IMREAD_GRAYSCALE)

r1=cv2.pyrDown(img)
r2=cv2.pyrDown(r1)
r3=cv2.pyrDown(r2)

print(img.shape,r1.shape,r2.shape,r3.shape)

cv2.imshow("img",img)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)

cv2.waitKey(0)
cv2.destroyWindow()

上采样

cv2.pyrUp()

:为了确保像素值区间在向上采样后与原始图像保持一致,需要将高斯滤波器的系数 * 4,但是函数里面自己调整好了,不需要手动调整

import cv2

img=cv2.imread("D:/hjb.jpg")

r1=cv2.pyrUp(img)
r2=cv2.pyrUp(r1)
r3=cv2.pyrUp(r2)

cv2.imshow("img",img)
cv2.imshow("r1",r1)
cv2.imshow("r2",r2)
cv2.imshow("r3",r3)

cv2.waitKey(0)
cv2.destroyWindow()

3. 采样的可逆性研究

先下采样,后上采样

import cv2

img=cv2.imread("D:/hjb.jpg")

down=cv2.pyrDown(img)
up=cv2.pyrUp(down)

diff=up-img

cv2.imshow("img",img)
cv2.imshow("up",up)
cv2.imshow("diff",diff)

cv2.waitKey(0)
cv2.destroyWindow()

先上采样,后下采样

import cv2

img=cv2.imread("D:/hjb.jpg")

up=cv2.pyrUp(img)
down=cv2.pyrDown(up)

diff=down-img

cv2.imshow("img",img)
cv2.imshow("down",down)
cv2.imshow("diff",diff)

cv2.waitKey(0)
cv2.destroyWindow()

4. 拉普拉斯金字塔

通过对金字塔中的小图像进行上采样以获取完整的大尺寸高分辨率图像

由于下采样时使用高斯滤波器处理后还要抛弃偶数行和偶数列,在上采样时如果要能复原,就要获取采样过程中丢失的信息,这些丢失的信息构成了拉普拉斯金字塔

首先高斯金字塔是G0不断高斯向下采样得到G1,G2,G3。相邻两个G,前一个图像-后一个的上采样得到拉普拉斯金子塔,获取原图像就是一个逆过程

import cv2

img=cv2.imread("D:/hjb.jpg")

G0=img
G1=cv2.pyrDown(G0)
G2=cv2.pyrDown(G1)
G3=cv2.pyrDown(G2)

L0=G0-cv2.pyrUp(G1)
L1=G1-cv2.pyrUp(G2)
L2=G2-cv2.pyrUp(G3)

cv2.imshow("L0",L0)
cv2.imshow("L1",L1)
cv2.imshow("L2",L2)

cv2.waitKey(0)
cv2.destroyWindow()

由拉普拉斯金字塔恢复原图像

import cv2

img=cv2.imread("D:/hjb.jpg")

G0=img
G1=cv2.pyrDown(G0)
G2=cv2.pyrDown(G1)
G3=cv2.pyrDown(G2)

L0=G0-cv2.pyrUp(G1)
L1=G1-cv2.pyrUp(G2)
L2=G2-cv2.pyrUp(G3)

#已知G3和拉普拉斯金字塔,恢复原始图像
G2=L2+cv2.pyrUp(G3)
G1=L1+cv2.pyrUp(G2)
G0=L0+cv2.pyrUp(G1)

cv2.imshow("G0",G0)
cv2.imshow("G1",G1)
cv2.imshow("G2",G2)

cv2.waitKey(0)
cv2.destroyWindow()

相关文章

  • 图像金子塔

    图像金子塔是由一幅图像的多个不同分辨率的子图所构成的图像集合,该组图像是由单个图像不断降采样所产生的,最小的图像可...

  • 013-Opencv笔记-图像金字塔

    图像金字塔概念 – 高斯金字塔 高斯金子塔是从底向上,逐层降采样得到。降采样之后图像大小是原图像MxN的M/2 x...

  • 金子塔

    金子塔不正是告诉我们:被压在最底层的众多穷人供养着塔尖的富人吗?而且我们穷人很难翻身,而且恒古不变。除非你化成一抹...

  • 图像金字塔入门

    图像金字塔 图像金字塔在图像处理领域应用比较多,上课的时候只记得老师讲的一个大概的概念:图像金字塔和普通金字塔一样...

  • 《金字塔原理》读书笔记(二)

    本周阅读了《金子塔原理》的第二章和第三章。了解了金字塔内部的结构和如何构建金子塔。金子塔结构不仅能用来将组织需要表...

  • 金子塔培训

    ------培训很贵,但不培训更贵 我有过两次批量应届生培养的经历。批量的意思就是同时要培养多个(多于两个)应...

  • 金子塔魔方

    3月份孩子的幼儿园学习金字塔魔方。通过学校买了魔方直接发给了孩子。孩子把魔方里面的说明书扔掉了,说是看不...

  • 1.14 openCV-python 图像金字塔

    图像金字塔

  • 高斯金字塔和拉普拉斯金字塔

    图像金字塔 作用:以多分辨率解释图像图像金字塔 底部是待处理的图像(高分辨率),顶部是低分辨率的近似 两种金字塔:...

  • 图像金字塔---OpenCV-Python开发指南(23)

    什么是图像金字塔 图像金字塔是由一副图像的多个不同分辨率的子图所构成的图像集合。该组图像是由单个图像通过不断地降低...

网友评论

      本文标题:图像金子塔

      本文链接:https://www.haomeiwen.com/subject/axvealtx.html