图像金字塔(高斯与拉普拉斯)

目录

一、图像金字塔的作用

1、图像缩放

2、图像分割

二、采样

1、下采样pyrDown()

2、上采样pyrUp()

三、高斯金字塔

 1、高斯金字塔过程

2、构建图像的高斯金字塔 

四、拉普拉斯金字塔

 1、拉普拉斯金字塔的数学定义

2、构建图像的拉普拉斯金字塔

五、图像复原 

1、原图像的复原公式


一、图像金字塔的作用

1、图像缩放

用于机器视觉和图像压缩,一副较大的图像可以通过梯次向下采样(删除偶数行/列的像素)缩小图像

2、图像分割

图像分割,先要建立一个图像金字塔,然后在相邻两层(G_i层和G_i+1层)的像素直接依照对应的关系,建立起”父与子“关系。而快速初始分割可以先在金字塔高层的低分辨率图像上完成,然后逐层对分割加以优化。

二、采样

1、下采样pyrDown()

直接删除图像偶数行/列的像素,图像尺寸减半会丢失一些数据信息。

2、上采样pyrUp()

图像在每个维度上扩大为原来的两倍,即:(x,y)的像素映射到目标图像的(2x+1,2y+1)位置,新增的偶数行/列补0填充。然后用给定的滤波器卷积(每个维度都扩大为原来两倍的过滤器)去估计丢失像素的近似值。

pyrDown()和pyrUp()不是一个互逆的过程,值是简单的对图像进行放大和缩小,但绝对不是图像复原。如果要图像复原必须结合高斯金字塔和拉普拉斯金字塔

三、高斯金字塔

 1、高斯金字塔过程

  • 图像平滑(高斯内核卷积)(直接降采样损失信息,造成图像看不清)
  • 删除所有偶数行和列,图像尺寸减半

高斯金字塔本质上为信号的多尺度表示法

2、构建图像的高斯金字塔 

 

import cv2 as cv
import numpy as np


def pyramid_demo(image):
    level = 3
    temp = image.copy()
    pyramid_images = []
    for i in range(level):
        dst = cv.pyrDown(temp)
        pyramid_images.append(dst)
        cv.imshow("pyramid_down_"+str(i), dst)
        temp = dst.copy()
    return pyramid_images

 

图像金字塔(高斯与拉普拉斯)_第1张图片

四、拉普拉斯金字塔

 1、拉普拉斯金字塔的数学定义

 下式是拉普拉斯金字塔第i层的数学定义:

 图像金字塔(高斯与拉普拉斯)_第2张图片

式中的Gi表示第i层高斯图像。而UP()操作是将源图像中位置为(x,y)的像素映射到目标图像的(2x+1,2y+1)位置,即在进行向上取样。符号表示卷积,为5x5的高斯内核。

因此,我们可以直接用OpenCV进行拉普拉斯运算:

 图像金字塔(高斯与拉普拉斯)_第3张图片

 因此:可以说成拉普拉斯金字塔=第i层的高斯塔——第i+1层pyrUp()放大(上采样)后的高斯塔

注:i+1层是比i层小的图像

2、构建图像的拉普拉斯金字塔

 

import cv2 as cv
import numpy as np


def pyramid_demo(image):
    level = 3
    temp = image.copy()
    pyramid_images = []
    for i in range(level):
        dst = cv.pyrDown(temp)
        pyramid_images.append(dst)
        cv.imshow("pyramid_down_"+str(i), dst)
        temp = dst.copy()
    return pyramid_images


def lapalian_demo(image):
    dst = cv.resize(src, (image.shape[1], image.shape[1]), 0, 0, cv.INTER_LINEAR)#重新改变图像的尺寸,求拉普拉斯塔输入图像必须为方形
    #cv.imshow("dst", dst)
    pyramid_images = pyramid_demo(dst)
    level = len(pyramid_images)
    for i in range(level-1, -1, -1):
        if (i-1) < 0 :
            expand = cv.pyrUp(pyramid_images[i], dstsize=dst.shape[:2])
            lpls = cv.subtract(dst, expand)
            cv.imshow("lapalian_down_" + str(i), lpls)
        else:
            expand = cv.pyrUp(pyramid_images[i], dstsize=pyramid_images[i-1].shape[:2])
            lpls = cv.subtract(pyramid_images[i-1], expand)
            cv.imshow("lapalian_down_"+str(i), lpls)

 

图像金字塔(高斯与拉普拉斯)_第4张图片

五、图像复原 

1、原图像的复原公式

第i层高斯金字塔=第i层拉普拉斯塔+第i+1层pyrUp()放大(上采样)后的高斯塔

Gi=li+ pyrUp(Gi+1)

 

你可能感兴趣的:(图像金字塔(高斯与拉普拉斯))