用于 RGB 图像的 Matlab 低通滤波器
Matlab low pass filter for RGB image
我有这段代码可以对图像执行高斯滤波器(低通滤波器)。但是,此滤镜仅适用于灰度图像。我怎样才能改进它以便它可以在彩色图像上工作?我知道有很多内置函数,但我是图像处理的新手,我正在尝试学习基础知识。
%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);
RGB 图像由红色、绿色、蓝色通道组成。对RGB图像进行图像处理
- 你必须把图像的三个部分分开
- 每个组件 (R,G,B) 处理一次
从修改后的 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
我有这段代码可以对图像执行高斯滤波器(低通滤波器)。但是,此滤镜仅适用于灰度图像。我怎样才能改进它以便它可以在彩色图像上工作?我知道有很多内置函数,但我是图像处理的新手,我正在尝试学习基础知识。
%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);
RGB 图像由红色、绿色、蓝色通道组成。对RGB图像进行图像处理
- 你必须把图像的三个部分分开
- 每个组件 (R,G,B) 处理一次
从修改后的 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