数字图像处理5:图像金字塔

article/2025/10/22 4:52:33

图像金字塔

近似金字塔和残差金字塔

图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解 释图像的有效但概念简单的结构。图像金字塔最初用于机器视觉和图像压缩,一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。
拉普拉斯金字塔:用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。拉普拉斯金字塔中 的图像可用对高斯金字塔中相邻两层图象的相减而近似得到。需先将图像在较粗的尺度(较高的层次)上扩展。扩展比减少尺寸的压缩困难,因为缺少的信息需要通过插值来得到。

实验思想

如何获得图像金字塔

如果第 j 级图像表示为 imj(x, y),第 j − 1 级图像为 im(j − 1)(x, y),可以通过以下的计算方式得到:
步骤 1:首先进行高斯低通滤波,按照课本中的内容,这次滤波使用空域中对应的高斯低通滤波器。
步骤 2:通过滤波可以得到近似图像,之后对图像进行以 2 位基的下采样。步骤 3:重复上面的操作。依次可以得到各个低阶图像。

如何获得残差金字塔

获得残差金字塔的方法是,利用低一阶的图像进行插值复原,也就是以 2 为基的上采样。计算步骤如下:
步骤 1:首先通过线性插值得到完成上采样的图像。
步骤 2:利用上一级的图像与其相减,得到图像之差,即为本阶的残差图像步骤 3:重复上面的操作。依次可以得到各阶残差图像。

图像金字塔代码

图像金字塔

主函数:

%% 运行 exp73.m 获得图像金字塔clc;
clear;
close all;%% 课本图 7.3
% 读取图片
im = imread('demo-1.jpg');   % 原始图像 uint8
% 得到图像的行数、列数、以及每像素的维数(防止出现RGB图像)
[line,row,v]=size(im);
im = im(:,:,1);%% 近似金字塔 使用空域的高斯的低通滤波 两倍下采样
im_1 = myAverage(im);
im_2 = myAverage(im_1);
im_3 = myAverage(im_2);% 也可以使用频域的低通滤波,但是还原程度不如空域的操作
% im_1 = Guss(im,200);
% im_2 = Guss(im_1,200);
% im_3 = Guss(im_2,200);%% 得到预测残差金字塔 使用双线性内插
im_e1 = im - uint8(255*mat2gray(myBilinear(im_1,2,2)));
im_e2 = im_1 - uint8(255*mat2gray(myBilinear(im_2,2,2)));
im_e3 = im_2 - uint8(255*mat2gray(myBilinear(im_3,2,2)));%% 将结果保存到当前目录下的result文件夹下
imwrite(im_1, sprintf('result/_%s.jpg', 'rank_8'));
imwrite(im_2, sprintf('result/_%s.jpg','rank_7'));
imwrite(im_3, sprintf('result/_%s.jpg','rank_6'));
imwrite(im_e1, sprintf('result/_%s.jpg','left_9'));
imwrite(im_e2, sprintf('result/_%s.jpg', 'left_8'));
imwrite(im_e3, sprintf('result/_%s.jpg', 'left_7'));%% 显示结果
figure(1); 
subplot(241); imshow(im); title('原图(9级)'); axis on
subplot(242); imshow(im_1); title('一次(8级)'); axis on
subplot(243); imshow(im_2); title('两次(7级)'); axis on
subplot(244); imshow(im_3); title('三次(6级)'); axis on
subplot(245); imshow(im_e1); title('残差(9级)'); axis on
subplot(246); imshow(im_e2); title('残差(8级)'); axis on
subplot(247); imshow(im_e3); title('残差(7级)'); axis on
subplot(248); imshow(im_3); title('三次(6级)'); axis on

功能函数:

