20240726图像金字塔

1.图像金字塔定义

图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的图像金字塔是一系列以金字塔形状(自下而上)逐步降低,且来源于同一张原始图的图像分辨率集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
在这里插入图片描述

2.将苹果与橘子进行融合代码

# @File: 20.3利用图像金字塔进行图像融合.py
# @Author: chen_song
# @Time: 2024/7/26 下午10:09

# 1. 读入两幅图像,苹果和句子
# 2. 构建苹果和橘子的高斯金字塔(6层)
# 3. 根据高斯金字塔计算拉普拉斯金字塔
# 4. 在拉普拉斯的每一层进行图像融合(苹果的左边与橘子的右边融合)
# 5. 根据融合后的图像金字塔重建原始图像

import cv2
import numpy as np, sys

A = cv2.imread('./images/apple.png')
A=cv2.resize(A,(512,512))
B = cv2.imread('./images/orange.png')
B=cv2.resize(B,(512,512))
# generate Gaussian pyramid for A
G = A.copy()
gpA = [G]
for i in range(6):
 G = cv2.pyrDown(G)
 gpA.append(G)
# generate Gaussian pyramid for B
G = B.copy()
gpB = [G]
for i in range(6):
 G = cv2.pyrDown(G)
 gpB.append(G)
 # generate Laplacian Pyramid for A
lpA = [gpA[5]]
for i in range(5, 0, -1):
 GE = cv2.pyrUp(gpA[i])
 L = cv2.subtract(gpA[i - 1], GE)
 lpA.append(L)
 # generate Laplacian Pyramid for B
lpB = [gpB[5]]
for i in range(5, 0, -1):
 GE = cv2.pyrUp(gpB[i])
 L = cv2.subtract(gpB[i - 1], GE)
 lpB.append(L)
# Now add left and right halves of images in each level
# numpy.hstack(tup)
# Take a sequence of arrays and stack them horizontally
# to make a single array.
LS = []
for la, lb in zip(lpA, lpB):
 rows, cols, dpt = la.shape
 ls = np.hstack((la[:, 0:cols//2], lb[:, cols//2:]))
 LS.append(ls)
# now reconstruct
ls_ = LS[0]
for i in range(1, 6):
 ls_ = cv2.pyrUp(ls_)
 ls_ = cv2.add(ls_, LS[i])
# image with direct connecting each half
real = np.hstack((A[:, :], B[:, :]))
cv2.imwrite('Pyramid_blending2.jpg', ls_)
cv2.imwrite('Direct_blending.jpg', real)

3.结果展示

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
图像金字塔是一种在图像处理中常用的技术,用于对图像进行多尺度分析和处理。它可以通过将原始图像通过不同大小的滤波器进行模糊和采样,从而获得一系列不同分辨率的图像。在Matlab中,我们可以使用pyrDown和pyrUp函数来实现图像金字塔的构建和重建。 pyrDown函数可以将图像降采样一半,通过使用高斯滤波器对图像进行平滑处理,然后取出偶数行和偶数列的像素值,从而生成一个尺寸缩小一半的图像。而pyrUp函数可以对图像进行插值操作,将图像尺寸恢复为原来的两倍,通过使用卷积核对图像进行卷积操作,从而生成一个尺寸增大一倍的图像。 通过不断重复使用pyrDown和pyrUp函数,我们可以构建出一个图像金字塔,其中每一层代表图像在不同尺度下的表示。在图像金字塔中,高层表示的是分辨率低但包含更多全局信息的图像,低层表示的是分辨率高但包含更多局部细节的图像。 利用图像金字塔,我们可以进行一些重要的操作,例如图像缩放、图像融合和图像分割等。在Matlab中,我们可以使用imresize函数来实现图像金字塔的上采样和下采样操作,使用impyramid函数来实现不同层级之间的图像融合操作,使用imsegkmeans函数来实现基于金字塔的图像分割操作等。 总之,图像金字塔是一种强大的图像处理技术,在Matlab中可以通过pyrDown和pyrUp函数来构建和重建,可用于多尺度分析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松のblog

下一个构架师就是你~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值