Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Matlab的高斯系数图像卷积_Matlab_Image Processing_Smoothing - Fatal编程技术网

基于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中,
    double
    类型的图像应用像素范围[0,1]。
    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);