数字图像金字塔

数字图像金字塔

 

1、什么叫数字图像金字塔

        图像金字塔简单来说就是,每次隔一行取点,直到取到的行数为1,最后就每次取到的图像看起来就像一个金字塔。图像金字塔的应用非常广泛,例如,用图片查看器看图片的时候,会发现看图片的时候总是从模糊看到清晰的。这是因为,图片查看器先将金字塔顶端的图片显示出来,再慢慢显示完整的图片的。这样可以让用户忽略等待过程中的黑屏过程,让漫长的等待加载时间变得和谐起来。

 

2、实现原理

        在这次实验中,我采用的方法是,按相隔距离以2的幂为差值递减采点,也就是一开始采第一行,接着采第一行和第 n/2 行 ,接着采第一行和第 n/4 、 n/2 、 n*3/4 行,以此类推直到将图片显示出来。需要注意的是在隔行采点之前,需要对图片做剪切,使得长宽均为2的幂,以方便处理,代码中的 cutImg 函数在这里 http://blog.csdn.net/yangyudong2014/article/details/40920617 。

        还需要注意的是在隔行采点之前要对图片进行加权平均取值,因为如果在图像中有一条直线只有一个像素宽,那么在隔行取点的时候可能就会忽略这一行,导致影响比较大,如果进行加权平均的话,可以将这条直线的扩散到附近,以减小隔行取点的影响。

 

3、实现代码

%% 图像金字塔,包含演示过程
% 作者:杨宇东
% 日期:2014.11.6
% 参数:待处理的图片数组
% 输出:高斯模糊之后的图片
%%
function g = GaussianImagePyramid(img)

im = cutImg(img);

% 建立一个 3*3 的高斯滤波器
h = fspecial('gaussian', [3 3], 1);
% 卷积运算
g = imfilter(im, h, 'conv');

[nHeight, nWidth, nDim] = size(im);

NPlus = min(nHeight, nWidth);
N = fix(log2(NPlus));

for i = N : -1 : 0
    s = im(1 : 2^i : NPlus, 1 : 2^i : NPlus, :);
    figure;
    imshow(s);
end

figure;
imshow(img);
figure;

for i = N : -1 : 0
    s = im(1 : 2^i : NPlus, 1 : 2^i : NPlus, :);
    subplot(1, N + 1, N - i + 1), imshow(s);
end


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值