基于Matlab的高斯系数图像卷积
这是我的图像平滑代码。 我首先计算高斯滤波器系数,它是归一化的 对于最后一行,我尝试用高斯滤波器系数对图像进行卷积,然后显示图像。 但是,它只显示一个白色的空图像。 我认为高斯滤波器系数的值是正确的,所以我认为问题在于卷积基于Matlab的高斯系数图像卷积,matlab,image-processing,smoothing,Matlab,Image Processing,Smoothing,这是我的图像平滑代码。 我首先计算高斯滤波器系数,它是归一化的 对于最后一行,我尝试用高斯滤波器系数对图像进行卷积,然后显示图像。 但是,它只显示一个白色的空图像。 我认为高斯滤波器系数的值是正确的,所以我认为问题在于卷积 卷积不是由conv2(u,v)在matlab上完成的吗?我做错了什么?看起来有两个小问题: img=double(img)将图像类型从uint8转换为double 在MATLAB中,double类型的图像应用像素范围[0,1]。 1以上的所有像素均为白色,因此显示的图像为白
卷积不是由conv2(u,v)在matlab上完成的吗?我做错了什么?看起来有两个小问题:
将图像类型从img=double(img)
转换为uint8
double
在MATLAB中,
类型的图像应用像素范围[0,1]。double
1以上的所有像素均为白色,因此显示的图像为白色- 与
conv2一起使用的内核未规范化。
当您想使用时,您正在使用
:A=conv2(img,G)
A=conv2(img,G)
对于第一个问题,有两种选择:
代替
img=double(img)
img=im2double(img)
(给出与img=double(img)/255相同的结果)
img=double(img)
,但在imshow(A)
之前转换为uint8
:imshow(uint8(A))
以下是更正代码的(选项之一):
clc;
clear all;
clc;
img = imread ('a.jpg');
img = rgb2gray(img);
figure, imshow(img);
img = double (img);
sigma= 2;
G= zeros(5,5);
for i=1:5
for j=1:5
x=[-2,1,0,-1,2];
y=[-2,1,0,-1,2];
G(i,j)= exp(-(x(i)^2+y(j)^2)/(2*(sigma^2)));
end
end
G_=G/sum(sum(G,1),2);
A= conv2(img,G);
figure, imshow(A);
clc
clear all
img = imread('a.jpg');
img = rgb2gray(img);
figure, imshow(img);
img = im2double(img); % im2double(img) instead of double(img).
sigma = 2;
G = zeros(5,5);
for i = 1:5
for j = 1:5
x = [-2,1,0,-1,2];
y = [-2,1,0,-1,2];
G(i,j) = exp(-(x(i)^2+y(j)^2)/(2*(sigma^2)));
end
end
G_ = G/sum(sum(G,1),2);
A = conv2(img, G_); % G_ instead of G. For better margins: A = conv2(img, G_, 'same');
figure, imshow(A);