|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 牛小贱 于 2015-3-24 12:00 编辑
我知道在matlab中有fspecial函数可以产生高斯函数
然后可以通过卷积命令将图像和高斯函数卷积
如:
- Img = imread('lena.bmp');
- Img = double(Img);
- sigma=1.5; % scale parameter in Gaussian kernel for smoothing.
- g=fspecial('gaussian',10,sigma);
- Img_n = conv2(Img,g,'same');
复制代码 结果见图1
但是我不太清楚matlab中的fspecial函数是产生高斯核的具体公式
现在我想指定一个高斯核
g(x,y)=(1/4*pi*alf)*exp(-(x^2+y^2)/(4*alf))
与图像卷积,有两个问题搞不清楚:
1 取alf=5,我按照上面的式子生成高斯函数,在与图像卷积后的结果变得很黑,代码如下
- alf = 5;
- for i=1:10
- for j=1:10
- g(i,j) = exp(-(i^2+j^2)/(4*alf))/(4*pi*alf);
- end
- end
- Img_n = conv2(Img,g,'same');
复制代码 结果见图2!!
2 由于我在后面的处理当中需要用到g的傅立叶变化模值与图像的傅立叶变化的乘积,因此g的size应该和Img的size一样吧,
可是用
- for i=1:256
- for j=1:256
- g(i,j) = exp(-(i^2+j^2)/(4*alf))/(4*pi*alf);
- end
- end
复制代码
产生的g只有左上角部分有值,其余的地方都是零。这样卷积的结果就变成了图3
请教各位 我到底是哪个地方做错了? |
-
结果
|