Фильтр нижних частот Matlab для изображения RGB

У меня есть этот код, который будет выполнять фильтр Гаусса (фильтр нижних частот) на изображении. Однако этот фильтр работает только с изображением в градациях серого. Как я могу улучшить его, чтобы он мог работать с цветным изображением? Я знаю, что есть много встроенных функций, но я новичок в обработке изображений и пытаюсь изучить основы.

%Read an Image
Img = imread('peppers.png');
Im = rgb2gray(Img);
I = double(Im);

%Design the Gaussian Kernel
%Standard Deviation
sigma = 1.76;

%Window size
sz = 4;
[x,y]=meshgrid(-sz:sz,-sz:sz);

M = size(x,1)-1;
N = size(y,1)-1;
Exp_comp = -(x.^2+y.^2)/(2*sigma*sigma);
Kernel= exp(Exp_comp)/(2*pi*sigma*sigma);

%Initialize
Output=zeros(size(I));
%Pad the vector with zeros
I = padarray(I,[sz sz]);

%Convolution
for i = 1:size(I,1)-M
    for j =1:size(I,2)-N
        Temp = I(i:i+M,j:j+M).*Kernel;
        Output(i,j)=sum(Temp(:));
    end
end
%Image without Noise after Gaussian blur
Output = uint8(Output);
figure,imshow(Output);

person Selena    schedule 30.10.2016    source источник


Ответы (1)


Изображение RGB состоит из каналов красного, зеленого и синего цветов. Чтобы выполнить обработку изображения на изображении RGB

  1. Вы должны отделить три компонента изображения
  2. обрабатывать каждый компонент (R, G, B) один раз
  3. восстановить изображение из модифицированных R, G, B

    img = imread('peppers.png');
    R = img(:,:,1); %get the Red part
    G = img(:,:,2); %get the Blue part
    B = img(:,:,3); %get the Green part
    R_gaussian = gaussianFilter(R); %write your own function name
    G_gaussian = gaussianFilter(G); %or repeat the code by REPLACING I as 
    B_gaussian = gaussianFilter(B); %Red Green Blue components
    RGB_gaussian = cat(3,R_gaussian, G_gaussian, B_gaussian); %merging the components
    %since you are learning you can do this for better unedrstanding
    RGB_gaussian = zeros(size(img)); %make a matrix of size  of original image
    RGB_gaussian(:,:,1)=R_gaussian; % Replace the values  
    RGB_gaussian(:,:,2)=G_gaussian;
    RGB_gaussian(:,:,3)=B_gaussian;
    

для получения дополнительной информации это может быть полезно: http://www.bogotobogo.com/Matlab/Matlab_Tutorial_Digital_Image_Processing_6_Filter_Smoothing_Low_Pass_fspecial_filter2.php

person venky__    schedule 30.10.2016
comment
Вам нужно изменить последние две строки вашего кода. Вы перезаписываете первый канал вывода вместо записи на два других канала. Я бы также посоветовал добавить точку с запятой в конце всех ваших утверждений, иначе вы получите много повторений в командной строке. - person rayryeng; 30.10.2016