过去研究过高斯金字塔,不过今天看来,当时似乎搞错了,金字塔上下层应该是采样的关系,而不是缩放的关系,而且不同层的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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)