您的位置:首页 > 其它

高斯金字塔

2016-04-19 09:21 204 查看
高斯金字塔可以作为 图像特征提取 的预处理步骤

—————————————————————————————————————————————————————————————————————————————



过程: 假设输入图像为 Input_Img;大小为 256*256

① 先对 Input_Img 进行高斯滤波,然后下采样,得到 Gauss_Img1;这时 Gauss_Img1 大小为 128*128;

② 对 Gauss_Img1 进行高斯滤波, 然后下采样, 得到 Gauss_Img2;这时 Gauss_Img2 大小为 64*64;

③ 对 Gauss_Img2 进行高斯滤波, 然后下采样, 得到 Gauss_Img3;这时 Gauss_Img3 大小为 32*32;

依次进行下去…………


最简单的matlab代码:

img1=imread(‘test.jpg’);

[m,n]=size(img1);

w=fspecial(‘gaussian’,[3 3]);

img2=imresize(imfilter(img1,w),[m/2 n/2]);

img3=imresize(imfilter(img2,w),[m/4 n/4]);

img4=imresize(imfilter(img3,w),[m/8 n/8]);

img5=imresize(imfilter(img4,w),[m/16 n/16]);

imshow(img1);

figure,imshow(img2);

figure,imshow(img3);

figure,imshow(img4);

figure,imshow(img5);

注意:这里高斯滤波器用的是3*3大小,而sigma默认为0.5;可以相应调整滤波器大小和sigma的值,获得的效果也不尽相同;

—————————————————————————————————————————————————————————————————————————————

这里面有关于高斯滤波器的生成函数,如下:

function r=GuassionMatrix(delta,radius)

radius=ceil(radius);

n=2*radius+1;

r=zeros(n,n);

%tempMatrix=zeros(radius,radius);

for i=-radius:radius

for j=-radius:radius

r(i+radius+1,j+radius+1)=exp(-(i^2+j^2)/2*delta^2);

end

end;

r=round(100*r);

r=r/sum(sum(r));

当然,用matlab自带的函数也可以

w=fspecial(‘gaussian’,[n n], sigma );

还有另外的说法(转自http://blog.sina.com.cn/s/blog_68f909c30100r0g1.html

高斯金字塔(Gaussian Pyramid):高斯金字塔 里有两个概念:组(Octave)和层(Level或Interval),每组里有若干层。

高斯金字塔的构造是这样的:

(1)第一组的第一层为原图像,然后将图像做一次高斯平滑(高斯卷积、高斯模糊)高斯平滑里有一个参数 σ ,在SIFT里作者取1.6 ;

(2)将σ乘一个比例系数k作为新的平滑因子来平滑第一组第二层得到第三层。

(3)重复若干次,得到L层他们分别对应的平滑参数为:0,σ,kσ,k2σ….。

(4)将最后一幅图像做比例因子为 2 的降采样得到第二组的第一层,然后对第二组的第一层做参数是 σ 的高斯平滑,对第二层做 kσ 的平滑得到第三层…..这里一定注意:每组对应的平滑因子是一样的。而不是像有的资料上说的持续递增。

这样反复形成了O组L层。一般模糊的高斯模板长宽都约为6σ(这里σ为当次的平滑因子,就是可能是kσ,k2σ..)

具体代码这里不贴了

—————————————————————————————————————————————————————————————————————————————

如何在 图片 固定位置生成 高斯函数场?

function ImgOutput=CreatGauss(ImgInput,m,n,sigma)

[x,y]=size(ImgInput);

a=1:x;

b=1:y;

[A,B]=meshgrid(a,b);

arg= -((A-n).(A-n) + (B-m).(B-m))/(2*sigma*sigma);

h=exp(arg);

ImgOutput((i-1)*m+1:i*m,(j-1)*n+1:j*n)=h;

上面所示函数为在[m,n]处生成 标准差为 sigma 的高斯场,图片如下:

ImgInput=zeros(200,200);

ImgOutput=CreatGauss(ImgInput, 100,100,50)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: