zoukankan      html  css  js  c++  java
  • MATLAB 拉普拉斯残差金字塔

    过去研究过高斯金字塔,不过今天看来,当时似乎搞错了,金字塔上下层应该是采样的关系,而不是缩放的关系,而且不同层的sigma应该也有所不同。

    拉普拉斯金字塔在图像融合中有所应用,方法是首先对两个待融合图像求拉普拉斯残差金字塔,然后用模板对每一级残差图像进行融合得到融合后图像的残差金字塔,然后对这个金字塔进行重构就能得到最终的融合图像,图像各尺度细节得到保留。(注:融合时模板一般会先用高斯函数模糊一下)

    不过这里不实现融合,只实现拉普拉斯金字塔的建立。

    建立金字塔的方框图如下(摘自《数字图像处理(第二版)》):

    通过j-1级近似图像和j级残差图像就能恢复j级输入图像。

    近似滤波器就是拉普拉斯滤波模板。

    插入滤波器是对拉普拉斯滤波模板采样形成的新滤波模板。

    使用的拉普拉斯滤波模板如下:

    w=1/256*[1  4   6   4  1; 
                    4 16 24 16 4;
                    6 24 36 24 6;
                    4 16 24 16 4;
                    1  4   6   4 1];

    产生的残差金字塔:

    前面四张图像都是残差,最后一张图像是原图的4级近似,通过最后一张图和残差图,就能重构回原图。

    matlab代码如下:

    main.m

     1 clear all; close all; clc;
     2 
     3 img=double(imread('lena.jpg'));
     4 [m n]=size(img);
     5 
     6 w=1/256*[1  4  6  4 1;      %拉普拉斯滤波器
     7          4 16 24 16 4;
     8          6 24 36 24 6;
     9          4 16 24 16 4;
    10          1  4  6  4 1];
    11 
    12 imgn{1}=img;
    13 for i=2:5                   %滤波,下采样
    14    imgn{i}=imfilter(imgn{i-1},w,'replicate');
    15    imgn{i}=imgn{i}(1:2:size(imgn{i},1)-1,1:2:size(imgn{i},2)-1); %i-1级近似
    16 end
    17        
    18 for i=5:-1:2        %调整图像大小
    19    imgn{i-1}=imgn{i-1}(1:2*size(imgn{i},1),1:2*size(imgn{i},2)); 
    20 end
    21 
    22  for i=1:4          %获得残差图像,i级预测残差
    23     imgn{i}=imgn{i}-expand(imgn{i+1},w);     
    24  end
    25  
    26 for i=4:-1:1        %残差图像重构原图像
    27     imgn{i}=imgn{i}+expand(imgn{i+1},w);
    28 end
    29 
    30 imshow(uint8(imgn{1}));

    expand.m

     1 function re=expand(img,w)
     2 
     3     img=double(img);
     4     w=w*4;
     5     
     6     [m n]=size(img);
     7     [M N]=size(w);
     8     
     9     %插入滤波器                                   
    10     w_up_left=w(1:2:M,1:2:N); 
    11     w_up_right=w(1:2:M,2:2:N); 
    12     w_down_left=w(2:2:M,1:2:N); 
    13     w_down_right=w(2:2:M,2:2:N); 
    14 
    15     img_up_left=imfilter(img,w_up_left,'replicate','same');
    16     img_up_right=imfilter(img,w_up_right,'replicate','same');   
    17     img_down_left=imfilter(img,w_down_left,'replicate','same');  
    18     img_down_right=imfilter(img,w_down_right,'replicate','same');  
    19   
    20     re= zeros(m*2,n*2);             %上采样
    21     re(1:2:m*2,1:2:n*2)=img_up_left;
    22     re(2:2:m*2,1:2:n*2)=img_up_right;
    23     re(1:2:m*2,2:2:n*2)=img_down_left;
    24     re(2:2:m*2,2:2:n*2)=img_down_right;
    25 
    26 end
  • 相关阅读:
    V-Box
    One CLI for webpack must be installed. These are recommended choices, delivered as separate packages:
    获取用户地理位置
    错误 CS0234 命名空间“Microsoft”中不存在类型或命名空间名“Reporting”(是否缺少程序集引用?)
    “/Reports”应用程序中的服务器错误。
    微信公众号关注界面的菜单栏跟实际的菜单栏不一致
    错误 CS8107 C# 7.0 中不支持功能“xxxxxx”。请使用 7.1 或更高的语言版本。
    已经安装了 AccessDatabaseEngine.exe,还是报错
    没有足够的内存继续执行程序(mscorlib)
    坑,坑,
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13646609.html
Copyright © 2011-2022 走看看