最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

数字图像处理matlab代码

来源:动视网 责编:小OO 时间:2025-10-03 04:13:34
文档

数字图像处理matlab代码

一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。1、不同滤波器的频域降噪1.1理想低通滤波器(ILPF)I1=imread('eight.tif');%读取图像I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt&pepper',0.01);figure,subplot(1,3,1);imshow(I2)%显示灰度图像title('原始图像');%为图像添加标题subplot(1,3
推荐度:
导读一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。1、不同滤波器的频域降噪1.1理想低通滤波器(ILPF)I1=imread('eight.tif');%读取图像I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt&pepper',0.01);figure,subplot(1,3,1);imshow(I2)%显示灰度图像title('原始图像');%为图像添加标题subplot(1,3
一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。

1、不同滤波器的频域降噪

1.1 理想低通滤波器(ILPF)

I1=imread('eight.tif');                %读取图像

I2=im2double(I1);

I3=imnoise(I2,'gaussian',0.01);

I4=imnoise(I3,'salt & pepper',0.01);

figure,subplot(1,3,1);

imshow(I2)                             %显示灰度图像

title('原始图像');                     %为图像添加标题

subplot(1,3,2); 

imshow(I4)                             %加入混合躁声后显示图像 

title('加噪后的图像');

s=fftshift(fft2(I4)); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                    %分别返回s的行数到M中,列数到N中

n1=floor(M/2);                        %对M/2进行取整

n2=floor(N/2);                        %对N/2进行取整

d0=40;                                %初始化d0 

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

        if d<=d0 %点(i,j)在通带内的情况

            h=1;                      %通带变换函数

        else                          %点(i,j)在阻带内的情况

            h=0;                      %阻带变换函数

        end  

          s(i,j)=h*s(i,j);            %ILPF滤波后的频域表示

      end

  end

s=ifftshift(s);                       %对s进行反FFT移动

s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复

数的实部转化为无符号8位整数

subplot(1,3,3);                       %创建图形图像对象

imshow(s);                            %显示ILPF滤波后的图像

title('ILPF滤波后的图像(d=40)');   

运行结果:                    

1.2 二阶巴特沃斯低通滤波器(BLPF)

I1=imread('eight.tif');                   %读取图像

I2=im2double(I1);

I3=imnoise(I2,'gaussian',0.01);

I4=imnoise(I3,'salt & pepper',0.01);

figure,subplot(1,3,1);

imshow(I2)                                %显示灰度图像

title('原始图像');                        %为图像添加标题

subplot(1,3,2); 

imshow(I4)                                %加入混合躁声后显示图像 

title('加噪后的图像');

s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                  %分别返回s的行数到M中,列数到N中

n=2;                                      %对n赋初值

n1=floor(M/2);                        %对M/2进行取整

n2=floor(N/2);                        %对N/2进行取整

d0=40;                                %初始化d0 

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

         h=1/(1+(d/d0)^(2*n));        %BLPF滤波函数

          s(i,j)=h*s(i,j);            %ILPF滤波后的频域表示

      end

  end

  s=ifftshift(s);                     %对s进行反FFT移动

  s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,3,3);                       %创建图形图像对象

imshow(s);                            %显示ILPF滤波后的图像

title('BLPF滤波后的图像(d=40)');        

实验结果:               

1.3 指数型低通滤波器(ELPF) 

I1=imread('eight.tif');               %读取图像

I2=im2double(I1);

I3=imnoise(I2,'gaussian',0.01);

I4=imnoise(I3,'salt & pepper',0.01);

figure,subplot(1,3,1);

imshow(I2)                            %显示灰度图像

title('原始图像');                    %为图像添加标题

subplot(1,3,2); 

imshow(I4)                            %加入混合躁声后显示图像 

title('加噪后的图像');

s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                   %分别返回s的行数到M中,列数到N中

n1=floor(M/2);                        %对M/2进行取整

n2=floor(N/2);                        %对N/2进行取整

d0=40;                              

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

      h=exp(log(1/sqrt(2))*(d/d0)^2); 

          s(i,j)=h*s(i,j);            %ILPF滤波后的频域表示

      end

  end

  s=ifftshift(s);                     %对s进行反FFT移动

  s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,3,3);                        %创建图形图像对象

