2016-10-30 15 views
2

Ich habe diesen Code, der Gauß-Filter (Tiefpassfilter) auf einem Bild durchführen wird. Dieser Filter funktioniert jedoch nur bei Graustufenbildern. Wie kann ich es verbessern, damit es an einem farbigen Bild arbeiten kann? Ich weiß, dass es viele eingebaute Funktionen gibt, aber ich bin neu in der Bildverarbeitung und ich versuche, die Grundlagen zu lernen.Matlab Tiefpassfilter für RGB-Bild

%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); 

Antwort

0

Ein RGB-Bild besteht aus roten, grünen, blauen Farbkanälen. Zum Durchführen der Bildverarbeitung auf RGB-Bild

  1. Sie haben zu trennen, die drei Komponenten des Bildes
  2. Prozess jede Komponente (R, G, B) einmal
  3. reconstuct das Bild aus modifizierten 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; 
    

für weitere Informationen dies kann hilfreich sein: http://www.bogotobogo.com/Matlab/Matlab_Tutorial_Digital_Image_Processing_6_Filter_Smoothing_Low_Pass_fspecial_filter2.php

+0

Sie müssen die letzten zwei Zeilen Ihres Codes ändern. Sie überschreiben den ersten Kanal der Ausgabe, anstatt auf die anderen beiden Kanäle zu schreiben. Ich würde auch vorschlagen, Semikolons am Ende aller Ihrer Aussagen hinzuzufügen, oder Sie werden viel Echo in der Eingabeaufforderung bekommen. – rayryeng