Matlab - Фильтрация изображений с фильтром 5X5 без функции imfilter - PullRequest
0 голосов
/ 25 апреля 2018

Я попытался изменить код ( Реализация IMFILTER в matlab ), чтобы отфильтровать изображение с помощью гауссовского фильтра 5X5.Что-то не так, но я не нахожу это.

     gauss_kernel = fspecial('gaussian',5,2);
        function [result] = evc_filter(input, kernel)


        rsize = size(input);

        r = zeros(rsize);

        original=padarray(input,[2,2]);

        for i = 3:rsize(1)+2
            for j = 3:rsize(2)+2           
                temp = original(i-2:i+2,j-2:j+2) .* kernel;
                r(i-2,j-2) = sum(temp(:));
            end
        end
result=r;
end

Если я показываю картинку с imshow, она выглядит иначе, если я использую функцию imfilter.Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 25 апреля 2018

сначала преобразуйте изображение в двойное, затем выполните оставшуюся процедуру.см. пример кода ниже:

function imfilt()
img = imread('one.jpg');
img = double(img);
[r,c,z] = size(img);
pad = 4;
nimg = zeros(r+pad,c+pad,z);
nimg(pad/2+1: r+pad/2, pad/2+1: c+pad/2,:) = img;
h = fspecial('gaussian',5,2);

res = zeros(r,c,z);
for i = pad/2+1 : r+pad/2
    for j = pad/2+1 : c+pad/2
        tmp = nimg(i-pad/2:i+pad/2,j-pad/2:j+pad/2,1).*h;
        res(i-pad/2,j-pad/2,1) = sum(tmp(:));
        tmp = nimg(i-pad/2:i+pad/2,j-pad/2:j+pad/2,2).*h;
        res(i-pad/2,j-pad/2,2) = sum(tmp(:));
        tmp = nimg(i-pad/2:i+pad/2,j-pad/2:j+pad/2,3).*h;
        res(i-pad/2,j-pad/2,3) = sum(tmp(:));
    end
end

imshow(uint8(res),[]);
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...