imshow(s);                             %显示ILPF滤波后的图像

title('ELPF滤波后的图像(d=40)');    

运行结果:                   

1.4 梯形低通滤波器(TLPF)

I1=imread('eight.tif');                   %读取图像

I2=im2double(I1);

I3=imnoise(I2,'gaussian',0.01);

I4=imnoise(I3,'salt & pepper',0.01);

figure,subplot(1,3,1);

imshow(I2)                                %显示灰度图像

title('原始图像');                        %为图像添加标题

subplot(1,3,2); 

imshow(I4)                                %加入混合躁声后显示图像 

title('加噪后的图像');

s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                    %分别返回s的行数到M中,列数到N中

n1=floor(M/2);                            %对M/2进行取整

n2=floor(N/2);                            %对N/2进行取整

d0=10;d1=160;                              

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

if (d<=d0)

              h=1; 

else if (d0<=d1)

                h=(d-d1)/(d0-d1); 

               else h=0; 

               end 

           end    

          s(i,j)=h*s(i,j);                 %ILPF滤波后的频域表示

      end

  end

  s=ifftshift(s);                          %对s进行反FFT移动

  s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,3,3);                            %创建图形图像对象

imshow(s);                                 %显示ILPF滤波后的图像

title('TLPF滤波后的图像');                 %为图像添加标题

运行结果:

1.5 高斯低通滤波器(GLPF)

I1=imread('eight.tif');                   %读取图像

I2=im2double(I1);

I3=imnoise(I2,'gaussian',0.01);

I4=imnoise(I3,'salt & pepper',0.01);

figure,subplot(1,3,1);

imshow(I2)                                %显示灰度图像

title('原始图像');                        %为图像添加标题

subplot(1,3,2); 

imshow(I4)                                %加入混合躁声后显示图像 

title('加噪后的图像');

s=fftshift(fft2(I4));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                  %分别返回s的行数到M中,列数到N中

n1=floor(M/2);                            %对M/2进行取整

n2=floor(N/2);                            %对N/2进行取整

d0=40;                              

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

        h=1*exp(-1/2*(d^2/d0^2));         %GLPF滤波函数

          s(i,j)=h*s(i,j);                %ILPF滤波后的频域表示

      end

  end

s=ifftshift(s);                           %对s进行反FFT移动

s=im2uint8(real(ifft2(s)));   %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,3,3);                           %创建图形图像对象

imshow(s);                                %显示ILPF滤波后的图像

title('GLPF滤波后的图像(d=40)'); 

运行结果:                       

1.6 维纳滤波器

[B,Cmap]=imread('eight.tif');         %读取MATLAB中的名为eight的图像 

I1=im2double(B);

I2=imnoise(I1,'gaussian',0.01);

I3=imnoise(I2,'salt & pepper',0.01);

figure,subplot(1,3,1);

imshow(I1)                            %显示灰度图像

title('原始图像');                    %为图像添加标题

subplot(1,3,2); 

imshow(I3) %加入混合躁声后显示图像 

title('加噪后的图像');

I4=wiener2(I3);

subplot(1,3,3);                               

imshow(I4);                           %显示wiener滤波后的图像

title('wiener滤波后的图像');       

运行结果:

结 论:

理想低通滤波器,虽然有陡峭的截止频率,却不能产生良好的效果,图像由于高频分量的滤除而变得模糊,同时还产生振铃效应。

    巴特沃斯滤波器通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。由于转移特性曲线的尾部保留较多的高频,所以对噪声的平滑效果不如ILPE。

    指数型低通滤波器具有较平滑的过滤带,经此平滑后的图像没有“振铃”现象,而与巴沃特斯滤波相比,它具有更快的衰减特性,处理图像稍微模糊一些。

梯形低通滤波器的性能介于巴沃特斯与完全平滑滤波器之间,对图像具有一定的模糊和振铃效应。

高斯低通滤波器其原理就是RC电路具有使低频信号较易通过而抑制较高频率信号的作用,可以有效地去除服从正态分布的噪声。

