(完整版)数字图像处理MATLAB程序【完整版】
matlab教程ppt(完整版)

矩阵的数学运算
总结词
详细描述
总结词
详细描述
掌握矩阵的数学运算,如求逆 、求行列式、求特征值等。
在MATLAB中,可以使用inv() 函数来求矩阵的逆,使用det() 函数来求矩阵的行列式,使用 eig()函数来求矩阵的特征值。 例如,A的逆可以表示为 inv(A),A的行列式可以表示 为det(A),A的特征值可以表 示为eig(A)。
• 总结词:了解特征值和特征向量的概念及其在矩阵分析中的作用。 • 详细描述:特征值和特征向量是矩阵分析中的重要概念。特征值是满足Ax=λx的标量λ和向量x,特征向量是与特征值对
应的非零向量。特征值和特征向量在许多实际问题中都有应用,如振动分析、控制系统等。
04
MATLAB图像处理
图像的读取与显示
变量定义
使用赋值语句定义变量,例如 `x = 5`。
矩阵操作
学习如何创建、访问和操作矩 阵,例如使用方括号 `[]`。
函数编写
学习如何创建自定义函数来执 行特定任务。
02
MATLAB编程
变量与数据类型
01
02
03
变量命名规则
MATLAB中的变量名以字 母开头,可以包含字母、 数字和下划线,但不应与 MATLAB保留字冲突。
了解矩阵的数学运算在实际问 题中的应用。
矩阵的数学运算在许多实际问 题中都有应用,如线性方程组 的求解、矩阵的分解、信号处 理等。通过掌握这些运算,可 以更好地理解和解决这些问题 。
矩阵的分解与特征值
• 总结词:了解矩阵的分解方法,如LU分解、QR分解等。
• 详细描述:在MATLAB中,可以使用lu()函数进行LU分解,使用qr()函数进行QR分解。这些分解方法可以将一个复杂的 矩阵分解为几个简单的部分,便于计算和分析。
matlab教程ppt(完整版)

可以使用`'`运算符对矩阵进行 转置。
矩阵高级运算
01
逆矩阵
可以使用`inv`函数求矩阵的逆矩阵 。
行列式
可以使用`det`函数求矩阵的行列式 。
03
02
特征值和特征向量
可以使用`eig`函数求矩阵的特征值 和特征向量。
秩
可以使用`rank`函数求矩阵的秩。
04
04
matlab绘图功能
绘图基本命令
控制设计
MATLAB提供了控制系统设计和分析 工具箱,可以方便地进行控制系统的 建模、分析和优化。
03
信号处理
MATLAB提供了丰富的信号处理工具 箱,可以进行信号的时域和频域分析 、滤波器设计等操作。
05
04
图像处理
MATLAB提供了图像处理工具箱,可 以进行图像的增强、分割、特征提取 等操作。
02
matlab程序调试技巧分享
01
调试模式
MATLAB提供了调试模式,可以 逐行执行代码,查看变量值,设 置断点等。
日志输出
02
03
错误处理
通过使用fprintf函数,可以在程 序运行过程中输出日志信息,帮 助定位问题。
MATLAB中的错误处理机制可以 帮助我们捕获和处理运行时错误 。
matlab程序优化方法探讨
显示结果
命令执行后,结果将在命令窗口中显示。
保存结果
可以使用`save`命令将结果保存到文件中。
matlab变量定义与赋值
定义变量
使用`varname = value`格式定义变 量,其中`varname`是变量名, `value`是变量的值。
赋值操作
使用`=`运算符将值赋给变量。例如 ,`a = 10`将值10赋给变量a。
matlab教程ppt(完整版)

