第一篇:《数字图像处理》实验教案
数 字 图 像 处 理
实 验 指 导 书
信息科学与工程学院电子系
二○○六年
前
言
数字图像处理是研究数字图像处理的基本理论、方法及其在智能化检测中应用的学科,是电子信息类本科专业的专业课。
本课程侧重于数字图像的基本处理,并对图像分析的基本理论和实际应用进行系统介绍;目的是使学生系统掌握数字图像处理的基本概念、原理和实现方法,学习图像分析的基本理论、典型方法和实用技术,具备解决通信领域的图像相关问题的初步能力,为今后的研究与开发打下扎实的基础。
目
录
实验一 常用的图像文件格式与格式转换和图像矩阵的显示方实验二 实验三
法 …………………………………………………………2
傅立叶变换……………………………………………………4 图像增强及编程处理…………………………………………5
实验一 常用的图像文件格式与格式转换和图像矩阵的显示方法
1. 实验目的
熟悉Matlab语言的初步使用;
熟悉常用的图像文件格式与格式转换;
熟悉图像矩阵的显示方法(灰度、索引、黑白、彩色); 熟悉图像矩阵的格式转换 2. 实验内容
练习图像读写命令imread和imwrite并进行图像文件格式间的转换。特别是索引图像与1,4,8,16比特图像的存储与转换。
熟悉下列模块函数 Image file I/O.imread
-Read image file.imwrite
Create and display image
imagesc
Make movie from multiframe indexed image.imshow
-Display image.subimage
-Display multiple images in single figure.truesize
-Adjust display size of image.warp
-Display image as texture-mapped surface.zoom
-Zoom in and out of image or 2-D plot.3. 实验步骤
a.Load cameraman.tif image from your hard disk(using function imread).b.Show the image in a figure window(using function image or imshow).c.Draw a brightness bar on the right side of the image(using function colorbar).d.Get image data from the current figure(axes)(using function getimage).e.Show the gray level of the image between 64 to 128(using function imagesc).f.Make a movie from a 4-D image(load mri, make the movie by immovie, then show movie by function movie).object.g.Draw the cameraman image on a cylinder(using function warp).Question: how to show the cameraman like this
Requirement: write a report to do the experiment from a to g.实验二
傅立叶变换
1.实验目的
熟悉傅立叶变换的概念和原理; 理解Fourier变换的意义。
2.实验内容
用Fourier变换算法对图像进行Fourier变换; 评价人眼对图像幅频特性和相频特性的敏感度。
3.实验步骤
<1>产生如图所示图像f1(x,y)(128×128 大小,暗处=0,亮处=255),用MATLAB中的fft2函数对其进行FFT;
<2>同屏显示原图f1和FFT(f1)的幅度谱图;
<3>若令f2(x,y)=(-1)
xy f1(x,y),重复以上过程,比较两幅图像的幅度谱的异同,简述理由;
<4>若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较;
<5>评价人眼对图像幅频特性和相频特性的敏感度。
4.实验报告
<1>简述实验目的及原理;
<2>给出实验代码,并加以注释; <3>对实验现象加以说明和讨论。
实验三
图像增强及编程处理
1. 实验目的
观察数字图像增强的效果; 熟悉数字图像增强的一般方法;
掌握数字图像增强的一般方法的Matlab编程实现。2. 实验内容
使用Photoshop观察数字图像增强的效果; 练习和掌握图像增强的Matlab编程。
熟悉下列模块函数 Image enhancement.histeq
Adust imae intensity values or colormap.Image noising.imnoise
-Add noise to an image.Image filtering
medfilt2
-Perform 2-D median filtering.ordfilt2
Perform 2-D adaptive noise-removal filtering.3. 实验步骤
<1> 使用Photoshop观察数字图像增强的效果 a.对比度增强
1)在Photoshop中打开一黑白灰度图像文件。
2)在图像菜单中选直方图项,观察原始图像的直方图。
3)在图像菜单调整子菜单中选亮度/对比度项,调节对比度滑块,观察图像变化。
4)在图像菜单中选直方图项,观察处理后图像的直方图,并同(2)中的直方图比较。b.灰度变换
1)在Photoshop中打开一黑白灰度图像文件。
2)在图像菜单中选直方图项,观察原始图像的直方图。3)在图像菜单调整子菜单中选反相项,观察图像变化。
4)在图像菜单中选直方图项,观察处理后图像的直方图,并同(2)中的直方图比较。5)画出灰度变换曲线。
6)在编辑菜单中选返回项,恢复原始图像。
7)在图像菜单调整子菜单中阈值项,调节阈值色阶滑块,观察图像变化。
8)在图像菜单中选直方图项,观察处理后图像的直方图,并同(2)中的直方图比较。9)画出灰度变换曲线。
c.直方图均衡化
1)在Photoshop中打开一黑白灰度图像文件。
2)在图像菜单中选直方图项,观察原始图像的直方图。3)在图像菜单调整子菜单中选色调均化项,观察图像变化。
4)在图像菜单中选直方图项,观察处理后图像的直方图,并同(2)中的直方图比较。
d.图像平滑
1)在Photoshop中打开一黑白灰度图像文件。
2)在图像菜单中选直方图项,观察原始图像的直方图。
3)在滤镜菜单模糊子菜单中选进一步模糊项,观察图像变化。
4)在图像菜单中选直方图项,观察处理后图像的直方图,并同(2)中的直方图比较。5)在编辑菜单中选返回项,恢复原始图像。
6)在滤镜菜单模糊子菜单中选高斯模糊项,观察图像变化。
7)在图像菜单中选直方图项,观察处理后图像的直方图,并同(2)中的直方图比较。8)在Matlab Help菜单中, 选Demos项。
9)打开ToolboxesImage Processing项,选Noise Reduction Filtering,并运行。
10)选图像Blood、噪声类型Salt & Pepper、滤波器类型Median、邻域3x3,比较原始图像、受噪声污染图像、滤波后图像。11)改变参数,重做(10)。
12)选其他图像,重做(10)-(11)。
13)思考何种滤波器对抑制何种类型噪声更有效,邻域大小对抑制噪声效果及图像模糊程度的影响。
<2> 图像增强的Matlab编程
a.Load cameraman.tif image from your hard disk(using function imread).b.Show the image in a figure window.c.Show the histogram of the image(using function imhist).d.Enhance the contrast of the image using histogram equalization.e.Show the histogram of the image after processing.f.Compare the qualities of two images and makes a discussion about them.g.Add noises, such as gaussian, salt&pepper, speckle noise into the image respectively.Compare with the influence of the different Means and Variance.h.Remove the added noise from the image by function medfilt2, ordfilt2 and wiener2 respectively.Compare the qualities of the original images with the processed images and discuss the effect of the methods.Requirement:
Write a report to do the experiment.Make sure the report includes the discussion about the experiment.If the report just is a copy from others, the report will have a zero mark.
第二篇:数字图像处理实验一
实验报告
一、实验原理
1.调用imread函数将图像文件读入图像数组(矩阵)
A=imread(filename,fmt)2.调用imwrite函数将图像文件写入图像数组(矩阵)
imwrite(a,filename,fmt)3.调用imshow函数显示图像
Imshow(I,N)
4.图像的灰度平均值。调用ave=mean2(I)计算图像的均值 5.协方差矩阵。调用Cfg=COV(f,g)计算图像f和图像g的协方差矩阵 图像的灰度标准差。调用SD=STD2(I)的灰度标准差 7.图像的相关系数。调用函数rfg=CORR2(f,g)计算大小相等的两幅图像f和g的相关系数
二、图像及统计数据
原图像的平均灰度值= 77.5170
灰度标准差= 44.2095 灰度图像的平均灰度值= 74.4516
灰度标准差=37.1236 反白图像的平均灰度值= 180.5484
灰度标准差= 37.1236 灰度图像和反白图像的相关系数是
三、程序
I=imread('football.jpg');subplot(2,2,1);imshow(I);J=rgb2gray(I);subplot(2,2,2);imshow(J);Ave=mean2(J)Ave =
74.4516 SD=std2(double(J))SD =
37.1236 s=size(J);all_white=255*ones(s(1),s(2));all_white_uint8=uint8(all_white);K=imsubtract(all_white_uint8,J);subplot(2,2,3);imshow(K);imwrite(K,'football_iverse.jpg');
四、思考题
1.图像统计特征让我们更加了解图像的变换,使图像处理更加方便 2.五、心得体会
这次试验,我学会了使用marlab中的图像处理工具箱中的函数,对每个图像处理函数的功能都有了深入的认识。同时,我掌握了MATLAB的基本应用方法,对图像文件的读/写的方法有了初步认识。总之这次试验让我对MATLAB的图像处理有了一点学习,为更好地学习数字图像处理打下了一定的基础。
第三篇:数字图像处理实验一
一、实验目的及内容 内容: 灰度变换和空间滤波 1.灰度变换
利用imadjust函数(可结合stretchlim函数)对图像对比度拉伸 2.直方图绘制、均衡和匹配
利用imhist,histeq函数完成图2.8及图2.11的功能 3.空间滤波
线性空间滤波:
利用滤波函数imfilter函数完成图2.16中b,c,d,e的图像平滑效果
利用fspecial函数生成average,disk,gaussian滤波器完成图像的平滑效果
利用fspecial函数生成prewitt, sobel,laplacian滤波器完成图像的锐化效果
非线性空间滤波
利用中值滤波函数medfilt2去除椒盐噪声
二、实验原理
①、函数imadjust是一个基本的图像处理工具箱函数,用于对灰度级图像进行灰度变换。
g=imadjust(f,[low_in high_in],[low_out high_out],gamma),该函数将图像f中的灰度值映射为图像g中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。
②、函数imhist是处理图像直方图的核心函数
h=imhist(f,b),其中f为输入图像,h为其直方图,b是用来形成直方图的“容器”的数目。
③、函数histeq是实现直方图匹配的函数
g=histeq(f,hspec),其中f为输入图像,hspec为规定的直方图,g为输出图像,输出图像的直方图近似于指定的直方图hspec。
④、函数imfilter用来实现线性空间滤波
-1-g=imfilter(f,w,filtering_mode,boundary_options,size_options),其中f为输入图像,w为滤波模板,g为滤波后的结果。
用于平滑的滤波器有:’average’,’disk’,’gaussian’ 用于锐化的滤波器有:’laplacian’,’prewit’,’sobel’
三、实验源代码及结果
1、灰度变换、直方图绘制、均衡和匹配 f=imread('anna.jpg')%读取anna.jpg图片 subplot(2,4,1)imshow(f),title('原图')%显示原图
f1=imadjust(f,[0.2 0.5],[ 0 1])%将图片的灰度级别在0.2至0.5之间的部分拉伸
至0到1之间
subplot(2,4,2)imshow(f1),title('灰度拉伸之后')%显示灰度拉伸之后的图片 subplot(2,4,3)imhist(f),title('原图直方图')f2=histeq(f,128)%进行直方图均衡化,灰度级数设为128 subplot(2,4,4)imhist(f2),title('均衡化')%显示均衡化之后的直方图 g=imread('bag.png')%读取bag.png图像
h=imhist(g)%生成bag.png图像的直方图赋值给向量h subplot(2,4,5)imhist(g),title('规定的直方图')f3=histeq(f,h)%进行直方图匹配 subplot(2,4,6)imshow(f3),title('直方图匹配')运行结果
2、线性空间滤波
a=imread('block.png')%读取block.png图像 figure,subplot(2,3,1)imshow(a),title('原图')w=1/(31*31)*ones(31)%生成31*31的全为1的矩阵,命名为w a1=imfilter(a,w)%利用imfilter函数进行滤波 subplot(2,3,2)imshow(a1)a2=imfilter(a,w,'replicate')%图像的大小通过复制图像边界外的值来扩展 subplot(2,3,3)imshow(a2)a3=imfilter(a,w,'symmetric')%图像的大小通过边界镜像反射来扩展 subplot(2,3,4)
-3-imshow(a3)a4=imfilter(a,w,'circular')%图像的大小通过将图像处理为二维周期函数的一个周期来扩展
subplot(2,3,5)imshow(a4)aa=im2uint8(a)a5=imfilter(aa,w,'replicate')subplot(2,3,6)imshow(a5)
b=imread('anna.jpg')figure,subplot(2,2,1)imshow(b),title('原图')w1=fspecial('average',[4])%生成average平滑滤波器 b1=imfilter(b,w1)%进行滤波 subplot(2,2,2)imshow(b1),title('average')w2=fspecial('disk',5)%生成disk平滑滤波器 b2=imfilter(b,w2)subplot(2,2,3)imshow(b2),title('disk')w3=fspecial('gaussian',[3 3],0.5)%生成gaussian平滑滤波器 b3=imfilter(b,w3)
-4-subplot(2,2,4)imshow(b3),title('gaussian')
c=imread('anna.jpg')figure,subplot(2,2,1)imshow(c),title('原图')w4=fspecial('prewitt')%生成prewitt锐化滤波器 c1=imfilter(c,w4)subplot(2,2,2)imshow(c1),title('prewitt')w5=fspecial('sobel')%生成sobel锐化滤波器 c2=imfilter(c,w5)subplot(2,2,3)imshow(c2),title('sobel')w6=fspecial('laplacian')%生成laplacian锐化滤波器 c3=imfilter(c,w6)subplot(2,2,4)imshow(c3),title('laplacian')运行结果
3、非线性空间滤波
d=imread('anna.jpg')%读取anna.jpg图像,赋值给d d1=imnoise(d,'salt & pepper',0.3)%用imnoise函数对d生成椒盐噪声 figure,subplot(1,2,1)imshow(d1),title('被椒盐噪声污染的图像')d2=medfilt2(d1)&用中值滤波器进行滤波 subplot(1,2,2)imshow(d2),title('去除椒盐噪声的图像')运行结果
四、实验总结(心得体会)
通过这次实验,首先我熟悉了Matlab的基本操作,掌握了图像处理的基本操作,比如如何读一张图片进来、如何显示一张图片等等。这些都是最基本的操作。其次我知道了灰度变换的函数imadjust的使用,它是将选定的灰度级别范围变换为规定的范围,可以自由变换图像的灰度级别;还有掌握了如何画图像的直方图、将直方图均衡化等等。还学会了图像的滤波处理,通过函数imfilter进行滤波。常用的平滑滤波器有average,disk,gaussian、锐化滤波器有prewitt, sobel,laplacian。还学会了用中值滤波去除椒盐噪声。这些都是一些比较初级的函数,后面还有很多图像处理方法需要学习。
第四篇:数字图像处理上机实验(02091008)
数字图像处理上机作业
数字图像处理上机作业
1.产生右图所示亮块图像 f1(x,y)(128×128大小,暗处=0,亮处=255),对其进行FFT:
(1)同屏显示原图f1和FFT(f1)的幅度谱图;
图像:
(2)若令f2(x,y)=(-1)f1(x,y),重复以上过程,比较二者幅度谱的异同,简述理由;(3)若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较。
x+y
结论:不同点:f2的频谱是对f1频谱的移位,它时f1的频谱从原点(0,0)移到了中心(64,64),而得到了一个完整的频谱。
相同点:频谱的实质没有改变,幅度等都没有发生变化。
(3)若将f2(x,y)顺时针旋转45度得到f3(x,y),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较。
源程序:f1=zeros(128,128);for i=38:1:90 for j=58:1:70 f1(i,j)=255;end end figure(1)subplot(1,2,1);imshow(f1);subplot(1,2,2);imshow(fft2(f1));% f2(x,y)=(-1)^(x+y)* f1(x,y)for i=1:1:128 for j=1:1:128 f2(i,j)=(-1)^(i+j)*f1(i,j);end end figure(2);subplot(1,3,1);imshow(f2);f3=imrotate(f2,-45,'bilinear');%将f2顺时针旋转45度 subplot(1,3,2);imshow(fft2(f2));%显示f2的频谱 subplot(1,3,3);imshow(fft2(f3));%显示f3的频谱
结论:均衡化后的直方图并非完全均匀分布的原因:因为图像的像素个数和灰度等级均为离散值,而且均衡化后使灰度级并归。
2.对256256大小、256级灰度的数字图像lena进行频域的理想低通、高通滤波,同屏显示原图、幅度谱图和低通、高通滤波的结果图。
源代码: figure(1);fid=fopen('d:imglena.img','r');data=(fread(fid,[256,256],'uint8'))';subplot(2,2,1)imagesc(data);colormap(gray);title('LENA','Color','r');subplot(2,2,2);imshow(fft2(data));s=fftshift(fft2(data));[M,N]=size(s);%分别返回s的行数到M中,列数到N中 n=2;%对n赋初值 %GLPF滤波,d0=5,15,30(程序中以d0=30为例)d0=30;%初始化d0 n1=floor(M/2);%对M/2进行取整 n2=floor(N/2);%对N/2进行取整 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);%GLPF滤波后的频域表示 end end s=ifftshift(s);%对s进行反FFT移动
%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数 s=uint8(real(ifft2(s)));subplot(2,2,3);%创建图形图像对象 imshow(s);p=fftshift(fft2(data));[M,N]=size(p);%分别返回p的行数到M中,列数到N中 n=2;%对n赋初值 %GLPF滤波d1=30 d1=30;%初始化d1 n3=floor(M/2);%对M/2进行取整 n4=floor(N/2);%对N/2进行取整 for i=1:M for j=1:N dd=sqrt((i-n3)^2+(j-n4)^2);%点(i,j)到傅立叶变换中心的距离 h1=1-exp(-1/2*(dd^2/d1^2));%GHPF滤波函数
p(i,j)=h1*p(i,j);%GHPF滤波后的频域表示 end end p=ifftshift(p);%对p进行反FFT移动
%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数 p=uint8(real(ifft2(p)));subplot(2,2,4);%创建图形图像对象 imshow(p);
3.对给定的两种128128、256级灰度的数字图像(图像磁盘文件名分别为Fing_128.img(指纹图)和Cell_128.img(显微医学图像)进行如下处理:
(1)对原图像进行直方图均衡化处理,同屏显示处理前后图像及其直方图,比较异同,并回答为什么数字图像均衡化后其直方图并非完全均匀分布。
异同:由于原图像中目标物的灰度主要集中于低亮度部分,而且象素总数比较多,经过直方图均衡后,目标物的所占的灰度等级得到扩展,对比度加强,使整个图像得到增强。
数字图像均衡化后其直方图并非完全均匀分布的原因:由于原图像中目标物的灰度主要集中于低亮度部分,而且象素总数比较少,而所占的灰度等级比较多,因此图像的对比度比较好,亮度比较大,整体图像清晰。经过直方图均衡后,目标物的所占的灰度等级被压缩,对比度减弱,反而使目标物变的难以辨认。
数字图像均衡化后,其直方图并非完全均匀分布,这是因为图像的象素个数和灰度等级均为离散值;而且均衡化使灰度级并归,因此,均衡化后,其直方图并非完全均匀分布。
源代码: figure(1);fid=fopen('D:imgcell_128.img','r');
%打开无格式文件 data1=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data1 subplot(4,2,1);
%将figure(1)分成4*2的8个子窗口, data11=uint8(data1);imshow(data11);%图象显示
title('CELL','Color','b');
%加标题 subplot(4,2,2);title('原图像直方图');imhist(data11);subplot(4,2,3);
%取第二个子窗口
data2=uint8(data1);%将灰度图象转换成uint8格式 b=histeq(data2);
%直方图均衡化
imshow(b,256);
%显示均衡化图象,256可缺省 title('均衡化','Color','b');
subplot(4,2,4);imhist(b);title('均衡化后图像直方图');subplot(4,2,5)fid=fopen('d:imgfing_128.img','r');%打开无格式文件
data3=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data3 data31=uint8(data3);
%将灰度图象转换成uint8格式 imshow(data31);
%显示灰度图象 title('FING','Color','b');subplot(4,2,6)imhist(data31);title('原图像直方图');subplot(4,2,7);
data4=uint8(data3);%将灰度图象转换成uint8格式 d=histeq(data4);
%直方图均衡化
imshow(d,256);
%显示均衡化图象,256可缺省 title('均衡化','Color','b');
subplot(4,2,8);imhist(d);title('均衡化后原图像直方图');(2)对原图像加入高斯噪声,用4-邻域平均法平滑加噪声图像(图像四周边界不处理,下同),同屏显示原图像、加噪图像和处理后的图像。
① 不加门限;
② 加门限 T2f(m,n),(其中f(m,n)
1N2f(i,j))
ij
源代码: % CELL figure(2);fid=fopen('D:imgcell_128.img','r');
%打开无格式文件
data1=(fread(fid,[128,128],'uint8'))';%将打开的文件读入到data1 I=uint8(data1);I1=imnoise(I,'gaussian');%加乘性噪声 H1=[0 1 0;1 0 1;0 1 0]/4;%4×4领域模板 J=imfilter(I,H1);%领域平均
subplot(2,4,1),imshow(I);%显示图像I title('原图像');subplot(2,4,2),imshow(I1);title('加噪声后图像');subplot(2,4,3),imshow(J);
%不加门限平滑 title('不加门限平滑后图像');%加门限后滤波
T= 2*sum(I1(:))/128^2;im_T = zeros(128,128);for i = 1:128
for j = 1:128
if abs(I1(i,j)J(i,j))>T
im_T(i,j)= J(i,j);
else
im_T(i,j)= I1(i,j);
end
end end subplot(2,4,8);imshow(im_T);title('加门限后');4.(1)用Laplacian锐化算子(分1和2两种情况)对256256大小、256级灰度的数字图像lena进行锐化处理,显示处理前、后图像。
源代码:
%laplacian算子锐化
I=imread('D:imgLENA256.bmp');% 读入原图像 figure(1);subplot(1,3,1);imshow(I);title('原始图像');L=fspecial('laplacian');L1=[0-1 0;-1 5-1;0-1 0];L2=[0-2 0;-2 9-2;0-2 0];LP1=imfilter(I,L1,'replicate');% α=1时的拉普拉斯算子 LP2=imfilter(I,L2,'replicate');% α=2时的拉普拉斯算子
subplot(1,3,2);imshow(LP1);title('Laplacian算子α=1锐化图像');subplot(1,3,3);imshow(LP2);title('Laplacian算子α=2锐化图像');
(2)若令
g1(m,n)f(m,n)2f,g2(m,n)4f(m,n)[f(m1,n)f(m1,n)f(m,n1)f(m,n1)
f(m,n1)f(m,n1)]
则回答如下问题:
① f(m,n)、g1(m,n)和g2(m,n)之间有何关系? ② g2(m,n)代表图像中的哪些信息? ③ 由此得出图像锐化的实质是什么?
①因为g2(m,n)2f(m,n),所以f(m,n)、g1(m,n)和g2(m,n)之间有以下关系:
g1(m,n)f(m,n)g2(m,n)
②g2(m,n)代表了原图像中的二阶梯度信息;g1(m,n)是边缘增强后的数字图像; ③由此可以得出:图像锐化的实质是将原图像与梯度信息叠加(梯度信息所占的比例由,相当于对目标物的边缘进行了增强。的大小决定,值越大则梯度信息所占的比例越大)
5.分别利用Roberts、Prewitt和Sobel边缘检测算子,对256256大小、256级灰度的数字图像lena进行边缘检测,显示处理前、后图像。图像:
源代码:
I=imread('D:imgLENA256.bmp');% 读入原图像 figure(1)%Roberts梯度法锐化
subplot(2,2,1);imshow(I);title('原始图像');J=double(I);[IX,IY]=gradient(J);%计算梯度 A=sqrt(IX.*IX+IY.*IY);subplot(2,2,2);imshow(A,[]);title('Roberts梯度法锐化图像');%Prewitt算子锐化
S=imfilter(I,fspecial('Prewitt'));subplot(2,2,3);imshow(S);title('Prewitt算子锐化图像');%Sobel算子锐化
S=imfilter(I,fspecial('sobel'));subplot(2,2,4);imshow(S);title('Sobel算子锐化图像');
6、学习数字图像处理课程的心得体会,该课程在哪些方面需要改进,对该课程或者任课老师有哪些意见或建议。
通过对数字图像处理课程的认真学习,在课堂听课和课余实践中了解了数字图像的基础知识,培养了一定的软件编程能力,在努力完成课堂作业的同时,发现了对图像方面的兴趣。老师认真负责,布置合理的作业。但希望能够通过更加丰富的授课方式,提高更多人学习该门课程的兴趣和主动性。也同样希望老师能够加强点名和作业的验收,督促学生更加认真的学习知识。
第五篇:数字图像处理实验 完整代码(原创精心整理)
实验一图象灰度变换(2学时)
一、实验目的:
理解数字图象处理的基本过程,掌握常用图象灰度变换算法,观察图像图象灰度变换的结果,加深对数字图象基本概念的理解。
二、实验内容:
1、灰度线性变换
变换函数为:s = a r + b设计程序,实现(a>1,b=0)、(00)和(a=1,b<0)等情况下的灰度变换处理,并比较处理前后的图象效果。
2、图象二值化
设计程序,实现图象的二值化。并给出三种门限下的处理结果。
3、负象变换
设计程序,实现图象的反转操作(负象变换),并比较处理前后的图象结果。
4、灰度非线性变换(选做内容)
设计程序,实现图象的指数变换和对数变换。
三、实验步骤:
1、获取实验用图像:使用imread函数将图像读入Matlab,用size函数(或imfinfo函数)获取图象大小。
2、产生灰度变换函数:s = a r + b
用imshow函数分别观察在(a>1,b=0)、(00)和(a=1,b<0)四情况下处理前后的结果。适当选择参数,使处理结果达到较好的效果。记录下所对应的参数。
3、用imwrite函数保存处理图象结果。
4、设计门限化方法实现图象的二值化的变换函数,并进行程序设计实现。分别选择三个门限值,观察处理结果。
5、设计实现反转操作的变换函数,并进行程序设计实现。观察处理结果。
6、分别设计实现图象的指数变换和对数变换的变换函数,参数自己选定,并比较处理前后的图象结果。(选做内容)
四、实验报告要求:
画出算法的规范化程序设计流程图。用plot等函数生成各类灰度变换函数曲线,用imshow函数显示处理前后图象。在实验报告中提交原图像和各种变换函数的曲线,以及按各种变换函数处理后的图像,并进行实验结果分析。选做内容可不写入报告中。
实验一代码
R=imread('实验1原图.jpg');[m,n]=size(R)figure, imshow(R);title('原图1');
S1=R*3;figure, imshow(S1);title('a=3,b=0');imwrite(S1,'1.21.jpg');
N=im2double(R);
S2=N*0.5;figure, imshow(S2);title('a=0.5,b=0');imwrite(S2,'1.22.jpg');
S3=R+10;figure, imshow(S3);title('a=1,b=10');imwrite(S3,'1.23.jpg');
S4=N+0.5;figure, imshow(S4);title('a=1,b=0.5');imwrite(S4,'1.24.jpg');
X1=R>64;figure, imshow(X1);title('门限值为64');imwrite(X1,'1.41.jpg');
X2=R>128;figure, imshow(X2);title('门限值为128');imwrite(X2,'1.42.jpg');
X3=R>192;figure, imshow(X3);title('门限值为192');imwrite(X3,'1.43.jpg');
Y=255-R;figure, imshow(Y);title('反转后的图像');imwrite(Y,'1.51.jpg');
Z1=N.^0.6;figure, imshow(Z1);title('指数变换后的图像');imwrite(Z1,'1.61.jpg');
Z2=log(N+1)%Z3=im2uint8(Z2)figure,imshow(Z3);figure,imshow(Z2,[]);title('对数变换后的图像');imwrite(Z2,'1.62.jpg');
实验二图象直方图及均衡(2学时)
一、实验目的:
理解图象灰度直方图的概念,掌握图象直方图的计算方法;掌握直方图均衡化图象增强技术,理解均衡化的处理过程。
二、实验内容:
1、图象直方图
设计程序,计算图象直方图。
2、直方图均衡化
设计程序,实现图象直方图均衡化处理,并比较处理前后图象。
三、实验步骤:
1、获取实验用图像:使用imread函数将图像读入Matlab用size函数(或imfinfo函数)获取图象大小。
2、计算图象的灰度直方图,并用plot等函数生成灰度直方图。
3、设计直方图均衡化算法,并进行程序设计实现。
4、根据直方图均衡化的灰度变换函数实现图象灰度的映射变换,获得均衡化的图象结果。
5、计算均衡化图象的灰度直方图,并用plot等函数生成灰度直方图。
6、用imwrite函数保存处理图象结果。
四、实验报告要求:
画出直方图均衡化算法的规范化程序设计流程图。用imshow函数显示处理前后图象,用plot等函数生成原始图象和处理图象的灰度直方图,并进行实验结果分析。
实验二代码
X=imread('实验2原图.jpg');[m,n]=size(X)h=zeros(256);for i=1:256
t=(X==(i-1));h(i)=sum(t(:));end a=0:255;figure,imshow(X);title('原图2');figure,bar(a,h);title('原图直方图');num=numel(X);c=cumsum(h);Y=round(c/num*256);W=zeros(m,n);for i=1:256
W1=Y(i)*(X==i-1);
W=W1+W;
W=round(W);end for i=1:256
t=(W==(i-1));h(i)=sum(t(:));end W=uint8(W);figure,imshow(W);title('均衡化后的图');figure,bar(a,h);title('均衡化后的直方图');imwrite(W,'2.6.jpg');
实验三图像中值滤波(2学时)
一、实验目的:
进一步加深理解和掌握中值滤波的原理和具体算法。能解释用大小和形状不同的滑动窗口进行中值滤波后图像所呈现的一些特征。
二、实验内容:
1、矩形邻域中值滤波设计程序,实现3×3邻域中值滤波。比较处理前后图像效果。
2、十字形中值滤波(选做)设计程序,实现5×5十字形中值滤波。比较处理前后图像效果。
三、实验原理:
对于给定的n个数值{a1, a2, …an}, 将它们按大小有序排列。当n为奇数时,位于中间位置的那个数值称为这n个数值的中值。记作 med [a1, a2, …an] 设x为M×N待处理图像,经窗口为Wn的中值滤波后,被处理像点(i, j)的输出为:)],([),(),(jixmedjiyjiWn= 式中W(i, j)表示点(i, j)的邻域,它含有n个像素。
n
四、实验步骤:
1)读入图像;2)创建合适的滑动窗口;3)将该窗口内的图像灰度值重新排序;4)将排序后位于中间的数值作为中值;5)用中值取代被处理像素的原灰度值;6)滑动窗口到下一个位置,重复3)~5)。
五、实验报告要求:
按统一规定的实验报告格式提交报告。画出算法的规范化程序设计流程图。应包含程序清单,处理前后的图像特征比较及编程的心得体会(指编程过程中的难点及如何克服它的)。
实验三代码
1.将下列函数保存成文件mymidfilt.m function B=mymidfilt(file_name, block_size)A = imread(file_name);[m,n] = size(A);
k = floor(block_size/2);
A2 = zeros(m+2*k,n+2*k);A2(k+1:m+k,k+1:n+k)= A;
%four corners
A2(1:k,1:k)= A(1,1);% Upper left corner.A2(1:k,n+k+1:n+2*k)= A(1,n);% Upper right corner.A2(m+k+1:m+2*k,1:k)= A(m,1);% Lower left corner.A2(m+k+1:m+2*k,n+k+1:n+2*k)= A(m,n);% Lower right corner.% four sides for i = 1:k
A2(i,k+1:n+k)= A(1,1:n);% Upper.A2(m+k+i,k+1:n+k)= A(m,1:n);% Lower.A2(k+1:m+k,i)= A(1:m,1);% Left.A2(k+1:m+k,n+k+i)= A(1:m,n);% Right.end;
B=zeros(m,n);
pixel_block = zeros(1,block_size^2);
for i = 1:m for j = 1:n
k = floor(block_size/2);
pixel_block = reshape(A2(i:i+2*k,j:j+2*k),1,block_size^2);sorted_block = sort(pixel_block);median_position = ceil(block_size^2 / 2);
block_median = sorted_block(median_position);B(i,j)= block_median;end;end;
B = uint8(B);
2.调用函数mymidfilt
R=imread('实验3原图.jpg');figure, imshow(R);title('原图3');X=mymidfilt('实验3原图.jpg', 5);figure, imshow(X);title('中值滤波后的图像');imwrite(X,'3.1.jpg');
实验三选作部分代码
A = imread('实验3原图.jpg');A=im2double(A);[m,n]=size(A);block_size=5;k = floor(block_size/2);
A2 = zeros(m+2*k,n+2*k);A2(k+1:m+k,k+1:n+k)= A(1:m,1:n);
%four corners A2(1:k,1:k)= A(1,1);
% Upper left corner.A2(1:k,n+k+1:n+2*k)= A(1,n);
% Upper right corner.A2(m+k+1:m+2*k,1:k)= A(m,1);
% Lower left corner.A2(m+k+1:m+2*k,n+k+1:n+2*k)= A(m,n);% Lower right corner.% four sides for i = 1:k
A2(i,k+1:n+k)= A(1,1:n);
% Upper.A2(m+k+i,k+1:n+k)= A(m,1:n);
% Lower.A2(k+1:m+k,i)= A(1:m,1);
% Left.A2(k+1:m+k,n+k+i)= A(1:m,n);
% Right.end;
B=zeros(m,n);B0=zeros(1,9);B1 = zeros(1,block_size^2);
for i = 1:m for j = 1:n
k = floor(block_size/2);
B1= reshape(A2(i:i+2*k,j:j+2*k),1,block_size^2);
B0=[B1(3)B1(8)B1(11)B1(12)B1(13)B1(14)B1(15)B1(18)B1(23)];
B0= sort(B0);
block_median = B0(5);B(i,j)=block_median;end;end;figure,imshow(B);title('5X5十字变换后图像');imwrite(B,'3.2.jpg');
实验四图像空域锐化增强(2学时)
一、实验目的
进一步加深理解和掌握图像锐化的的概念,掌握常用空域锐化增强技术。观察和理解图像锐化处理对加强图像中的目标边缘和图像细节的作用。理解图象锐化增强的处理过程和特点。
二、实验内容
1、一阶微分锐化增强
设计程序,分别实现Roberts、Sobel、Priwitt算子的锐化处理。观察处理前后图象效果,分析实验结果和算法特点。
2、拉普拉斯锐化增强
设计程序,实现拉普拉斯图像和原始图像叠加的增强处理,即
观察处理前后图像效果,分析实验结果和算法特点。
三、实验原理:
图像锐化技术的基本方法是对图像进行微商处理,并且将运算结果与原图像叠加。图像的梯度模值反映了图像灰度变化的速率,它包含了边缘及细节信息。我们可以梯度模值的计算作为算子,这个算子称为梯度算子。常用的有Roberts、Sobel、Priwitt、Laplace等算子。
四、实验要求:
按统一规定的实验报告格式提交报告。应包含程序清单,处理前后的图像特征比较及编程的心得体会(指编程过程中的难点及如何克服它的)。
实验四代码
1.将下列函数保存成move_mask1.m function B=move_mask1(filename,B1,B2)R=imread(filename);R1=rgb2gray(R);[m,n]=size(R1);R2=zeros(m+2,n+2);
R2(2:m+1,2:n+1)= R1(1:m,1:n);R2(1,1)= R1(1,1);R2(1,n+2)= R1(1,n);R2(m+2,1)= R1(m,1);R2(m+2,n+2)= R1(m,n);
R2(1,2:n+1)= R1(1,1:n);R2(m+2,2:n+1)= R1(m,1:n);R2(2:m+1,1)= R1(1:m,1);R2(2:m+1,n+2)= R1(1:m,n);
D0=zeros(3,3);D1=zeros(m,n);B= zeros(m,n);for i = 1:m;for j = 1:n;
D0 = R2(i:i+2,j:j+2);C1=B1.*D0;C2=B2.*D0;
D1(i,j)=abs(sum(sum(C1)))+abs(sum(sum(C2)));B(i,j)=D1(i,j);end;end;
2.将下列函数保存成move_mask2.m function B=move_mask2(filename,B1)R=imread(filename);[m,n]=size(R);R2=zeros(m+2,n+2);R2(2:m+1,2:n+1)= R(1:m,1:n);R2(1,1)= R(1,1);R2(1,n+2)= R(1,n);R2(m+2,1)= R(m,1);R2(m+2,n+2)= R(m,n);
R2(1,2:n+1)= R(1,1:n);R2(m+2,2:n+1)= R(m,1:n);R2(2:m+1,1)= R(1:m,1);R2(2:m+1,n+2)= R(1:m,n);
D0 = zeros(3,3);D1= zeros(m,n);
for i = 1:m;for j = 1:n;
D0 = R2(i:i+2,j:j+2);C1=B1.*D0;D1(i,j)=sum(sum(C1));B(i,j)=D1(i,j);end;end;3.调用函数move_mask1和move_mask2 B1= [-1-2-1;0 0 0;1 2 1];%sobel算子 B2= [-1 0 1;-2 0 2;-1 0 1];%sobel算子 B3= [-1 0 1;-1 0 1;-1 0 1];%prewitt算子 B4= [1 1 1;0 0 0;-1-1-1];%prewitt算子 B5= [0 0 0;0-1 0;0 0 1];%robert算子 B6= [0 0 0;0 0-1;0 1 0];%robert算子 B7= [0 1 0;1-4 1;0 1 0];%拉普拉斯算子
R1=imread('实验4原图1.jpg');figure, imshow(R1);title('实验4原图1');R2=imread('实验4原图2.jpg');figure, imshow(R2);title('实验4原图2');
E0= move_mask1('实验4原图1.jpg',B1,B2);E1= move_mask1('实验4原图1.jpg',B3,B4);E2= move_mask1('实验4原图1.jpg',B5,B6);E3= move_mask2('实验4原图2.jpg',B7);
[m,n]=size(R2);for i = 1:m;for j = 1:n;E4(i,j)=R2(i,j)-E3(i,j);%普拉斯图像和原始图像叠加 end;end;
figure, imshow(E0,[]);title('sobel算子锐化处理后的图像');figure, imshow(E1,[]);title('prewitt算子锐化处理后的图像');figure, imshow(E2,[]);title('robert算子锐化处理后的图像');figure, imshow(E3,[]);title('拉普拉斯图像');figure, imshow(E4,[]);title('普拉斯图像和原始图像叠加后的图像');
实验五图像频域滤波(4学时)
一、实验目的:
进一步加深理解和掌握图像频域的滤波器设计方法,学会在图像的频域中观察和分析干扰信号的频率分量在什么位置。
二、实验内容:
设计程序消除周期性噪声干扰信号。要求在图像频域中设计一Butterworth陷波器,其阶数n和陷波器半径D由学生根据上课所学理论知识通过自己的探索得出,从而加深
0理解二者对滤波器性能的影响。
三、实验原理:
n阶Butterworth 陷波器的传递函数为:
其中D为陷波器半径,D,D分别为点(u,v)到陷波器中心(u,v)和(-u,-v)0
0
0
0的距离。该传递函数使得以陷波器中心为圆心,D0为半径的圆内的所有u,v对应的滤波函数H(u,v)输出为0,也即将位于(u,v)和(-u,-v)处的频率成分去除。
0
0
0
0
四、实验步骤:
获取图像的频域图像,使用Matlab函数pixval观察干扰噪声的频率成分,找出所有的(u,v)对,针对每一个噪声源分别设计相应的陷波器。滤波完成后将频域图像实施00逆变换,即可显示处理后的图像。
五、实验要求:
按统一规定的实验报告格式提交报告。应包含程序清单,处理前后的图像特征比较及编程的心得体会(指编程过程中的难点及如何克服它的)。
实验五代码
1.将下列函数保存成mylvbo.m function n=mylvbo(r,u1,v1,u2,v2,d)[m,n]=size(r);Y=fft2(r);G=fftshift(Y);for u=1:m for v=1:n
d1=((u-u1)^2+(v-v1)^2)^(1/2);d2=((u-u2)^2+(v-v2)^2)^(1/2);d3=d;
H(u,v)=1/(1+(d3*d3/(eps+d1*d2))^2);end end
N=G.*H;
n1=ifft2(N);n=abs(n1);
2.调用函数mylvbo.m r=imread('实验5原图.tif');[m,n]=size(r);imshow(r);title('实验5原图象');y1=fft2(r);figure,imshow(abs(y1),[]);title('实验5原图像频谱');y2=fftshift(y1);figure,imshow(abs(y2),[]);title('中心移位后的频谱');impixelinfo;y3=log(1+abs(y2));figure,imshow(y3,[]);title('取对数变换后的频谱');impixelinfo;
n1=mylvbo(r,257,247,257,267,3);n2=mylvbo(n1,237,257,277,257,3);n3=mylvbo(n2,217,217,297,297,3);
figure,imshow(n1,[]);title('第一次频域滤波后图像');figure,imshow(n2,[]);title('第二次频域滤波后图像');figure,imshow(n3,[]);title('第三次频域滤波后图像');
imwrite(uint8(n3),'5.tif');