维纳滤波在处理光学传递函数在零点附近的噪声方法问题比较有效,通过选择适当参数,可以有效地消除或抑制噪声和“振铃效应”。

2、边缘增强

2.1 Robert 算子边缘检测

I = imread('eight.tif');

figure,subplot(1,3,1);

imshow(I);

title('原始图像');

BW1 = edge(I,'robert');                 %阈值默认

subplot(1,3,2);

imshow(BW1);

title('robert算子检测结果(T默认)');

BW2 = edge(I,'robert',0.04);  %T取0.04

subplot(1,3,3);

imshow(BW2);

title('robert算子检测结果(T=0.04)');  %阈值越小,检测出的边缘越丰富

运行结果:

2.2 Sobel 算子边缘检测

I = imread('eight.tif');                 %读取图像

figure,subplot(1,3,1);

imshow(I);

title('原始图像');

BW1 = edge(I,'sobel');                   %阈值默认

subplot(1,3,2);

imshow(BW1);

title('sobel算子(T默认)');

BW2=edge(I,'sobel',0.04);                %阈值取0.04

subplot(1,3,3);

imshow(BW2);

title('sobel算子(T=0.04)');

运行结果:

2.3 Prewitt算子边缘检测

I = imread('eight.tif');

figure,subplot(1,3,1);

imshow(I);

title('原始图像');

BW1 = edge(I,'Prewitt');              %阈值默认

subplot(1,3,2);

imshow(BW1);

title('Prewitt算子(T默认)');

BW2 = edge(I,'Prewitt',0.04);         %T取0.04

subplot(1,3,3);

imshow(BW2);

title('Prewitt算子(T=0.04)');      %阈值越小,检测出的边缘越丰富

运行结果:

2.4 LoG(laplacian of gaussian)算子边缘检测

I = imread('eight.tif');

figure,subplot(1,3,1);

imshow(I);

title('原始图像');

BW1 = edge(I,'log',0.003);           %T=0.003,sigma默认2

subplot(1,3,2);

imshow(BW1);

title(' LoG 算子(sigma=2)');

BW2 = edge(I,'log',0.003,2.20);      %T=0.003,sigma=2.20

subplot(1,3,3);

imshow(BW2);

title(' LoG 算子(sigma=2.20)');

运行结果:

2.5 Canny算子边缘检测

I = imread('eight.tif');

figure,subplot(1,3,1);

imshow(I);

title('原始图像');

BW1 = edge(I,'canny');                  %sigma默认1

subplot(1,3,2);

imshow(BW1);

title('canny算子(sigma=1)');

BW2 = edge(I,'canny',[0.04 0.10],1.3);  %T取0.04 0.10sigma=1.3

subplot(1,3,3);

imshow(BW2);

title('canny算子(sigma=1.3)');

运行结果:

结 论:

Roberts算子定位比较精确,但由于不包括平滑,所以对噪声比较敏感。该算子对具有陡峭边缘且噪声低的图像效果较好。

Prewitt算子和Sobel算子都是一阶的微分算子,而前者是平均滤波,后者是加权平均滤波且检测的图像边缘可能大于2个像素。这两者对灰度渐变低噪声的图像有较好的检测效果,但是对于混合多复杂噪声的图像,处理效果就不理想了。

LOG滤波器中的正比于低通滤波器的宽度,越大,平滑作用越显著,去除噪声越好,但图像的细节也损失越大,边缘精度也就越低。所以在边缘定位精度和消除噪声级间存在着矛盾,应该根据具体问题对噪声水平和边缘点定位精度要求适当选取。而且LOG方法没有解决如何组织不同尺度滤波器输出的边缘图为单一的、正确的边缘图的具体方法。

Canny方法则以一阶导数为基础来判断边缘点。它是一阶传统微分中检测阶跃型边缘效果最好的算子之一。它比Roberts算子、Sobel算子和Prewitt算子极小值算法的去噪能力都要强,但它也容易平滑掉一些边缘信息。

二、编写程序完成不同锐化方法的图像锐化的算法并进行比较,得出结论。

