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

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

程序如下:

clearall;

clc;

I=imread('up4-Amppng');

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、Matlabfreqz2()这个函数可以自动得到一个指定尺寸的,对应于时域的频域模板。

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

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

function y = harmonic(x) %声明这个函数(假设x是一行向量)

bad = find(x == 0); %bad是找出x为零项所在的列数

newx = x; %newx与x相等

newx(bad) = []; %除掉newx中的0,如原来为0,1,2,3,运行后为1,2,3,

newx_adj = 1 / newx; %取倒数

mysum = sum(newx_adj(:)); %newx_adj 元素和存储在mysum里

y = prod(size(x)) / mysum; %size(x)是指这个矩阵的大小如x=[0,1,3,5,7],运行后结果为1,5,prod的意思是连乘,就是15,那么结果就是5/mysum的值

%我觉得是你计算 PSNR的方法错了,应该是用最大像素值,

%灰度图像的最大像素值是255, 而不是512。

%另外计算MSE也不用那么麻烦

%下面是计算 MSE和PSNR的程序,我拿一张试了一下,结果肯定是不一样的。

%还有统计像素值出现的次数,用直方图imhist会更简单点,这个程序我没写。

I=imread('boatbmp');

J=imnoise(I,'gaussian',0,001);

Jg=double(J);

%均值滤波

k1=filter2(fspecial('average',3),Jg);

k2=filter2(fspecial('average',5),Jg);

figure,subplot(221),imshow(I);title('原图');

subplot(222),imshow(J);title('加入高斯白噪声以后的图像');

subplot(223),imshow(uint8(k1));title('33模板均值滤波');

subplot(224),imshow(uint8(k2));title('55模板均值滤波');

%中值滤波

k3=medfilt2(Jg,[3 3]);

k4=medfilt2(Jg,[5 5]);

figure,subplot(221),imshow(I);title('原图');

subplot(222),imshow(J);title('加入高斯白噪声以后的图像');

subplot(223),imshow(uint8(k3));title('33模板中值滤波');

subplot(224),imshow(uint8(k4));title('55模板中值滤波');

%计算均值滤波后图像的PMSE与PSNR

diff=(double(I)-k1)^2;

mse=mean(diff(:));

pmse_avg=mse;

max_value=max(k1(:));

psnr=double(10log(max_valuemax_value/mse)/log(10));

%计算中值滤波后的各项指标

diff=(double(I)-k3)^2;

mse=mean(diff(:));

max_value=max(k3(:));

pmse_mid=mse;

psnr_mid=double(10log(max_valuemax_value/mse)/log(10));

以灰度图像eighttif为例,向原始图像中加入高斯噪声,再对噪声图像调用均值滤波函数avefilt进行去噪。

I=imread('eighttif');

G=imnoise(I,'gaussian');

after=avefilt(G,3);

subplot(1,3,1);

imshow(I);

subplot(1,3,2);

imshow(G);

subplot(1,3,3);

imshow(after);

function d=avefilt(x,n)

a=ones(n);

[M,N]=size(x);

x1=double(x);

x2=x1;

for i=1:M-n+1

for j=N-n+1

c=x1(i:i+n-1,j:j+n-1)a;

s=sum(sum(c));

x2(i+fix((n-1)/2),j+fix((n-1)/2))=s/(nn);

end

end

d=uint8(x2);

clear all;

close all;

figure;

I1=imread('cameramanjpg');

subplot(221);

imshow(I1);title('原图像');

I2=imnoise(I1,'salt & pepper');

subplot(222);

imshow(I2);title('加胡椒盐噪声');

M=fspecial('average',33);

I3=imfilter(I2,M);

subplot(223);

imshow(I3);title('工具箱均值滤波');

[m,n]=size(I1);

J=double(I2);

for i=2:m-2

    for j=2:n-2

        s = J(i-1,j-1)+J(i-1,j)+J(i-1,j+1)+ J(i,j-1)+J(i,j)+J(i,j+1)+J(i+1,j-1)+J(i+1,j)+J(i+1,j+1);

        I4(i,j)=s/9;

    end

end

subplot(224);

imshow(uint8(I4));title('自编均值滤波');

h

=

ones(N,N)/N^2中,ones(N,N)是

生成一个NN的方阵,元素全是1

ones(N,N)/N^2是把方阵中的每个元素除以N^2,也就是方阵的元素全是1/N^2

h

=

ones(N,N)/N^2就是把产生的方阵赋值给变量h

随便写了一个方法,没优化,运行速度有点慢。对于图像范围边界,只跟图像内部点做均值。

clear

all

clc

A=imread('manuo1jpg');

A=im2double(A);

subplot(1,2,1)

imshow(A);

[line,row]=size(A);

lines=0;

rows=0;

linee=0;

rowe=0;

temp=0;

B=[];

for

i=1:1:line

for

j=1:1:row

lines=i-1;

linee=i+1;

rows=j-1;

rowe=j+1;

if

i==1

lines=1;

linee=2;

end

if

i==line

lines=line-1;

linee=line;

end

if

j==1

rows=1;

rowe=2;

end

if

j==row

rows=row-1;

rowe=row;

end

temp=0;

for

m=lines:1:linee

for

n=rows:1:rowe

temp=temp+A(m,n);

end

end

B(i,j)=temp/((linee-lines+1)(rowe-rows+1));

end

end

subplot(1,2,2)

imshow(B);

以上就是关于用matlab频域低通滤波,频域高通滤波处理彩色图像的程序全部的内容,包括:用matlab频域低通滤波,频域高通滤波处理彩色图像的程序、matlab调和均值滤波器、一个matlab简单图像处理的程序,共执行了均值,中值滤波,然后计算各个处理后图像的MSE,PSNR等值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9773459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存