2016-10-30 2 views
2

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

ответ

0

RGB-изображение состоит из красных, зеленых, синих каналов. Для выполнения обработки изображений на RGB изображения

  1. Вы должны выделить три компонента изображения
  2. процесса каждый компонент (R, G, В) один раз
  3. reconstuct изображения из модифицированного 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

+0

Вам необходимо изменить последние две строки вашего кода. Вы переписываете первый канал вывода вместо записи на другие два канала. Я также предлагаю добавить пол-двоеточия в конце всех ваших заявлений, или вы получите много эха в командной строке. – rayryeng

Смежные вопросы