function [img_2] = myAverage(img_1)size_1 = size(img_1);
h = size_1(1);
w = size_1(2);
img_2 = zeros(h, w);%%边缘延拓两行两列
a = img_1(1,:);
b = img_1(h,:);
img_1 = [a;img_1;b];
c = img_1(:,1);
d = img_1(:,w);
img_1 = double([c,img_1,d]);%3X3均值模板
L = 1/16*[1 2 1;2 4 2;1 2 1];for i= 1:hfor j = 1:wim = [img_1(i,j) img_1(i,j+1) img_1(i,j+2);...img_1(i+1,j) img_1(i+1,j+1) img_1(i+1,j+2);...img_1(i+2,j) img_1(i+2,j+1) img_1(i+2,j+2)];img_2(i,j) = round(sum(sum(L.*im)));end
end%图像下采样
M = floor(h/2);
N = floor(w/2);
im_p = zeros(M,N);
for x = 0:1:M-1for y = 0:1:N-1im_p(x+1,y+1) = img_2(2*x+1,2*y+1);end
end
img_2 = uint8(im_p);
end
function im_p = Guss(im,D0)[M,N] = size(im);%图像进行二位傅里叶变换,之后移动到中心点
im_double = mat2gray(im,[0 255]);
im_F = fftshift(fft2(im_double));      % 空域 > 频域%图像进行高斯低通滤波
H = zeros(M,N);
for u = -M/2:1:M/2-1for v = -N/2:1:N/2-1D = (u)^2+(v)^2;if (D == 0)H(u + M/2 + 1,v + N/2 + 1) = 1;elseH(u + M/2 + 1,v + N/2 + 1) = exp(-D/(2*D0^2));endend
endim_G = H .* im_F;%图像反变换
im_g_double = real(ifft2(ifftshift(im_G)));
im_p = im2uint8(mat2gray(im_g_double));
function [im_b] = myBilinear(im, Rh,Rl)
%双线性内插算法       
[line,row] = size(im);
%图像补零
im = [im;im(line,:)];
im = [im,im(:,row)];
im = double(im);
%新的行数和列数,预分配内存
line_n = round(Rh * line);
row_n = round(Rl * row);%向量化循环,防止溢出
x_n = 1 : line_n;
y_n = 1 : row_n;
%投影回去的位置
x = x_n * (line - 1) / (line_n - 1) + (line_n - line) / (line_n - 1);
y = y_n * (row - 1) / (row_n - 1) + (row_n - row) / (row_n - 1);%对原坐标取整
i_x = floor(x);
i_y = floor(y);
%周围点的距离
u_x = x - i_x;
u_y = y - i_y;
w_x = 1 - u_x;
w_y = 1 - u_y;%根据距离确定权重,得到插值后的图像
im_b(x_n,y_n) = w_x' * w_y .* im(i_x,i_y) + w_x' * u_y .* im(i_x,i_y + 1)...+ u_x' * w_y .* im(i_x + 1,i_y) + u_x' * u_y .* im(i_x + 1,i_y + 1);%im_b = uint8(im_b);
end

实验结果

在本次实验中,首先对原图求出来四阶图像金字塔,之后利用插值进一步得到残差金字塔。实验结果如下:
在这里插入图片描述图一:空域滤波的图像金字塔
在这里插入图片描述图二:空域滤波的残差金字塔

如上图所示,通过空域的高斯低通滤波得到图像金字塔,之后与原图像求差值,可以得到残差金字塔。之后还使用了频域的高斯滤波尝试得到图像金字塔和残差金字塔,得到的结果如图所示。
在这里插入图片描述图三:频域滤波的图像金字塔
在这里插入图片描述图四:频域滤波的残差金字塔

可以看出使用空域的模板时不会直接消除高频的噪声,但是在使用频域的高斯低通滤波器时,可以在第一次时,消除大部分高频噪声,之后的残差图像变得更加稀疏,有利于存储

实验分析

从上述实验结果可以看出,使用空域的高斯滤波器可以得到书中一致的图像金字塔和拉普拉斯金字塔,效果较好,但是压缩效率可能会略低于频域的高斯滤波器处理结果。频域的处理的计算时间和计算量也要大于空域的处理。


http://chatgpt.dhexx.cn/article/wQviFdHQ.shtml

相关文章

图像金字塔、特征金字塔(FPN)

图像金字塔 参考: https://www.jianshu.com/p/436e96200f80 图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效但概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像…

图像金字塔,原理、实现及应用

什么是图像金字塔 图像金字塔是对图像的一种多尺度表达,将各个尺度的图像按照分辨率从小到大,依次从上到下排列,就会形成类似金字塔的结构,因此称为图像金字塔。 常见的图像金字塔有两类,一种是高斯金字塔&#xff0…

计算机视觉教程2-5:图像金字塔送她一朵玫瑰(附代码)

目录 1 金字塔2 什么是图像金字塔?3 图像金字塔有什么用?4 OpenCV实战图像金字塔 1 金字塔 平时你听到、见到的金字塔是什么样的? 这样? 还是这样? 实际上除了这些,还有图像金字塔 图像金字塔有什么用&am…

图像金字塔(Python实现)

图像金字塔(Python实现) 1 简介 在图像处理中常常会调整图像大小,最长的就是放大(zoom in)和缩小(zoom out),尽管集合变换也可以实现图像放大或者缩小 一个图像金字塔式一系列的图像组成,最底下一张式图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下…

图像金字塔分层算法

一. 图像金字塔概述 欢迎关注微信公众号“智能算法”! 1. 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。 2. 图像金字塔最初用于机器视觉和图像压缩,一幅图像的金…

图像金字塔是什么?

一般情况下,我们要处理是一副具有固定分辨率的图像。但是有些情况下,我们需要对同一图像的不同分辨率的子图像进行处理。比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸大小。这种情况下&a…

