图像金字塔 - 处理任意维度

时间:2014-08-01 15:34:42

标签: matlab image-processing filter

查看Image Pyramids教程,我看到以下注释:

请注意,输入图像可以按两倍(两个维度)进行划分非常重要。否则,将显示错误。

我想知道,如何为任意图像尺寸构建图像金字塔,并保持"再现"确切(最多圆整错误)。

将图像尺寸设为101 x 101,在第一个" Downsample"之后使用1:2:101步骤,得到51×51的图像尺寸 然而,在经过另一次迭代后,产生了26 x 26的图像,那么我们如何处理奇数和偶数尺寸。

对于处理" Upsample"的MATLAB代码,我感到很高兴。 /" Downsample"任何规模的程序。

2 个答案:

答案 0 :(得分:0)

对于下采样,更好的方法是删除最后一行&从图像中的列,因此101×101生成50×50。虽然这可能是一种品味问题,但我认为忽视真实信息比引入虚假信息更好。

对于上采样,我担心你提出的问题是不可能的。假设你有200×200像素的图像;你能从400×400像素图像或401×401像素图像中下采样吗?两者都会给出相同的结果。

答案 1 :(得分:0)

我已经看过一些技巧,他们将原始图像的尺寸调整为偶数,然后他们对图像进行二次采样。不幸的是,这种奇怪和均匀的东西是不可避免的,因为你已经看过了,所以在将它传递给图像分解程序之前,你必须自己做一些工作。这样在构建图像金字塔时就没有歧义了。完成后,您可以裁剪掉您不想要的原始图像部分。另一种技术是消除行和列以确保它们都是均匀的。

因此,您所要做的就是扩展图像的尺寸以确保每个尺寸均匀。换句话说,你会做这样的事情:

im = imread('...'); %// Place image here
rows = size(im,1);
cols = size(im,2);
imResize = imresize(im, [rows + mod(rows,2), cols + mod(cols,2)], 'bilinear');

这基本上读取图像和尺寸(行和列)。之后,它调整图像大小以确保尺寸(行和列)均匀。这是通过使用mod检查值是否为奇数来完成的。如果任何维度是奇数,则输出将为1,您只需将其作为输出维度即可。

此外,您可以通过执行以下操作简单地裁断最后一行或列:

im = imread('...'); % // Place image here
rows = size(im,1);
cols = size(im,2);
imResize = im(1:rows-mod(rows,2), 1:cols-mod(cols,2), :); 

此处的mod以相同的方式用于裁剪您不需要的内容。如果任何维度是奇数,只需减去1,这样我们就可以消除最后一行或最后一列。


正如CST-Link已经说过的那样,从具有奇数尺寸的图像进行上采样已经不可能重建原始图像尺寸,因为如果它们是奇数的那些原始行和列就已经丢失了。