控制流语句
使用条件语句(如if-else)和 循环语句(如for)来控制程序 流程。
变量定义
使用赋值语句定义变量,例如 `a = 5`。
矩阵运算
使用矩阵进行数学运算,如加 法、减法、乘法和除法等。
函数编写
创建自定义函数来执行特定任 务。
02
MATLAB编程语言基础
变量与数据类型
变量命名规则
数据类型转换
编辑器是一个文本编辑器 ,用于编写和编辑 MATLAB脚本和函数。
工具箱窗口提供了一系列 用于特定任务的工具和功 能,如数据可视化、信号 处理等。
工作空间窗口显示当前工 作区中的变量,可以查看 和修改变量的值。
MATLAB基本操作
数据类型
MATLAB支持多种数据类型, 如数值型、字符型和逻辑型等 。
04
MATLAB数值计算
数值计算基础
01
02
03
数值类型
介绍MATLAB中的数值类 型,包括双精度、单精度 、复数等。
变量赋值
讲解如何给变量赋值,包 括标量、向量和矩阵。
运算符
介绍基本的算术运算符、 关系运算符和逻辑运算符 及其优先级。
数值计算函数
数学函数
列举常用的数学函数,如 三角函数、指数函数、对 数函数等。
矩阵的函数运算
总结词:MATLAB提供了许多内置函 数,可以对矩阵进行各种复杂的运算
。
详细描述
矩阵求逆:使用 `inv` 函数求矩阵的 逆。
特征值和特征向量:使用 `eig` 函数 计算矩阵的特征值和特征向量。
行列式值:使用 `det` 函数计算矩阵 的行列式值。
矩阵分解:使用 `factor` 和 `expm` 等函数对矩阵进行分解和计算指数。
matlab教程ppt(完整版)

汇报人:可编辑
2023-12-24
目录
• MATLAB基础 • MATLAB编程 • MATLAB矩阵运算 • MATLAB数值计算 • MATLAB可视化 • MATLAB应用实例
01
CATALOGUE
MATLAB基础
MATLAB简介
MATLAB定义
MATLAB应用领域
菜单栏
包括文件、编辑、查看、主页 、应用程序等菜单项。
命令窗口
用于输入MATLAB命令并显示 结果。
MATLAB主界面
包括命令窗口、当前目录窗口 、工作空间窗口、历史命令窗 口等。
工具栏
包括常用工具栏和自定义工具 栏。
工作空间窗口
显示当前工作区中的变量。
MATLAB基本操作
变量定义
使用变量名和赋值符号(=)定义变 量。
详细描述
直接输入:在 MATLAB中,可以直 接通过输入矩阵的元 素来创建矩阵。例如 ,`A = [1, 2, 3; 4, 5, 6; 7, 8, 9]`。
使用函数创建: MATLAB提供了多种 函数来创建特殊类型 的矩阵,如`eye(n)`创 建n阶单位矩阵, `diag(v)`创建由向量v 的元素构成的对角矩 阵。
使用bar函数绘制柱状图 ,可以自定义柱子的宽
度、颜色和标签。
使用pie函数绘制饼图, 可以自定义饼块的比例
和颜色。
三维绘图
01
02
03
04
三维线图
使用plot3函数绘制三维线图 ,可以展示三维空间中的数据
点。
三维曲面图
使用surf函数绘制三维曲面图 ,可以展示三维空间中的曲面
。
三维等高线图
(完整版)数字图像处理MATLAB程序【完整版】

第一部分数字图像处理实验一图像的点运算实验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命令窗口中输入相应程序。
(整理)数字图像处理MATLAB指令

其他常用的图像转换函数有:gray2ind函数,将灰度图像转换成索引图像。
Im2bw函数,将其它图像转化为二值图像。
Ind2gray函数,将索引图像转换成灰度图像。
Rgb2gray函数,将彩色图像转换成灰度图像。
1.利用imread( )函数读取一幅图像,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;函数执行语句A = imread('saturn.png');whosName Size Bytes Class AttributesA 1500x1200x3 5400000 uint8imshow(A)4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;imfinfo('saturn.png')5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg 文件,设为flower.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。
imwrite(A,'xingxing.jpg','quality',25)B = imread('xingxing.jpg');6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flower.bmp。
imwrite(A , 'xingxing.bmp')C = imread('xingxing.bmp');7.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。
F = imread('circbw.tif');im2bw(F)imshow(F)实验二图像直方图与灰度变换下面给出灰度变化的MATLAB程序f=imread('medicine_pic.jpg');g=imhist(f,256); %显示其直方图g1=imadjust(f,[0 1],[1 0]);%灰度转换,实现明暗转换(负片图像) figure,imshow(g1)g2=imadjust(f,[0.5 0.75],[0 1]);%将0.5到0.75的灰度级扩展到范围[0 1] figure,imshow(g2)g=imread('point.jpg');h=log(1+double(g));%对输入图像对数映射变换h=mat2gray(h); %将矩阵h转换为灰度图片h=im2uint8(h); %将灰度图转换为8位图figure,imshow(h)下面给出直方图均衡化增强图像对比度的MATLAB程序:I=imread(‘pollen.jpg); % 读入原图像J=histeq(I); %对原图像进行直方图均衡化处理Imshow(I); %显示原图像Title(‘原图像’); %给原图像加标题名Figure;imshow(J); %显示直方图均衡化后的图像Title(‘直方图均衡化后的图像’) ; %给直方图均衡化后的图像加标题名Figure; subplot(1,2,1) ;%对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图Imhist(I,64); %将原图像直方图显示为64级灰度Title(‘原图像直方图’) ; %给原图像直方图加标题名Subplot(1,2,2); %作第2幅子图Imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度Title(‘均衡变换后的直方图’) ; %给均衡化后图像直方图加标题名1、利用自己编写的灰度直方图计算程序计算rice.tif图像的直方图,并与系统自带的计算程序进行对比。
数字图像处理实验matlab4

