多分辨率分析—高斯金字塔与拉普拉斯金字塔

多分辨率分析—高斯金字塔与拉普拉斯金字塔

简介

对一副图像进行多分辨率分析有以下优势:1、某些分辨率可能检测不到的特性在不同的分辨率下可能会被检测到。比如对于一副图像上同时存在较小的和较大的物体,检测小的物体(对比度低)通常需要较高的分辨率。反之,检测大的物体就需要较小的分辨率。2、当对视频信号进行帧间滤波时,写出滤波器的差分方程,差分方程的输入是过去某几帧图像的信息。通常的做法时将图像分解到不同的分辨率,然后将不同分辨率的图像信息向量化成一维信号作为差分方程的输入。这样做的好处时可以大大减少噪声。

图像金字塔是一种简单有效的进行图像多分辨率分析的手段,下图显示了一个四层图像金字塔的简单系统。
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第1张图片

假设一幅图像的原始像素是n*n,对这幅图像进行下采样就是在原图的基础上每隔一个样本就丢弃一个样本,那么就会得到一个像素大小为n/2*n/2的新图。

图像的上采样刚好与上图相反,这个过程直接通过在原图的基础上每一个样本后插入0,从而达到图像尺寸的2倍放大。当然,直接插入0仅仅是增加了图像的尺寸,同时会引入了噪声。可以通过选择内插函数来代替对图像直接进行0插值的处理方式。

下面显示了两种常见的图像金字塔模型,高斯金字塔和预测残差金字塔。
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第2张图片

有上图可知,高斯金字塔是指在对图像进行下采样的时候,进行了高斯低通滤波。其中,高斯滤波器也可以换成其他的图像处理方式,比如:进行领域滤波则输出平均金字塔;不进行滤波而直接进行下采样则产生采样金字塔。

拉普拉斯金子塔就是预测残差金字塔,下面简述其形成过程:假设第k层的输入图像是256 * 256 p ,那么经过下采样以及高斯滤波后形成的第k+1层的高斯图像是128 * 128 p。然后通过上采样及插值函数插值后,会形成一个256 * 256 p的预测图像。显然,插值后的预测图像会和输入的原图有一定的差别。

下图展示了这之间的差别:
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第3张图片

插值图像和原图的差别可以通过图像的减法显示出来,因为预测图像是在低分率图像通过插值形成的。其与原图的差值就是原图和其进行低通滤波后的差值,也就是图像直接进行高通滤波后的情况,差值图像必然显示的是图像的高频成分:即图像的细节轮廓部分。

下图显示了第一幅预测残差图像:
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第4张图片

既然预测残差图像或者叫其为差值图像是图像的高频部分,可以直接将原图通过高通滤波器观察其输出与预测残差图像的区别。

下图显示了图像直接通过拉普拉斯高通滤波后的输出:
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第5张图片

可见,经过拉普拉斯滤波器后的图像和预测残差的图像有一定的相似性。通过选择滤波器的通阻带频率必然会使得预测残差图像和高通图像具有更大的相似度。当把所有的预测残差图像用金子塔的形式展现出来时,预测残差金字塔又称之为拉普拉斯金字塔。

生成金字塔

下图显示了高斯金字塔与拉普拉斯金字塔生成:

高斯金字塔:
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第6张图片

拉普拉斯金字塔:
多分辨率分析—高斯金字塔与拉普拉斯金字塔_第7张图片

示例代码

  • demo.m

    clc;
    clear;
    close all;
    
    img=imread('timg.jpg');
    [m,n]=size(img);
    
    if size(img,3)==3  
        img = rgb2gray(img);  
    end  
    
    gauss_pyr=gauss_pyramid2(img,5);  
    
    
    % for i=1:length(gauss_pyr)  
    %    figure;imshow(gauss_pyr{i}); 
    % end   
    
     for i=1:length(gauss_pyr) -1          %获得残差图像,i级预测残差
        imgn{i}=gauss_pyr{i} - expand(gauss_pyr{i+1});  
     end
    
    for i=1:length(imgn)  
       figure;imshow(imgn{i}); 
    end   
    
  • gauss_pyramid2.m

    function pyr = gauss_pyramid2(I,nlev)  
    
    pyr = cell(nlev,1);  
    pyr{1} = I;  
    G_LOWER = I;  
    
    f = [0.05 0.25 0.4 0.25 0.05];    
    f = f'*f;  
    
    for l = 2:nlev     
        G_LOWER=G_LOWER(1:2:size(G_LOWER,1)-1,1:2:size(G_LOWER,2)-1); %downsample     
        pyr{l}=imfilter(G_LOWER, f, 'replicate');  
    end  
    
    end
    
  • expand.m

    function re=expand(img)
    
        %双三次内插
        img = imresize(img, 2, 'bicubic');
    
        re = img;
    end
    

你可能感兴趣的:(数字图像处理)