1、微分

1.1 基于一阶微分的图像锐化-梯度法

[I,map]=imread('eight.tif');

subplot(2,2,1),imshow(I,map);

title('原始图像');

I=double(I);

[IX,IY]=gradient(I);                       %返回梯度值

GM=sqrt(IX.*IX+IY.*IY);

OUT1=GM;

subplot(2,2,2),imshow(OUT1,map);           %直接梯度值输出

title('梯度值图像 ')

OUT2=I;

J=find(GM>=15);

 OUT2(J)=GM(J);

subplot(2,2,3),imshow(OUT2,map);

title('加阈值的梯度值图像')                %加阈梯度值输出

OUT3=I;

J=find(GM>=20);

OUT5(J)=200;

Q=find(GM<20);

OUT5(Q)=20;

subplot(2,2,4),imshow(OUT2,map);

title('二值图像');                         %二值图像    

运行结果:

2、高通滤波法

2.1 理想高通滤波(IHPF)

I1=imread('eight.tif');                %读取图像

I2=im2double(I1);

figure,subplot(1,2,1);

imshow(I2);   title('原始图像');                  

s=fftshift(fft2(I2)); 

[M,N]=size(s);                    %分别返回s的行数到M中,列数到N中

n=2;                                  %对n赋初值

n1=floor(M/2);                        %对M/2进行取整

n2=floor(N/2);                        %对N/2进行取整

d0=10;                                %初始化d0 

for i=1:M

for j=1:N

d=sqrt((i-n1)^2+(j-n2)^2);            %点(i,j)到傅立叶变换中心的距离

if d<=d0

            h=0;                   

        else                          

            h=1;                      

        end   

s(i,j)=h*s(i,j);                      %IHPF滤波后的频域表示

      end

end

s=ifftshift(s);                       %对s进行反FFT移动

s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,2,2);                       %创建图形图像对象

imshow(s);                            %显示IHPF滤波后的图像

title('IHPF滤波后的图像(d=10) ');   %为图像添加标题

运行结果:

2.2 巴特沃斯高通滤波(BHPF)

I1=imread('eight.tif');                   %读取图像

I2=im2double(I1);

figure,subplot(1,2,1);

imshow(I2);  

title('原始图像');                  

s=fftshift(fft2(I2));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                   %分别返回s的行数到M中,列数到N中

n=2;                                     %对n赋初值

n1=floor(M/2);                           %对M/2进行取整

n2=floor(N/2);                           %对N/2进行取整

d0=10;                                   %初始化d0 

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

        if (d==0)

              h=0;

        else

              h=1/(1+0.5*(d0/d)^(2*n));  %BHPF滤波函数

        end

 s(i,j)=h*s(i,j);                        %ILPF滤波后的频域表示

      end

  end

  s=ifftshift(s);                        %对s进行反FFT移动

  s=im2uint8(real(ifft2(s))); 

subplot(1,2,2);                           %创建图形图像对象

imshow(s);                                %显示ILPF滤波后的图像

title('BHPF滤波后的图像(d=10)');        %为图像添加标题    

运行结果:

2.3 指数型高通滤波(EHPF)

I1=imread('eight.tif');                      %读取图像

I2=im2double(I1);

figure,subplot(1,2,1);

imshow(I2);   title('原始图像');                  

s=fftshift(fft2(I2));%将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                  %分别返回s的行数到M中,列数到N中

n=2;                                         %对n赋初值

n1=floor(M/2);                               %对M/2进行取整

n2=floor(N/2);                               %对N/2进行取整

d0=10;                                       %初始化d0 

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

        if (d==0)

              h=0;

        else

              h=exp(log(1/sqrt(2))*(d0/d)^2);%BLPF滤波函数

        end

 s(i,j)=h*s(i,j);                            %ILPF滤波后的频域表示

      end

  end

  s=ifftshift(s);                            %对s进行反FFT移动

  s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,2,2);                              %创建图形图像对象

imshow(s);                                   %显示ILPF滤波后的图像

title('EHPF滤波后的图像(d=10)');           %为图像添加标题

