高斯金字塔
2016-04-19 09:21
204 查看
高斯金字塔可以作为 图像特征提取 的预处理步骤
—————————————————————————————————————————————————————————————————————————————
过程: 假设输入图像为 Input_Img;大小为 256*256
最简单的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)
—————————————————————————————————————————————————————————————————————————————
过程: 假设输入图像为 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)
相关文章推荐
- 深入分析 Java 中的中文编码问题
- 数据库连接
- 结对编程——关于Fault、Error、Failure程序设计
- HelloChart--PieChartView(饼图)
- Linux无需开发底层驱动,从应用层获取GPIO中断
- HelloChart--ColumnChartView(柱形图)
- android开发游记:meterial design 使用circularReveal仿哔哩哔哩(bilibili)搜索框动画
- 体感设备
- Max 模型背面边面的不显示问题解决方案
- [初识总结]开源即时通讯IM Openfire+spark and (comet实现)
- java Runtime类
- 房坑
- Spring MVC 注解开发详解
- 去掉navbar或者tabbar的预留间距
- Enum , Enum Class ?
- 《般若波罗蜜多心经》全文及解释
- Delphi中的堆,栈
- [bzoj4453]cys就是要拿英魂!
- 服务器中很多的CLOSE_WAIT
- SQL优化