数字图像处理 MATLAB上机作业(DOC)
- 格式:doc
- 大小:742.00 KB
- 文档页数:17
3.1I=imread('bmp.bmp'); %把一个BMP灰度图像读入到变量I中I1=im2double(I); %图像灰度值的双精度化figure,imhist(I1); %打开一个新图形窗口来显示直方图I2=imadjust(I1,[0 0.3],[0 1]); %把图像的灰度范围从[0,0.3]拉伸到[0,1] figure,imshow(I2); %打开一个新图形窗口显示增强后的图像figure,imhist(I2); %打开一个新图形窗口显示增强后的直方图3.2I=imread('lf.bmp'); imshow(I);%读入并显示一幅BMP频谱图像I1=double(I);%双精度化I2=log(I1+1);%对数变换I3=mat2gray(I2);%把图像的灰度范围变换为[0 1]范围figure,imshow(I3); %打开一个新的图形窗口显示减少动态范围后的频谱图像3.4I=imread('fj.bmp'); I=rgb2gray(I);imshow(I);title('原始图像');%读入并显示一幅灰度图像figure,imhist(I);title('原始直方图');%打开一个新的图形窗口显示原始图像的直方图[I1,T]=histeq(I);%直方图均衡化figure,imshow(I1);title('均衡化后'); %打开一个新的图形窗口显示均衡化后的图像figure,imhist(I1);title('均衡化后直方图');%打开一个新的图形窗口显示均衡化后的直方图figure,plot((0:255)/255,T);title('变换曲线');%打开一个新的图形窗口画出变换曲线3.6I=imread('fj.bmp'); I=rgb2gray(I);imshow(I);title('原始图像');%读入并显示一幅灰度图像figure,imhist(I);title('原始直方图');%打开一个新的图形窗口显示原始图像的直方图[I1,T]=histeq(I);%直方图均衡化figure,imshow(I1);title('均衡化后'); %打开一个新的图形窗口显示均衡化后的图像figure,imhist(I1);title('均衡化后直方图');%打开一个新的图形窗口显示均衡化后的直方图figure,plot((0:255)/255,T);title('变换曲线');%打开一个新的图形窗口画出变换曲线3.7clc;clear all;I=imread('hua.bmp');imshow(I),title('hua.bmp'); %把一个图形窗口划分为1×2矩形显示区域,在图形窗口的左侧区域显示图像II1=double(I);%数据类型转换,不支持无符号整型计算[M,N]=size(I1);%计算图像的高和宽%产生高斯型高通滤波器m=round(M/2);n=round(N/2);%四舍五入取整hh=1.035;hl=0.7;c=3;for i=1:Mfor j=1:Nd(i,j)=sqrt((i-m)^2+(j-n)^2);endendd0=median(median(d));for i=1:Mfor j=1:Nh(i,j)=(hh-hl)*(1-exp(-c*(d(i,j)/d0)))+hl;%高通滤波器endend[i,j]=meshgrid(1:M,1:N);figure,mesh(h); title('highpass filter');%同态滤波h=h';I2=log(I1+1);%对数变换I3=fft2(I2);%傅立叶变换I3=fftshift(I3);%频谱中心化I3=reshape(I3,384,1152);I4=I3.*(h);%滤波I4=reshape(I4,384,384,3);I4=ifftshift(I4); %频谱反中心化I4=ifft2(I4);%傅立叶反变换I5=exp(I4-1);%指数变换I6=real(I5);%取幅值I7=mat2gray(I6);%恢复变换后的数值范围figure,imshow(I7);title('adjusted image intensity value');%在图形窗口的右侧区域显示结果图像3.8I=imread('lf.bmp');I=rgb2gray(I);imshow(I);%读入和显示一幅原始图像title('original image') %给图像加标题X=grayslice(I,16);%将灰度范围分成16层% X=grayslice (I,n)用阈值1/n, 2/n, ..., (n-1)/n 阈值化灰度图像I ,并返回索引图像X。
数字图像第四讲作业1.设计一个程序对受到高斯白噪声及椒盐噪声干扰的图像进行3x3,5x5邻域的平均平滑以及中值滤波. (添加噪声参看imnoise函数, 空域卷积可用imfilter2函数实现)。
分析:1.邻域平均平滑可以采用imfilter函数,选择正确的卷积核就可以进行相应的邻域平均平滑操作了。
3x3的卷积核为:H1=1/8*[1 1 11 0 11 1 1];5x5的卷积核为:H2=1/24*[1 1 1 1 11 1 1 1 11 1 0 1 11 1 1 1 11 1 1 1 1 ];2.中值平滑可以先编写中值平滑子函数zhongzhi(),然后在主函数中调用即可。
以3*3中值平滑为例来分析其操作过程,3*3中值平滑就是将以各项素为中心的9个像素值的中间值作为平滑后的新的像素值赋给该像素。
因此可以通过I(i-1:i+1,j-1:j+1)得到对应于I(i,j)点的九个像素值,然后在由median函数可求出这九个值的中值,赋给新矩阵的(i,j)点即可。
注意I(i-1:i+1,j-1:j+1)操作可能会有i-1=0,j-1=0或i+1、j+1大于矩阵最大行列数的情况,从而出现错误。
在这里我的处理是在I矩阵的外围补上一圈0,即出现上述情况时像素值以0来代替。
具体代码为:I0=zeros(m+2,n+2);for i=2:m+1for j=2:n+1I0(i,j)=I(i-1,j-1);endend同理,5*5的中值平滑也可以同样操作,只不过是在外围补上两圈零而已。
代码及注释如下:主函数:clearI = imread('Lenna.bmp');J=imnoise(I,'gaussian');K=imnoise(I,'salt & pepper');%H1为3*3邻域平滑的卷积核,H2为5*5邻域平滑的卷积核H1=1/8*[1 1 11 0 11 1 1];H2=1/24*[1 1 1 1 11 1 1 1 11 1 0 1 11 1 1 1 11 1 1 1 1 ];J1=imfilter(J,H1); %高斯白噪声的3*3邻域平滑J2=imfilter(J,H2); %高斯白噪声的5*5邻域平滑K1=imfilter(K,H1); %椒盐噪声的3*3邻域平滑K2=imfilter(K,H2); %椒盐噪声的5*5邻域平滑J3=zhongzhi(J,3); %高斯白噪声的3*3中值平滑J4=zhongzhi(J,5); %高斯白噪声的5*5中值平滑K3=zhongzhi(K,3); %椒盐噪声的3*3中值平滑K4=zhongzhi(K,5); %椒盐噪声的5*5中值平滑subplot(131);imshow(J);title('高斯白噪声');subplot(132);imshow(J1);title('高斯白噪声的3*3邻域平滑');subplot(133);imshow(J2);title('高斯白噪声的5*5邻域平滑'); figuresubplot(131);imshow(J);title('高斯白噪声');subplot(132);imshow(J3);title('高斯白噪声的3*3中值平滑'); subplot(133);imshow(J4);title('高斯白噪声的5*5中值平滑'); figuresubplot(131);imshow(K);title('椒盐噪声');subplot(132);imshow(K1);title('椒盐噪声的3*3邻域平滑'); subplot(133);imshow(K2);title('椒盐噪声的5*5邻域平滑'); figuresubplot(131);imshow(K);title('椒盐噪声');subplot(132);imshow(K3);title('椒盐噪声的3*3中值平滑'); subplot(133);imshow(K4);title('椒盐噪声的5*5中值平滑');中值平滑子函数zhongzhi()如下:function J=zhongzhi(I,k)[m,n]=size(I);if k==3 %3*3的中值平滑I0=zeros(m+2,n+2);for i=2:m+1for j=2:n+1I0(i,j)=I(i-1,j-1); %将到操作的图像矩阵I外围不上0 endfor i=2:m+1for j=2:n+1a=I0(i-1:i+1,j-1:j+1);b=a(1:9); %将3*3的矩阵化成1*9的矩阵,便于median操作J(i-1,j-1)=median(b); %取中值,保存为平滑后矩阵J的i-1行、j-1列endendelse k==5 %5*5的中值平滑I0=zeros(m+4,n+4);for i=3:m+2for j=3:n+2I0(i,j)=I(i-2,j-2);endendfor i=3:m+2for j=3:n+2a=I0(i-2:i+2,j-2:j+2);b=a(1:25);J(i-2,j-2)=median(b);endendJ=uint8(J);运行结果如下:1)加高斯白噪声后图像,及3*3、5*5邻域平滑2)加高斯白噪声后图像,及3*3、5*5中值滤波3)加椒盐噪声后图像,及3*3、5*5邻域平滑4)加椒盐噪声后图像,及3*3、5*5中值平滑结论:平滑滤波和中值滤波对噪声都有一定的抑制作用,且阶数越高滤波效果越好,中值滤波对椒盐噪声的抑制效果特别明显,中值滤波效果比平滑滤波好一些,轮廓比较清晰。
第一部分数字图像处理实验一图像的点运算实验1.1 直方图一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。
三.程序设计在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察图像matlab环境下的直方图分布。
(a)原始图像 (b)原始图像直方图六.实验报告要求1、给出实验原理过程及实现代码;2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。
实验1.2 灰度均衡一.实验目的1.熟悉matlab图像处理工具箱中灰度均衡函数的使用;2.理解和掌握灰度均衡原理和实现方法;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。
I=imread('cameraman.tif');%读取图像subplot(2,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(2,2,3),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题a=histeq(I,256); %直方图均衡化,灰度级为256subplot(2,2,2),imshow(a) %输出均衡化后图像title('均衡化后图像') %在均衡化后图像中加标题subplot(2,2,4),imhist(a) %输出均衡化后直方图title('均衡化后图像直方图') %在均衡化后直方图上加标题四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
大作业指导书题目:数字图像处理院(系):物联网工程学院专业: 计算机班级:计算机1401-1406指导老师:学号:姓名:设计时间: 2016-2017学年 1学期摘要 (3)一、简介 (3)二、斑点数据模型.参数估计与解释 (4)三、水平集框架 (5)1.能量泛函映射 (5)2.水平集传播模型 (6)3.随机评估方法 (7)四、实验结果 (8)五、总结 (11)基于水平集方法和G0模型的SAR图像分割Abstract(摘要)这篇文章提出了一种分割SAR图像的方法,探索利用SAR数据中的统计特性将图像分区域。
我们假设为SAR图像分割分配参数,并与水平集模型相结合。
分布属于G分布中的一种,处于数据建模的目的,它们已经成功的被用于振幅SAR图像中不同区域的建模。
这种统计数据模型是驱动能量泛函执行区域映射的基础,被引用到水平集传播数值方案中,将SAR 图像分为均匀、异构和极其异构区域。
此外,我们引入了一个基于随机距离和模型的评估过程,用于量化我们方法的鲁棒性和准确性。
实验结果表明,我们的算法对合成和真实SAR 数据都具有准确性。
+简介1、Induction(简介)合成孔径雷达系统是一种成像装置,采用相干照明比如激光和超声波,并会受到斑点噪声的影响。
在SAR图像处理过程中,返回的是斑点噪声和雷达切面建模在一起的结果。
这个积性模型(文献[1])因包含大量的真实SAR数据,并且在获取过程中斑点噪声被建模为固有的一部分而被广泛应用。
因此,SAR图像应用区域边界和目标检测变得更加困难,可能需要斑点去除。
因此,斑点去除是必需的,有效的方法可以在文献[2][3][4][5][6][7][8][9][10]中找到。
对于SAR图像分割,水平集方法构成一类基于哈密顿-雅克比公式的重要算法。
水平集方法允许有效的分割标准公式,从文献[12]中讨论的传播函数项可以得到。
经典方法有着昂贵的计算成本,但现在的水平集的实现配置了有趣的低成本的替换。
练习一常用MATLAB图像处理命令一、练习目的1、熟悉并掌握MATLAB工具的使用;2、实现图像的读取、显示、代数运算和简单变换。
二、练习环境Windows操作系统Matlab 6.5或以上应用软件三、练习内容1、图像文件的读写(1)imread函数用来实现图像文件的读取。
输入以下程序:A=imread('文件名.扩展名');%用imread函数来读入图像注:设置路径imshow(A);%用imshow函数来显示图像得到的结果如图:(2)imfinfo函数用来查询图像文件信息。
输入以下程序:info=imfinfo('文件名.扩展名');% 用imfinfo函数查询图像文件信息得到:info =Filename: '文件名.扩展名'(4)imshow函数用来显示图像。
刚才介绍imread函数时已使用此函数。
(5)colorbar函数将颜色条添加到坐标轴对象中。
输入以下程序:RGB=imread('***');%图像读入I=rgb2gray(RGB);%把RGB图像转换成灰度图像imshow(I),colorbar('vert')% 将颜色条添加到坐标轴对象中得到如图:2、图像处理的基本操作一、图像代数运算(1)imadd函数实现两幅图像的相加或者给一幅图像加上一个常数。
给图像每个像素都增加亮度的程序如下:I=imread('***');J=imadd(I,100);%给图像增加亮度subplot(1,2,1),imshow(I) %填充subplot(1,2,2),imshow(J)结果如图5。
(2)imsubtract函数实现从一幅图像中减去一个常数。
输入以下程序实现从一幅图像中减去一个常数:(3)immultiply实现两幅图像的相乘或者一幅图像的亮度缩放(图像乘以小于1或大于1的参数,比较效果)。
数字图像处理大作业学号:姓名:班级:数字图像处理作业用自己拍摄的图像,完成以下作业:1,用Matlab语言完成如下实验:1)打开一个BMP文件2)将其局部区域的灰度值进行改变3)另存为一个新的BMP文件2,Matlab编程实现图像傅立叶高通、低通滤波,给出算法原理及实验结果。
3,找一幅曝光不足的灰度(或彩色)图像,用Matlab按照直方图均衡化的方法进行处理。
4,用Matlab打开一幅图像,添加椒盐、高斯噪声,然后使用邻域平均法、中值滤波法进行平滑。
5,用Matlab打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果。
以上作业,严禁抄袭。
作业请注明学号,姓名,班级,电话号码。
将纸质版于2012-06-06晚7:00交至B529房间。
1,用Matlab语言完成如下实验:1)打开一个BMP文件2)将其局部区域的灰度值进行改变3)另存为一个新的BMP文件%文件名为way01.bmp 源程序如下:clear all;f=imread('way.bmp');f1=rgb2gray(f); %ת»»Îª»Ò¶Èͼfigure(1);imshow(f1);imwrite(f1,'way01.bmp');f1(100:150,100:120)=256; %¾Ö²¿¸Ä±ä»Ò¶ÈÖµfigure(2);imshow(f1);运行结果为:注:源文件名为way.jpg2,Matlab编程实现图像傅立叶高通、低通滤波,给出算法原理及实验结果。
1)傅里叶高通滤波:源程序为:clear all;I=imread('way01.bmp');figure(1);imshow(I);I=double(I);f=fft2(I);g=fftshift(f);[M,N]=size(g);n1=floor(M/2);n2=floor(N/2);d0=5;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);if d>=d0h1=1;elseh1=0;endg1(i,j)=(h1+0.5)*g(i,j);endendg2=ifftshift(g1);g3=uint8(real(ifft2(g2))); figure(2);imshow(g3);title('¸ßͨÂ˲¨½á运行结果为:2)傅里叶低通滤波:源程序为:clear all;I=imread('way01.bmp');figure(1);imshow(I);I=double(I);f=fft2(I); g=fftshift(f); [M,N]=size(g);n1=floor(M/2);n2=floor(N/2);d0=30;for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);if d<=d0h1=1;elseh1=0;endg1(i,j)=(h1+0)*g(i,j);endendg2=ifftshift(g1);g3=uint8(real(ifft2(g2))); figure(2);imshow(g3);title('µÍͨÂ˲¨½á¹û')运行结果为:3,找一幅曝光不足的灰度(或彩色)图像,用Matlab按照直方图均衡化的方法进行处理。
数字图像处理上机作业一1.设计一个程序,绘制出一幅灰度图象的直方图。
Solution:代码及代码的说明:%作用:返回灰度矩阵a,并画出直方图function a=zhifangtu(x) % x为要分析的图像名加单引号I=imread(x);b=size(I);a=zeros(1,256); % a为一个1*256的矩阵分别记录灰度为0到255的像%的个数for m=1:b(1) %两个for语句将整张图的所有像素都扫描一遍for n=1:b(2)a(I(m,n)+1)= a(I(m,n)+1)+1; %将灰度为I(m,n)的像素个数存储在%a(I(m,n)+1)中,因为matlab里没有%a(0)endendn=0:255;bar(n,a);%画出直方图s=sum(a) %查看直方图的总的面积等于这张图的总像素值实验结果及分析:在命令窗口中输入zhifangtu('Lenna.bmp')返回s =262144,以及灰度矩阵a,同时有如下直方图输出:分析及结论:在命令窗口中用size命令可查知Lenna.bmp是512*512的,返回的s =262144恰等于512*512,说明所编的直方图的程序恰将所有的像素点都统计了,直方图的总面积等于像素总数。
直方图的作用也就是将一张图中不同灰度值对应像素数的一个统计。
在这个程序的编写中应注意a(I(m,n)+1)= a(I(m,n)+1)+1 不能写成a(I(m,n))= a(I(m,n))+1 ,应为在matlab中矩阵表示没有a(0),若某个像素点的灰度值是0,就会出错,故应写成a(I(m,n)+1)= a(I(m,n)+1)+1形式。
2.对同一场景但模糊程度不一样的三张数字图像绘制出其直方图, 计算每一幅图象所有像素灰度的方差。
图象的清晰度同灰度方差什么关系?Solution:代码及代码的说明:%作用:绘出模糊程度不一样的三张数字图像的直方图,并输出各自灰度方差I1=imread('tu1.bmp');I1=rgb2gray(I1); %转换为灰度图像imwrite(I1,'tu0.bmp'); %由于直方图只能对灰度图作用,故先将其转为灰度图subplot(2,2,1);zhifangtu('tu0.bmp');title('tu1直方图'); %绘出tu1.bmp的直方图k1=size(I1);I1=single(I1);I1=(I1-mean(mean(I1)')).^2; %个像素灰度值减去平均灰%值后再平方t1=sum(sum(I1)')/k1(1)/k1(2), %输出tu1.bmp的所有像素灰度的方差subplot(2,2,2);zhifangtu('tu2.bmp');title('tu2直方图'); %绘出tu2.bmp的直方图I2=imread('tu2.bmp');k2=size(I2);I2=single(I2);I2=(I2-mean(mean(I2)')).^2; %个像素灰度值减去平均灰度值后再%平方t2=sum(sum(I2)')/k2(1)/k2(2), %输出tu2.bmp的所有像素灰度的方差subplot(2,2,3);zhifangtu('tu3.bmp');title('tu3直方图'); %绘出tu3.bmp的直方图I3=imread('tu3.bmp');k3=size(I3);I3=single(I3);I3=(I3-mean(mean(I3)')).^2; %个像素灰度值减去平均灰度值%后再平方t3=sum(sum(I3)')/k3(1)/k3(2), %输出tu3.bmp的所有像素灰度的方差figure;subplot(2,2,1);imshow('tu1.bmp');title('tu1图'); %绘出tu1.bmp的图subplot(2,2,2);imshow('tu2.bmp');title('tu2图'); %绘出tu1.bmp的图subplot(2,2,3);imshow('tu3.bmp');title('tu3图'); %绘出tu1.bmp的图实验结果及分析:上述代码执行后,输出t1 = 7.3027e+003,t2= 6.5808e+003,t3=5.4860e+003;同时输出如下直方图:原始图:分析及结论:tu1,tu2,tu3三幅图是依次变模糊的,三张图的所有像素灰度方差依次为t1 = t1 = 7.3027e+003,t2= 6.5808e+003,t3=5.4860e+003,它们是依次变小的,可知图象的清晰度随灰度方差的变小而变得模糊。
实验目的:1)熟悉MATLAB语言关于图像处理的基本操作。
2)了解MATLAB打开和显示图像,并完成图像格式的转换;实验任务:实验前准备工作:所使用的图像文件都保存在MATLAB安装目录下的\toolbox\images\imdemos子目录下。
(MATLAB默认处理当前工作目录下的图像文件)1)图像的显示:运用MATLAB图像处理工具箱中的imread函数分别读入灰度图像pout.tif、二值图像blobs.png、索引图像trees.tif和RGB图像peppers.png,观察相应的图像矩阵,并运用imshow 函数显示相应图像。
2)读取图像moon.tif,分别按256灰度级显示、按8灰度级显示、按指定灰度范围[64,128]显示。
3)图像的格式转换:用im2bw将灰度图像pout.tif转化为二值图像,并且用imshow显示出来观察图像的特征;用rgb2gray将RGB图像peppers.png转化为灰度图像,并且用imshow显示出来观察图像的特征。
4)对一个RGB彩色图像peppers.png,分别抽取其R、G、B三个分量层,并显示各层图像。
5)保存图像:用imwrite函数将tif图像canoe.tif保存为jpg图像,并保存在D盘附:●函数imread可以从任何MATLAB支持的图像文件格式中,以任意位深度读取一幅图像。
格式为:[X,MAP]=imread('FILENAME.FMT'),其中:FILENAME-为需要读入的图像文件名称,FMT-为图像格式。
●imshow(I)I 为所显示的灰度图像的数据矩阵●imshow(I, n)n为整数,显示灰度级为n的图像,n 缺省为256。
●imshow(I, [low high])I为要显示的图像矩阵。
[low high]为指定显示灰度图像的灰度范围。
高于high的像素被显示成白色;低于low的像素被显示成黑色;介于High和low之间的像素被按比例拉伸后显示为各种等级的灰色。
数字图像处理实验报告指导老师:学号姓名班级1.产生右图所示图像f1(m,n),其中图像大小为256×256,中间亮条为128×32,暗处=0,亮处=100。
对其进行FFT:①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图;②若令f2(m,n)=(-1)(m+n)f1(m,n),重复以上过程,比较二者幅度谱的异同,简述理由;③若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较;④若将f1(m,n)顺时针旋转90度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),试显示FFT(f5)的幅度谱,并指出其与FFT(f1)和FFT(f4)的关系;⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱。
f1=zeros(256,256);for i=64:1:192for j=122:1:144f1(i,j)=100;endendfft_f1=fft2(f1);fft_f1=abs(fft_f1);tmax=fft_f1(1,1);tmin=fft_f1(1,1);for i=1:256for j=1:256if tmax<fft_f1(i,j)tmax=fft_f1(i,j);endif tmin>fft_f1(i,j)tmin=fft_f1(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f1(i,j)=255*(fft_f1(i,j)-tmin)/delta;endendsubplot(1,2,1);imshow(f1);title('原图');subplot(1,2,2);imshow(fft_f1);title('原图的幅度谱');for i=1:256for j=1:256f2(i,j)=(-1)^(i+j)*f1(i,j);endendfft_f2=fft2(f2);fft_f2=abs(fft_f2);tmax=fft_f2(1,1);tmin=fft_f2(1,1);for i=1:256for j=1:256if tmax<fft_f2(i,j)tmax=fft_f2(i,j);endif tmin>fft_f2(i,j)tmin=fft_f2(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f2(i,j)=255*(fft_f2(i,j)-tmin)/delta;endendsubplot(2,2,1);imshow(f1);title('原图');subplot(2,2,2);imshow(fft_f1);title('原图的幅度谱');subplot(2,2,3);imshow(f2);title('原图中心化');subplot(2,2,4);imshow(fft_f2);title('原图中心化的幅度谱');f3=imrotate(f2,-90,'bilinear');fft_f3=fft2(f3);fft_f3=abs(fft_f3);tmax=fft_f3(1,1);tmin=fft_f3(1,1);for i=1:256for j=1:256if tmax<fft_f3(i,j)tmax=fft_f3(i,j);endif tmin>fft_f3(i,j)tmin=fft_f3(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f3(i,j)=255*(fft_f3(i,j)-tmin)/delta;endendsubplot(2,2,1);imshow(f2);title('原图中心化');subplot(2,2,2);imshow(fft_f2);title('原图中心化的幅度谱');subplot(2,2,3);imshow(f3);title('旋转后的图像');subplot(2,2,4);imshow(fft_f3);title('旋转后的幅度谱');图像旋转90度后,幅度谱也旋转了90度。
f4=imrotate(f1,-90,'bilinear');f5=f1+f4;fft_f5=fft2(f5);fft_f5=abs(fft_f5);tmax=fft_f5(1,1);tmin=fft_f5(1,1);for i=1:256for j=1:256if tmax<fft_f5(i,j)tmax=fft_f5(i,j);endif tmin>fft_f5(i,j)tmin=fft_f5(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f5(i,j)=255*(fft_f5(i,j)-tmin)/delta;endendsubplot(2,2,1);imshow(f1);title('原图');subplot(2,2,2);imshow(fft_f1);title('原图的幅度谱');subplot(2,2,3);imshow(f5);title('相加后的图像');subplot(2,2,4);imshow(fft_f5);title('相加后的幅度谱');原图与旋转90度后的图像进行叠加后,相应的幅度谱也进行叠加。
f6=f2+f3;fft_f6=fft2(f6);fft_f6=abs(fft_f6);tmax=fft_f6(1,1);tmin=fft_f6(1,1);for i=1:256for j=1:256if tmax<fft_f6(i,j)tmax=fft_f6(i,j);endif tmin>fft_f6(i,j)tmin=fft_f6(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f6(i,j)=255*(fft_f6(i,j)-tmin)/delta;endendsubplot(2,2,1);imshow(fft_f2);title('F2');subplot(2,2,2);imshow(fft_f3);title('F3');subplot(2,2,3);imshow(fft_f5);title('F5');subplot(2,2,4);imshow(fft_f6);title('F6');FFT(2)和FFT(3)相差90度。
FFT(6)是FFT(5)的中心化。
2.产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3*3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。
a=zeros(64,64);f=zeros(256,256);for i=1:1:32for j=1:1:32a(i,j)=1;endendfor i=33:1:64for j=33:1:64a(i,j)=1;endendfor i=1:64:256for j=1:64:256f(i:i+63,j:j+63)=a;endendimshow(f)for i=2:1:255for j=2:1:255a=[f(i-1,j-1),f(i-1,j),f(i-1,j+1),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),f(i+1,j),f(i+1, j+1)];b=[f(i-1,j),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j)];c=sort(a);d=sort(b);zlf1(i,j)=c(5);zlf2(i,j)=d(5);endendsubplot(1,3,1);imshow(f);title('原图像');subplot(1,3,2);imshow(zlf1);title('方形中值滤波后图像') subplot(1,3,3);imshow(zlf2);title('十字形中值滤波后图像')for i=2:1:255for j=2:1:255jlf4(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1))/4;jlf8(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1 ,j+1))/8;jjlf4(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1)+f(i,j))/5;jjlf8(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+ 1,j+1)+f(i,j))/9;endendjlf4=round(jlf4);jlf8=round(jlf8);jjlf4=round(jjlf4);jjlf8=round(jjlf8);subplot(2,2,1);imshow(jlf4);title('4邻域平均滤波后图像');subplot(2,2,2);imshow(jlf8);title('8邻域平均滤波后图像')subplot(2,2,3);imshow(jjlf4);title('4邻域加权平均滤波后图像')subplot(2,2,4);imshow(jjlf8);title('8邻域加权平均滤波后图像')放大后可看出区别3.产生教材104页题图4.16所示的灰度图像(白为255,黑为0),分别加入高斯白噪声和椒盐噪声,再分别进行3*3的平均滤波和中值滤波,显示原图像、加噪图像和滤波结果图像,并比较四种滤波结果。
f=zeros(256,256);a=255*ones(210,7);for i=0:1:8f(24:233,(29+24*i):(29+24*i+6))=a;endf1=imnoise(f,'gaussian',0,0.1);%加入均值为零方差为0.1的高斯噪声f2=imnoise(f,'salt & pepper',0.1);%加入噪声密度为0.1的椒盐噪声for i=2:1:255for j=2:1:255a=[f1(i-1,j-1),f1(i-1,j),f1(i-1,j+1),f1(i,j-1),f1(i,j),f1(i,j+1),f1(i+1,j-1),f1(i+1,j ),f1(i+1,j+1)];b=[f2(i-1,j-1),f2(i-1,j),f2(i-1,j+1),f2(i,j-1),f2(i,j),f2(i,j+1),f2(i+1,j-1),f2(i+1,j ),f2(i+1,j+1)];c=sort(a);d=sort(b);zlf1(i,j)=c(5); %中值滤波zlf2(i,j)=d(5);%中值滤波jlf8(i,j)=(f1(i-1,j-1)+f1(i-1,j)+f1(i-1,j+1)+f1(i,j-1)+f1(i,j+1)+f1(i+1,j-1)+f1(i+1,j )+f1(i+1,j+1)+f1(i,j))/9;%平均滤波jjlf8(i,j)=(f2(i-1,j-1)+f2(i-1,j)+f2(i-1,j+1)+f2(i,j-1)+f2(i,j+1)+f2(i+1,j-1)+f2(i+1, j)+f2(i+1,j+1)+f2(i,j))/9;%平均滤波endendsubplot(2,4,1);imshow(f);title('原图像');subplot(2,4,2);imshow(f1);title('高斯噪声污染后的图像');subplot(2,4,3);imshow(zlf1);title('中值滤波后的图像');subplot(2,4,4);imshow(jlf8);title('平均滤波后的图像');subplot(2,4,5);imshow(f);title('原图像');subplot(2,4,6);imshow(f2);title('椒盐噪声污染后的图像');subplot(2,4,7);imshow(zlf2);title('中值滤波后的图像');subplot(2,4,8);imshow(jjlf8);title('平均滤波后的图像');5.(第4、5题选做一题)编程实现教材214页所给图像门限化分割的迭代阈值算法,实现对某一灰度图像的二值化。