图像处理之高斯金字塔

一:图像金字塔基本操作 对一张图像不断的模糊之后向下采样,得到不同分辨率的图像,同时每次得到的 新的图像宽与高是原来图像的1/2, 最常见就是基于高斯的模糊之后采样,得到的 一系列图像称为高斯金字塔。 高斯金字塔不同(DoG)又…

【OpenCV学习笔记】之图像金字塔(Image Pyramid)

一、尺度调整 顾名思义,即对源图像的尺寸进行放大或者缩小变换。在opencv里面可以用resize函数,将源图像精准地转化为指定尺寸的目标图像。要缩小图像,一般推荐使用CV_INETR_AREA(区域插值)来插值;若要放大图像,推荐使…

图像金字塔总结

本文转载自: http://blog.csdn.net/dcrmg/article/details/52561656 一、 图像金字塔 图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像素采样的方式,生成N个不同分辨率的图像。把具有最高级别分辨率的图像放在底…

数字图像处理(21): 图像金字塔(高斯金字塔 与 拉普拉斯金字塔)

目录 1 图像金字塔简介 2 向下取样——pyrDown() 2.1 基础理论 2.2 代码示例 3 向上取样——pyrUp() 3.1 基础理论 3.2 代码示例 4 Laplacian 金字塔 4.1 基础理论 4.2 代码示例 参考资料 1 图像金字塔简介 以多个分辨率来表示图像的一种有效且概念简单的结构是图像…

图像处理(二):图像金字塔

图像金字塔是图像多尺度表达的一种,是一种以多分辨率来解释图像的有效且概念简单的结构。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。 高斯金字塔是常见的图像金字塔,如下所示:…

什么是图像金字塔

有些情况下,我们需要处理源自同一张图像的不同分辨率的图像集合。这些不同分辨率的图像组成的集合称为图像金字塔。 图像金字塔的主要类型可分为低通和带通 有两种常用图像金字塔: Gaussian Pyramid (低通)Laplacian Pyramids &…

OpenCV图像处理学习十三,图像金字塔——高斯金字塔和拉普拉斯金字塔

一.图像金字塔概念 我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),尽管几何变换也可以实现图像放大和缩小,但是这里我们介绍图像金字塔 。 一个图像金字塔是由一系列的图像组成&…

图像金字塔

图像金字塔是图像处理和计算机视觉中的概念,常常用于多尺度处理领域(multiscale processing),尤其早年的图像匹配、识别等算法中都用到了图像金字塔 高斯金字塔(Gaussian pyramid) 金字塔的底层为原始图像&#xff0…

【OpenCV 学习笔记】第十一章: 图像金字塔

第十一章: 图像金字塔 一、什么是图像金字塔 同一张图片不同分辨率的子图的集合。 图像金字塔底部是待处理的高分辨率图像,也就是原始图像,顶部是低分辨率的近似图像。一般情况下,都是每向上移动一级,图像的宽和高都降低为原来的…

openCV——图像金字塔

图像金字塔 理论基础 通常情况下,图像金字塔的底部是待处理的高分辨率图像(原始图像),而顶部则为其低 分辨率的近似图像。向金字塔的顶部移动时,图像的尺寸和分辨率都不断地降低。通常情况下, 每向上移动一…

第11章:图像金字塔

第11章:图像金字塔 一、理论基础:1. 向下采样:2. 向上采样: 二、pyrDown函数使用:三、pyrUp函数及使用:四、采样可逆性研究五、拉普拉斯金字塔1. 定义:2. 应用: 什么是图像金子塔&am…

C语言for语句简单打印心形。

C语言简单for语句打印心形 #include<stdio.h> int main() {int i;int j;int k;int n;int m;printf("\n\n\n\n\n\n\n\n表白朋友圈:\n\n\n\n");for (i 1; i < 3; i){if (i 1){printf(" ");printf(&quo…

C语言暴力解法:围圈报数(解析与思考)

围圈报数 题目 解题步骤 一.整体逻辑 1.从第&#xff11;个人开始报数&#xff0c; 2.数到第&#xff4d;个人出列&#xff0c; 3.然后从出列的下一个人开始报数&#xff0c; 4.数到第&#xff4d;个人又出列&#xff0c;…&#xff0c;如此反复到所有的人全部出列为止。 二…

html 一个圆圈一个c,如何用c语言程序画一个圆?

以一个空心圆来举例。 /* 判断是是否在圆上 */ int isAtCircle(int x, int y, int r) { /* 将(x, y)转换为相当圆心(r, r)的坐标 */ int rx x - r; int ry y - r; double d sqrt(rx*rx ry*ry) - r; /*计算到圆心的距离*/ if(fabs(d) < 0.5)""> return 1; e…