运行结果:

2.4 梯形高通滤波(THPF)

I1=imread('eight.tif');                   %读取图像

I2=im2double(I1);

figure,subplot(1,2,1);

imshow(I2);   

title('原始图像');                  

s=fftshift(fft2(I2)); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                  %分别返回s的行数到M中,列数到N中

n=2;                                      %对n赋初值

n1=floor(M/2);                            %对M/2进行取整

n2=floor(N/2);                            %对N/2进行取整

d0=5;     d1=10;                          %初始化d0 

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

if (d<=d0)

              h=0; 

else if (d0<=d1)

                h=(d-d1)/(d0-d1); 

               else h=1; 

               end 

           end   

s(i,j)=h*s(i,j);                         %THPF滤波后的频域表示

      end

end

s=ifftshift(s);                          %对s进行反FFT移动

s=im2uint8(real(ifft2(s))); %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,2,2);                          %创建图形图像对象

imshow(s);                               %显示THPF滤波后的图像

title('THPF滤波后的图像');              %为图像添加标题

运行结果:

2.5 高斯型高通滤波(GHPF)

I1=imread('eight.tif');                   %读取图像

I2=im2double(I1);

figure,subplot(1,2,1);

imshow(I2);   title('原始图像');                  

s=fftshift(fft2(I2)); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心

[M,N]=size(s);                  %分别返回s的行数到M中,列数到N中

n=2;                                      %对n赋初值

n1=floor(M/2);                            %对M/2进行取整

n2=floor(N/2);                            %对N/2进行取整

d0=10;                                    %初始化d0 

for i=1:M

    for j=1:N

        d=sqrt((i-n1)^2+(j-n2)^2);    %点(i,j)到傅立叶变换中心的距离

         h=1*exp(1-1/2*(d^2/d0^2));       %GHPF滤波函数 

s(i,j)=h*s(i,j);                          %GHPF滤波后的频域表示

      end

end

s=ifftshift(s);                           %对s进行反FFT移动

s=im2uint8(real(ifft2(s)));  %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数

subplot(1,2,2);                           %创建图形图像对象

imshow(s);                                %显示GHPF滤波后的图像

title('GHPF滤波后的图像(d=10) ');       %为图像添加标题

运行结果:

3、反锐化掩模法

[O,Cmap]=imread('eight.tif');  %读取MATLAB中的名为eight的图像 

I=im2double(O);

figure,subplot(1,2,1);

imshow(I);  title('原始图像');

M=[1 1 1;1 1 1;1 1 1]/9;

J2=filter2(M,I);

J3=I-J2;

subplot(1,2,2);

imshow(J3);

title('反锐化掩模法');

运行结果:

结 论:

图像平滑往往使图像中的边界、轮廓变的模糊,为了减少这类不利效果的影响,这就需要利用图像锐化技术,使图像的边缘变的清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。微分运算是求信号的变化率,有加强高频分量的作用,从而使图像轮廓清晰。因此需要对图像的某种导数运算是各向同性的,梯度运算符合上述条件。此法的缺点是增强后的图像仅显示灰度变换比较剧烈的边缘轮廓,而灰度变化平缓的区域呈现一片黑色,大量信息丢失。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。图像中的边缘与图像频谱中的高频分量相对应,所以采用高通滤波让高频分量顺利通过,而对低频分量,从而实现图像的锐化。

掩模法是指将原始图像乘以一个放大系数,然后减去低通图像构成一幅高频增强图像,这样的图像恢复了部分高通滤波时丢失的低频成分,使得最终结果与原始图像更为接近。

三、编写程序完成同态滤波的算法,得出结论。

I=imread('eight.tif');                  %读取图像 

figure,subplot(2,2,1);

imshow(I);               %显示图像 

title('原始图像'); 

I=double(I); 

f=fft2(I);                              %计算图像I的傅里叶变换 

g=fftshift(f);                %将图像频谱中心从矩阵原点移到矩阵的中心 

[M,N]=size(f); 

n1=floor(M/2); 

n2=floor(N/2);                          %计算频率原点 

 

%低通滤波 

