用matlab频域低通滤波,频域高通滤波处理彩色图像的程序

不要灰色图像的程序,要处理彩色图像的程序!

程序如下:

clear all;

clc;

I=imread('up4-Amp.png');

OutImg=I;

R=I(:,:,1);

G=I(:,:,2);

B=I(:,:,3);

R=medfilt2(R,[3,3]);

G=medfilt2(G,[3,3]);

B=medfilt2(B,[3,3]);

I1=cat(3,R,G,B);  % 对彩色图像R,G,B三个通道分别进行3×3模板的中值滤波 cat函数用于连接两个矩阵或数组 

R=filter2(fspecial('average',3),R)/255;

G=filter2(fspecial('average',3),G)/255;

B=filter2(fspecial('average',3),B)/255;

I2= cat(3,R,G,B);  %对彩色图像R,G,B三个通道分别进行3×3模板的均值滤波

figure,imshow(I);

title('原图')

figure,

imshow(I1);

title('中值滤波')

figure,imshow(I2);

title('均值滤波')

扩展资料:

注意事项

1、在频域滤波,由于是点乘,所以滤波模板矩阵和图像矩阵必须尺寸一样。

2、因为尺寸一样,它们的原点必须要对齐。

3、因在进行离散傅里叶变换后,在频域点乘,相当于在时域卷积,但是这个时候实际上是对时域周期矩阵进行卷积。直接在时域卷积,matlab默认是在边界补0。

4、Matlab freqz2()这个函数可以自动得到一个指定尺寸的,对应于时域的频域模板。

5、图像经过傅里叶变换后,它的原点在左上角。而模板经过freqz2后,原点在中心,所以只要平移其中的一个就好了。

6、在对原图像进行傅里叶变换之前,按照一定规则补0就好了。

   

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16

彩色图像由RGB三色分量构成,彩色图像的滤波是分别对三个分量进行滤波.

originalRGB = imread('peppers.png');
subplot(311);
imshow(originalRGB);
title('原始图片');
[m n index]=size(originalRGB);

lpf=zeros(m,n);

%首先构造频域理想低通滤波器
for i=1:m
    for j=1:n
        d = sqrt((i-round(m/2))^2+(j-round(n/2))^2);
        if d<=50   %截止频率
            lpf(i,j)=1;
        end
    end
end
subplot(312);
imshow(uint8(255.*lpf));title('低通滤波器');

for i=1:3
    c = originalRGB(:,:,i); %分别取R/G/B分量
    %对每个分量进行滤波
    s = fftshift(fft2(c));
    d = s.*lpf;
    c = real(ifft2(ifftshift(d)));
    filterRGB(:,:,i)=c;
end

subplot(313);
imshow(filterRGB);
title('低通滤波图片');

本回答被提问者和网友采纳
相似回答