1

我想知道是否有人可以查看此代码。我正在尝试在不使用任何 matlab 内置函数的情况下做一个 3x3 高斯内核。(是的,我知道高斯和卷积的所有内置函数,即 fspecial)结果给了我一个白色的图像。不知道有什么问题。

clc;

close all;

clear all;

img=imread('image.jpg');

figure,imshow(img);

img2=zeros(size(img)+2);

newImg=zeros(size(img));
for rgb=1:3

        for x=1:size(img,1)

            for y=1:size(img,2)

                img2(x+1,y+1,rgb)=img(x,y,rgb);

            end
        end
end
    for i= 1:size(img2,1)-2

        for j=1:size(img2,2)-2

            window=zeros(9,1);

            inc=1;

            for x=1:3

                for y=1:3

                    window(inc)=img2(i+x-1,j+y-1,rgb);

                    inc=inc+1;

                end

            end
              kernel=[1;2;1;2;4;2;1;2;1];

%             kernel=[0;1;0;1;-4;1;0;1;0];

            med=window.*kernel;

            disp(med);

            med=sum(med);

            med=floor(med);

            newImg(i,j,:)=med;

        end

    end

newImg=uint8(newImg);

figure,imshow(newImg);

谢谢。

4

1 回答 1

0

我想你应该规范化kernel. 我的意思是,将每个元素除以它们的值的总和 (16),使它们的总和等于 1:

kernel=[1;2;1;2;4;2;1;2;1]/16;
于 2013-10-24T17:41:49.997 回答