d0=35;                                  %设置低通滤波截断频率 

for i=1:M 

    for j=1:N 

        d=sqrt((i-n1)^2+(j-n2)^2);      %计算各个点到频率原点的距离 

if d<=d0

            h1=1; 

        else 

            h1=0; 

        end 

        g1(i,j)=h1*g(i,j); 

    end 

end 

g1=ifftshift(g1); 

g1=uint8(real(ifft2(g1))); 

%高通滤波 

d0=3; 

for i=1:M 

    for j=1:N 

        d=sqrt((i-n1)^2+(j-n2)^2); 

if d<=d0

            h2=0; 

        else 

            h2=1; 

        end 

        g2(i,j)=h2*g(i,j); 

    end 

end 

g2=ifftshift(g2); 

g2=uint8(real(ifft2(g2)));  

 

%巴特沃斯同态滤波 

d0=3;                                 %设置截断频率 

Rh=2;                                 %设置高频增益 

Rl=0.5;                               %设置低频增益 

c=1.4;                               %设置用来控制滤波器函数斜面锐化的常数c 

n=1; 

for i=1:M 

    for j=1:N 

        d=sqrt((i-n1)^2+(j-n2)^2); 

        h3=(Rh-Rl)*(1/(1+d0/(c*d)))^(2*n)+Rl; 

        g3(i,j)=h3*g(i,j); 

    end 

end 

g3=ifftshift(g3); 

g3=uint8(real(ifft2(g3))); 

subplot(222);imshow(g3); 

title('巴特沃斯同态滤波后的图像'); 

 

%指数同态滤波 

d0=3; 

Rh=4; 

Rl=0.5; 

c=3.8; 

n=1; 

for i=1:M 

    for j=1:N 

        d=sqrt((i-n1)^2+(j-n2)^2); 

        h4=(Rh-Rl)*exp(-c*(d0/d))^n+Rl; 

        g4(i,j)=h4*g(i,j); 

    end 

end 

g4=ifftshift(g4); 

g4=uint8(real(ifft2(g4))); 

subplot(223);imshow(g4); 

title('指数同态滤波后的图像'); 

 

%高斯同态滤波 

d0=3; 

Rh=4; 

Rl=0.5; 

c=3.5; 

n=1; 

for i=1:M 

    for j=1:N 

        d=sqrt((i-n1)^2+(j-n2)^2); 

        h5=(Rh-Rl)*(1-exp(-c*(d/d0)^(2*n)))+Rl; 

        g5(i,j)=h5*g(i,j); 

    end 

end 

g5=ifftshift(g5); 

g5=uint8(real(ifft2(g5))); 

subplot(224);imshow(g5); 

title('高斯同态滤波后的图像');

运行结果:

结 论:

同态滤波是把频率过滤和灰度变换结合起来的一种图像处理方法,它依靠图像的照度/反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。在同态滤波消噪中,先利用非线性的对数变换将乘性的噪声转化为加性的噪声。用线性滤波器消除噪声后再进行非线性的指数反变换以获得原始的无噪声图像。

增强后的图像是由分别对应照度分量与反射分量的两部分叠加而成。因为一般照度分量在空间缓慢变化,而反射分量在不同物体的交界处急剧变化,所以图像对数的傅里叶变换后的低频部分主要对应照度分量,而高频部分主要对应反射分量,因此可以设计一个对傅里叶变换的高频和低频分量影响不同的滤波函数H(u,v),使其在一方面减弱低频而另一方面加强高频,最终结果是同时压缩了图像整体的动态范围和增加了图像相邻各部分之间的对比度。

文档

数字图像处理matlab代码

一、编写程序完成不同滤波器的图像频域降噪和边缘增强的算法并进行比较,得出结论。1、不同滤波器的频域降噪1.1理想低通滤波器(ILPF)I1=imread('eight.tif');%读取图像I2=im2double(I1);I3=imnoise(I2,'gaussian',0.01);I4=imnoise(I3,'salt&pepper',0.01);figure,subplot(1,3,1);imshow(I2)%显示灰度图像title('原始图像');%为图像添加标题subplot(1,3
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top