9,对图3实施正交变换编码和解码(采用离散傅立叶变换)。
建议将图3分成4*4的4个子图象。
思路:先将图3数据读入模块,显示图像,将图分块进行DFT 变换,显示图像,,在进行反变换恢复原数据,在进行哈夫曼编码编码,后解码。
原理:傅立叶变换傅立叶变换是数字图像处理中应用最广的一种变换,其中图像增强、图像复原和图像分析与描述等,每一类处理方法都要用到图像变换,尤其是图像的傅立 叶变换。
离散傅立叶(Fourier )变换的定义:二维离散傅立叶变换(DFT )为:逆变换为:式中,在DFT 变换对中, 称为离散信号 的频谱,而 称为幅度谱,为相位角,功率谱为频谱的平方,它们之间的关系为:图像的傅立叶变换有快速算法。
下面给出具体的Huffman 编码算法。
(1)首先统计出每个符号出现的频率,例如S0到S7的出现频率分别为:0.25,0.19,0.08,0.06,0.21,0.02,0.03,0.16(2)从左到右把上述频率按从大到小的顺序排列。
∑∑-=-=+-=1010)(2exp ),(1),(M x N y N vy M ux j y x f MN v u F π∑∑-=-=+=101)(2exp ),(1),(M u N v N vy M ux j v u F MN y x f π}1,,1,0{,-∈M x u }1,,1,0{,-∈N y v ),(v u F ),(y x f ),(v u F ),(v u ϕ),(),()],(exp[),(),(v u jI v u R v u j v u F v u F +==ϕ(3)将最小的两个数相加的值表上*号,其余的数据不变,然后将得到的数据排序(4)重复(3),直到只有两个数据。
(5) 从最后一列概率编码,从而得到最终编码。
具体过程如下图所示:概率压缩过程:初始信源信源的消减步骤 符号概率 1 2 3 4 5 6 S00.25 0.25 0.25 0.25 0.35* 0.4* 0.6* 0.21 0.21 0.21 0.25 0.35 0.4 0.19 0.19 0.19 0.21 0.25 0.16 0.16 0.19* 0.19 0.08 0.11* 0.16 0.06 0.08 0.05*S40.21 S10.19 S70.16 S20.08 S30.06 S60.03 S5 0.02表 3-1 哈夫曼概率压缩过程编码过程: 初始信源 对消减信源的赋值符号 概率 编码 1 2 3 4 5 6 S00.25 01 0.25 01 0.25 01 0.25 01 0.35*00 0.4* 1 0.6* 0 0.21 10 0.21 10 0.21 10 0.25 01 0.35 00 0.4 1 0.19 11 0.19 11 0.19 11 0.21 10 0.25 01 0.16 001 0.16 001 0.19*000 0.19 11 0.08 0001 0.11* 0000 0.16 0001 0.06 00000 0.08 0001 0.05* 00001S40.21 10 S10.19 11 S70.16 001 S20.08 0001 S30.06 00000 S60.03 S5 0.02表 3-2 哈夫曼算法编码过程算法流程此处并没有采用概率排序, 而是采用对灰度像素个数 读入图像 初始化 统计每种灰度数灰度数排序排序,这是因为计算概率无 疑增大了计算量,因此用灰 度级的像素个数替代图3-1 哈夫曼算法程序流程图程序:clc;clear;close all ;A=[3 3 4 4 4 4 5 24 1 1 2 2 15 44 3 4 4 4 45 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 20 3 6 5 5 7 2 03 1 2 2 1 5 0 6];subplot(2,2,1),imshow(A);title('原图');I=double(A);P=A(1:4,1:4);K=fft(P);P1=A(1:4,5:8);K1=fft(P1);P2=A(5:8,1:4);K2=fft(P2);P3=A(5:8,5:8);K3=fft(P3);for i=1:4for j=1:4H(i,j)=K(i,j);endendfor i=1:4for j=5:8H(i,j)=K1(i,j-4);endendfor i=5:8 按哈夫曼算法编码 将灰度编码表及原图的编码写入txtfor j=1:4H(i,j)=K2(i-4,j);endendfor i=5:8for j=5:8H(i,j)=K3(i-4,j-4);endendsubplot(2,2,2),imshow(H);title('DFT变换后的频域图像');I=H(1:4,1:4);M=ifft(I);I1=H(1:4,5:8);M1=ifft(I1);I2=H(5:8,1:4);M2=ifft(I2);I3=H(5:8,5:8);M3=ifft(I3);for i=1:4for j=1:4A1(i,j)=M(i,j);endendfor i=1:4for j=5:8A1(i,j)=M1(i,j-4);endendfor i=5:8for j=1:4A1(i,j)=M2(i-4,j);endendfor i=5:8for j=5:8A1(i,j)=M3(i-4,j-4);endendsubplot(2,2,3),imshow(A1);title('复原图像');%编码%读入图像,定义结构体,便于存储I=A;pix(8)=struct('huidu',0.0,...'number',0.0,...'bianma','');[m n l]=size(I);fid=fopen('E:\学习\数字图像处理\huffman.txt','w');%huffman.txt是灰度级及相应的编码表fid1=fopen('E:\学习\数字图像处理\huff_compara.txt','w');%huff_compara.txt是编码表huf_bac=cell(1,l);for t=1:l %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %初始化结构数组for i=1:8pix(i).number=1;pix(i).huidu=i-1;pix(i).bianma='';end%统计每种灰度像素的个数记录在pix数组中for i=1:mfor j=1:nk=I(i,j,t)+1;pix(k).number=1+pix(k).number;endend%按灰度像素个数从大到小排序for i=1:7for j=i+1:8if pix(i).number<pix(j).numbertemp=pix(j);pix(j)=pix(i);pix(i)=temp;endendendfor i=8:-1:1if pix(i).number ~=0break;endendnum=i;count(t)=i;%记录每层灰度级%定义用于求解的矩阵clear huffmanhuffman(num,num)=struct('huidu',0.0,...'number',0.0,...'bianma','');huffman(num,:)=pix(1:num);%矩阵赋值for i=num-1:-1:1p=1;%算出队列中数量最少的两种灰度的像素个数的和sum=huffman(i+1,i+1).number+huffman(i+1,i).number;for j=1:i%如果当前要复制的结构体的像素个数大于sum就直接复制if huffman(i+1,p).number>sumhuffman(i,j)=huffman(i+1,p);p=p+1;else%如果当前要复制的结构体的像素个数小于或等于sum就插入和的结构体%灰度值为-1标志这个结构体的number是两种灰度像素的和huffman(i,j).huidu=-1;huffman(i,j).number=sum;sum=0;huffman(i,j+1:i)=huffman(i+1,j:i-1);break;endendend%开始给每个灰度值编码for i=1:num-1obj=0;for j=1:iif huffman(i,j).huidu==-1obj=j;break;elsehuffman(i+1,j).bianma=huffman(i,j).bianma;endendif huffman(i+1,i+1).number>huffman(i+1,i).number%说明:大概率的编0,小概率的编1,概率相等的,标号大的为1,标号小的为0huffman(i+1,i+1).bianma=[huffman(i,obj).bianma '0']; huffman(i+1,i).bianma=[huffman(i,obj).bianma '1'];elsehuffman(i+1,i+1).bianma=[huffman(i,obj).bianma '1']; huffman(i+1,i).bianma=[huffman(i,obj).bianma '0'];endfor j=obj+1:ihuffman(i+1,j-1).bianma=huffman(i,j).bianma;endendfor k=1:count(t)huf_bac(t,k)={huffman(num,k)}; %保存endend%写出灰度编码表for t=1:lfor b=1:count(t)fprintf(fid,'%d',huf_bac{t,b}.huidu);fwrite(fid,' ');fprintf(fid,'%s',huf_bac{t,b}.bianma);fwrite(fid,' ');endfwrite(fid,'%');end%解码%按原图像数据,写出相应的编码,也就是将原数据用哈夫曼编码替代for t=1:lfor i=1:mfor j=1:nfor b=1:count(t)if I(i,j,t)==huf_bac{t,b}.huiduM(i,j,t)=huf_bac{t,b}.huidu;%将灰度级存入解码的矩阵 fprintf(fid1,'%s',huf_bac{t,b}.bianma);fwrite(fid1,' ');%用空格将每个灰度编码隔开break;endendendfwrite(fid1,',');%用空格将每行隔开endfwrite(fid1,'%');%用%将每层灰度级代码隔开endfclose(fid);fclose(fid1);M=uint8(M);save('M')%存储解码矩阵Msubplot(2,2,4),imshow(A);title('解码后图');原图DFT变换后的频域图像复原图像解码后图对应编码:0 00011 0012 103 0114 115 0106 000007 00001矩阵的编码11 001 001 10 10 001 010 11 ,11 011 11 11 11 11 010 10 ,11 010 10 010 0001 011 001 10 ,001 010 0001 011 011 010 00000 11 ,10 011 001 001 10 10 001 10 ,0001 011 00000 010 010 00001 10 0001 ,011 001 10 10 001 010 0001 00000 ,解码矩阵:M =3 34 4 4 45 24 1 1 2 2 15 44 3 4 4 4 45 24 5 2 5 0 3 1 21 5 0 3 3 5 6 42 3 1 1 2 2 1 2 0 3 6 5 5 7 2 0 3 1 2 2 1 5 0 6。
(完整版)数字图像处理代码大全

1.图像反转MATLAB程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1); %图像反转线性变换H=uint8(J);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(H);2.灰度线性变换MATLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]内的灰度拉伸为[0 1]subplot(2,2,3),imshow(J);title('线性变换图像[0.1 0.5]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]内的灰度拉伸为[0 1]subplot(2,2,4),imshow(K);title('线性变换图像[0.3 0.7]');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系3.非线性变换MATLAB程序实现如下:I=imread('xian.bmp');I1=rgb2gray(I);subplot(1,2,1),imshow(I1);title('灰度图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系J=double(I1);J=40*(log(J+1));H=uint8(J);subplot(1,2,2),imshow(H);title('对数变换图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系4.直方图均衡化MATLAB程序实现如下:I=imread('xian.bmp');I=rgb2gray(I);figure;subplot(2,2,1);imshow(I);subplot(2,2,2);imhist(I);I1=histeq(I);figure;subplot(2,2,1);imshow(I1);subplot(2,2,2);imhist(I1);5.线性平滑滤波器用MATLAB实现领域平均法抑制噪声程序:I=imread('xian.bmp');subplot(231)imshow(I)title('原始图像')I=rgb2gray(I);I1=imnoise(I,'salt & pepper',0.02);subplot(232)imshow(I1)title('添加椒盐噪声的图像')k1=filter2(fspecial('average',3),I1)/255; %进行3*3模板平滑滤波k2=filter2(fspecial('average',5),I1)/255; %进行5*5模板平滑滤波k3=filter2(fspecial('average',7),I1)/255; %进行7*7模板平滑滤波k4=filter2(fspecial('average',9),I1)/255; %进行9*9模板平滑滤波subplot(233),imshow(k1);title('3*3模板平滑滤波');subplot(234),imshow(k2);title('5*5模板平滑滤波');subplot(235),imshow(k3);title('7*7模板平滑滤波');subplot(236),imshow(k4);title('9*9模板平滑滤波'); 6.中值滤波器用MATLAB实现中值滤波程序如下:I=imread('xian.bmp');I=rgb2gray(I);J=imnoise(I,'salt&pepper',0.02);subplot(231),imshow(I);title('原图像');subplot(232),imshow(J);title('添加椒盐噪声图像');k1=medfilt2(J); %进行3*3模板中值滤波k2=medfilt2(J,[5,5]); %进行5*5模板中值滤波k3=medfilt2(J,[7,7]); %进行7*7模板中值滤波k4=medfilt2(J,[9,9]); %进行9*9模板中值滤波subplot(233),imshow(k1);title('3*3模板中值滤波'); subplot(234),imshow(k2);title('5*5模板中值滤波'); subplot(235),imshow(k3);title('7*7模板中值滤波'); subplot(236),imshow(k4);title('9*9模板中值滤波'); 7.用Sobel算子和拉普拉斯对图像锐化:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系H=fspecial('sobel'); %选择sobel算子J=filter2(H,I1); %卷积运算subplot(2,2,3),imshow(J);title('sobel算子锐化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯算子J1=conv2(I1,h,'same'); %卷积运算subplot(2,2,4),imshow(J1);title('拉普拉斯算子锐化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系8.梯度算子检测边缘用MATLAB实现如下:I=imread('xian.bmp');subplot(2,3,1);imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(2,3,2);imshow(I1);title('二值图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I2=edge(I1,'roberts');figure;subplot(2,3,3);imshow(I2);title('roberts算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I3=edge(I1,'sobel');subplot(2,3,4);imshow(I3);title('sobel算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I4=edge(I1,'Prewitt');subplot(2,3,5);imshow(I4);title('Prewitt算子分割结果');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系9.LOG算子检测边缘用MATLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像');I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'log');subplot(2,2,3);imshow(I2);title('log算子分割结果'); 10.Canny算子检测边缘用MATLAB程序实现如下:I=imread('xian.bmp'); subplot(2,2,1);imshow(I);title('原始图像')I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'canny'); subplot(2,2,3);imshow(I2);title('canny算子分割结果');11.边界跟踪(bwtraceboundary函数)clcclear allI=imread('xian.bmp');figureimshow(I);title('原始图像');I1=rgb2gray(I); %将彩色图像转化灰度图像threshold=graythresh(I1); %计算将灰度图像转化为二值图像所需的门限BW=im2bw(I1, threshold); %将灰度图像转化为二值图像figureimshow(BW);title('二值图像');dim=size(BW);col=round(dim(2)/2)-90; %计算起始点列坐标row=find(BW(:,col),1); %计算起始点行坐标connectivity=8;num_points=180;contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_p oints);%提取边界figureimshow(I1);hold on;plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2); title('边界跟踪图像');12.Hough变换I= imread('xian.bmp');rotI=rgb2gray(I);subplot(2,2,1);imshow(rotI);title('灰度图像');axis([50,250,50,200]);grid on;axis on;BW=edge(rotI,'prewitt');subplot(2,2,2);imshow(BW);title('prewitt算子边缘检测后图像');axis([50,250,50,200]);grid on;axis on;[H,T,R]=hough(BW);subplot(2,2,3);imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit'); title('霍夫变换图');xlabel('\theta'),ylabel('\rho');axis on , axis normal, hold on;P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));x=T(P(:,2));y=R(P(:,1));plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); subplot(2,2,4);,imshow(rotI);title('霍夫变换图像检测');axis([50,250,50,200]);grid on;axis on;hold on;max_len=0;for k=1:length(lines)xy=[lines(k).point1;lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);if(len>max_len)max_len=len;xy_long=xy;endendplot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan'); 13.直方图阈值法用MATLAB实现直方图阈值法:I=imread('xian.bmp');I1=rgb2gray(I);figure;subplot(2,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系[m,n]=size(I1); %测量图像尺寸参数GP=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255GP(k+1)=length(find(I1==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置endsubplot(2,2,2),bar(0:255,GP,'g') %绘制直方图title('灰度直方图')xlabel('灰度值')ylabel('出现概率')I2=im2bw(I,150/255);subplot(2,2,3),imshow(I2);title('阈值150的分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I3=im2bw(I,200/255); %subplot(2,2,4),imshow(I3);title('阈值200的分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系14. 自动阈值法:Otsu法用MATLAB实现Otsu算法:clcclear allI=imread('xian.bmp');subplot(1,2,1),imshow(I);title('原始图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系level=graythresh(I); %确定灰度阈值BW=im2bw(I,level);subplot(1,2,2),imshow(BW);title('Otsu法阈值分割图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系15.膨胀操作I=imread('xian.bmp'); %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系se=strel('disk',1); %生成圆形结构元素I2=imdilate(I1,se); %用生成的结构元素对图像进行膨胀subplot(1,2,2);imshow(I2);title('膨胀后图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系16.腐蚀操作MATLAB实现腐蚀操作I=imread('xian.bmp'); %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系se=strel('disk',1); %生成圆形结构元素I2=imerode(I1,se); %用生成的结构元素对图像进行腐蚀subplot(1,2,2);imshow(I2);title('腐蚀后图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系17.开启和闭合操作用MATLAB实现开启和闭合操作I=imread('xian.bmp'); %载入图像subplot(2,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1); %采用半径为1的圆作为结构元素I3=imclose(I1,se); %闭合操作subplot(2,2,3),imshow(I2);title('开启运算后图像');axis([50,250,50,200]);axis on; %显示坐标系subplot(2,2,4),imshow(I3);title('闭合运算后图像');axis([50,250,50,200]);axis on; %显示坐标系18.开启和闭合组合操作I=imread('xian.bmp'); %载入图像subplot(3,2,1),imshow(I);title('原始图像');axis([50,250,50,200]);axis on; %显示坐标系I1=rgb2gray(I);subplot(3,2,2),imshow(I1);title('灰度图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1);I3=imclose(I1,se); %闭合操作subplot(3,2,3),imshow(I2);title('开启运算后图像');axis([50,250,50,200]);axis on; %显示坐标系subplot(3,2,4),imshow(I3);title('闭合运算后图像');axis([50,250,50,200]);axis on; %显示坐标系se=strel('disk',1);I4=imopen(I1,se);I5=imclose(I4,se);subplot(3,2,5),imshow(I5); %开—闭运算图像title('开—闭运算图像');axis([50,250,50,200]);axis on; %显示坐标系I6=imclose(I1,se);I7=imopen(I6,se);subplot(3,2,6),imshow(I7); %闭—开运算图像title('闭—开运算图像');axis([50,250,50,200]);axis on; %显示坐标系19.形态学边界提取利用MATLAB实现如下:I=imread('xian.bmp'); %载入图像subplot(1,3,1),imshow(I);title('原始图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I1=im2bw(I);subplot(1,3,2),imshow(I1);title('二值化图像');axis([50,250,50,200]);grid on; %显示网格线axis on; %显示坐标系I2=bwperim(I1); %获取区域的周长subplot(1,3,3),imshow(I2);title('边界周长的二值图像');axis([50,250,50,200]);grid on;axis on;20.形态学骨架提取利用MATLAB实现如下:I=imread('xian.bmp'); subplot(2,2,1),imshow(I); title('原始图像');axis([50,250,50,200]); axis on;I1=im2bw(I);subplot(2,2,2),imshow(I1); title('二值图像');axis([50,250,50,200]); axis on;I2=bwmorph(I1,'skel',1); subplot(2,2,3),imshow(I2); title('1次骨架提取');axis([50,250,50,200]); axis on;I3=bwmorph(I1,'skel',2); subplot(2,2,4),imshow(I3); title('2次骨架提取');axis([50,250,50,200]); axis on;21.直接提取四个顶点坐标I = imread('xian.bmp');I = I(:,:,1);BW=im2bw(I);figureimshow(~BW)[x,y]=getpts。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一部分数字图像处理实验一图像的点运算实验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命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的灰度均衡函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察matlab环境下图像灰度均衡结果及直方图分布。
(a)原始图像 (b)均衡化后图像(c)原始图像直方图 (d)均衡化后图像直方图六.实验报告要求1、给出实验原理过程及实现代码;2、输入一幅灰度图像,给出其灰度均衡结果,并进行灰度均衡化前后图像直方图分布对比分析。
实验二图像滤波实验2.1 3*3均值滤波一.实验目的1.熟悉matlab图像处理工具箱及均值滤波函数的使用;2.理解和掌握3*3均值滤波的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像增强(均值滤波)函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif');figure,imshow(I);J=filter2(fspecial(‘average’,3),I)/255;figure,imshow(J);四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像增强(均值滤波)函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察matlab环境下原始图像经3*3均值滤波处理后的结果。
(a)原始图像 (b)3*3均值滤波处理后的图像图(3)六.实验报告要求输入一幅灰度图像,给出其图像经3*3均值滤波处理后的结果,然后对每一点的灰度值和它周围24个点,一共25个点的灰度值进行均值滤波,看看对25个点取均值与对9个点取中值进行均值滤波有什么区别?有没有其他的算法可以改进滤波效果。
实验2.2 3*3中值滤波一.实验目的1.熟悉matlab图像处理工具箱及中值滤波函数的使用;2.理解和掌握中值滤波的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像增强(中值滤波)函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif');figure,imshow(I);J=medfilt2(I,[5,5]);figure,imshow(J);四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像增强(中值滤波)函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察matlab环境下原始图像经3*3中值滤波处理后的结果。
(a)原始图像 (b)3*3中值滤波处理后的图像图(4)六.实验报告要求输入一幅灰度图像,给出其图像经3*3中值滤波处理后的结果,然后对每一点的灰度值和它周围24个点,一共25个点的灰度值进行排序后取中值,然后该点的灰度值取中值。
看看对25个点取中值与对9个点取中值进行中值滤波有什么区别?实验三图像几何变换实验3.1 图像的缩放一.实验目的1.熟悉matlab图像处理工具箱及图像缩放函数的使用;2.掌握图像缩放的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像缩放函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif');figure,imshow(I);scale = 0.5;J = imresize(I,scale);figure,imshow(J);四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像缩放函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察matlab环境下图像缩放后的结果。
(a)原始图像 (b)缩放后的图像图(5)六.实验报告要求输入一幅灰度图像,给出其图像缩放后的结果,然后改变缩放比率,观察图像缩放后结果柄进行分析。
实验3.2 图像旋转一.实验目的1.熟悉matlab图像处理工具箱及图像旋转函数的使用;2.理解和掌握图像旋转的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像旋转函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif');figure,imshow(I);theta = 30;K = imrotate(I,theta); % Try varying the angle, theta.figure, imshow(K)四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的图像旋转函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察matlab环境下图像旋转后的结果。
(a)原始图像 (b)旋转后的图像图(7)六.实验报告要求输入一幅灰度图像,给出其图像旋转后的结果,然后改变旋转角度,观察图像旋转后结果柄进行分析。
实验四图像边缘检测实验4.1 边缘检测(Sobel、Prewitt、Log边缘算子)一.实验目的1.熟悉matlab图像处理工具箱及图像边缘检测函数的使用;2.理解和掌握图像边缘检测(Sobel、Prewitt、Log边缘算子)的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像边缘检测(Sobel、Prewitt、Log边缘算子)函数,设置相关参数,再输出处理后的图像。
I = imread('cameraman.tif');J1=edge(I,'sobel');J2=edge(I,'prewitt');J3=edge(I,'log');subplot(1,4,1),imshow(I);subplot(1,4,2),imshow(J1);subplot(1,4,3),imshow(J2);subplot(1,4,4),imshow(J3);四.实验步骤1. 启动matlab双击桌面matlab图标启动matlab环境;2. 在matlab命令窗口中输入相应程序。
书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的边缘检测(Sobel边缘算子、Prewitt边缘算子、Log边缘算子)函数,设置参数;最后输出处理后的图像;3.浏览源程序并理解含义;4.运行,观察显示结果;5.结束运行,退出;五.实验结果观察经过图像边缘检测(Sobel、Prewitt、Log边缘算子)处理后的结果。
(a)原始图像 (b)Sobel边缘算子(c)Prewitt边缘算子 (d)Log边缘算子图(7)六.实验报告要求输入一幅灰度图像,给出其图像边缘检测(Sobel、Prewitt、Log边缘算子)后的结果并进行分析对比。