精华内容
下载资源
问答
  • matlab实现短时傅里叶变换的程序源码,自带例子,十分简单易懂,可以做频谱分析。
  • 在Windows操作系统下的MATLAB2019b应用程序中编写程序,待程序调试完成,通过选取相同尺寸、不同质量的三幅图像分别利用变换函数(线性函数、对数函数)和直方图均衡化方法进行灰度变换来探究基于灰度变换的图像...

    图 像 灰 度 变 换 的 计 算 机 实 现 图像灰度变换的计算机实现

    灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。

    P a r t . 0 实 验 目 的 仅 限 于 学 习 交 流 Part.0 实验目的^{仅限于学习交流} Part.0

    1. 熟悉图像灰度变换的理论;
    2. 掌握空域法进行数字图像灰度变换的原理;
    3. 学习VC++ 6.0/matlab的编程方法;
    4. 验证直方图均衡化处理理论;

    P a r t . 1 实 验 内 容 仅 限 于 学 习 交 流 Part.1 实验内容^{仅限于学习交流} Part.1

    1. 掌握高级语言编程技术;
    2. 选取相同尺寸、 不同质量的多幅图像(至少两幅)利用变换函数(可根据情况采用指数函数、 对数或线性函数等)和直方图均衡化方法进行灰度变换;
    3. 分析处理结果。

    P a r t . 2 实 验 源 代 码 仅 限 于 学 习 交 流 Part.2 实验源代码^{仅限于学习交流} Part.2

    *代码调试不易。转载请标明出处,谢谢!

    % 日期 20201218% 主题 实验二:图像灰度变换
    % 要求 
    %       1)掌握高级语言编程技术;
    %       2)选取相同尺寸、不同质量的多幅图像(至少两幅)
    %          利用变换函数(可据情况采用指数函数、对数或线性函数等)和
    %          直方图均衡化方法进行灰度变换;
    %       3)分析处理结果。
    
    % Matlab相关语句语法:
    % J = imadjust(I);         % 调整图像强度值或颜色映射
    % J = imadjust(I,[low_in; high_in],[low_out; high_out]);
    % J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma);
    % 
    % IM2 = imcomplement(IM);  % 补码图像
    % % 如果im是double类的灰度或rgb图像,则可以使用表达式1-im代替此函数。
    % % 如果im是二进制图像,则可以使用表达式~im代替此函数。
    % 
    % I2 = im2uint8(I);  % 将图像转换为8位无符号整数
    % 
    % % 将矩阵转换为灰度图像
    % I = mat2gray(A, [amin amax]);  
    % % amin和amax是a中与i中的0.01.0相对应的值。
    % % 小于amin的值变为0.0,大于amax的值变为1.0% I = mat2gray(A);  
    % % 将amin和amax的值设置为a中的最小值和最大值。
    
    clear;clc;close all
    
    %% NO.1 小男孩
    T = imread('pout.tif');
    try
        T=rgb2gray(T);    % 如果是RGB图像,转成灰度图
    catch
        % 否则,不做变换
    end
    T_imadjust = imadjust(T);
    % imadjust通过将输入强度图像的值映射到新值来增加图像的对比度,
    % 默认情况下,1%的数据在输入数据的低强度和高强度下饱和。
    % T_imadjust1 = imadjust(T,[0 1],[0.5 0.75]);   % 调整图像颜色映射 = Black-white
    % T_imadjust2 = imadjust(T,[0; 1],[0.5; 1],5);  % 调整图像强度值或颜色映射
    T_imadjust3 = imcomplement(T);  % 补码图像
    T_imadjust4 = im2uint8(mat2gray(log(1+double(T)))); % 灰度对数变换
    T_histeq = histeq(T);
    % histeq执行直方图均衡化。它通过变换亮度图像中的值来增强图像的对比度,
    % 使输出图像的直方图与指定的直方图近似匹配(默认为均匀分布)。
    % T_adapthisteq = adapthisteq(T);
    % AdapterHisEQ执行对比度受限的自适应直方图均衡化。
    % 与histeq不同,它对小数据区域(tiles)而不是整个图像进行操作。
    % 每个直方图的均匀分布与每个直方图的对比度大致匹配。为了避免放大图像中可能存在的噪声,可以限制对比度增强。
    figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
    subplot(3,4,1),imshow(T),title('[原始图像]');  
    subplot(3,4,2),imhist(T),title('[对应直方图]');
    subplot(3,4,5),imshow(T_imadjust3),title('[补码图像]');  
    subplot(3,4,6),imhist(T_imadjust3),title('[对应直方图]');
    subplot(3,4,9),imshow(T_imadjust),title('[线性灰度变换]');  
    subplot(3,4,10),imhist(T_imadjust),title('[对应直方图]');
    
    subplot(3,4,3),imshow(T),title('[原始图像]');  
    subplot(3,4,4),imhist(T),title('[对应直方图]');
    subplot(3,4,7),imshow(T_imadjust4),title('[对数灰度变换]');  
    subplot(3,4,8),imhist(T_imadjust4),title('[对应直方图]');
    subplot(3,4,11),imshow(T_histeq),title('[直方图均衡化]');  
    subplot(3,4,12),imhist(T_histeq),title('[对应直方图]');
    
    %% NO.2 轮胎
    T = imread('tire.tif');
    try
        T=rgb2gray(T);    % 如果是RGB图像,转成灰度图
    catch
        % 否则,不做变换
    end
    T_imadjust = imadjust(T); % 线性灰度变换
    T_imadjust3 = imcomplement(T);  % 补码图像
    T_imadjust4 = im2uint8(mat2gray(log(1+double(T)))); % 对数变换
    T_histeq = histeq(T); % histeq执行直方图均衡化
    
    figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
    subplot(3,4,1),imshow(T),title('[原始图像]');  
    subplot(3,4,2),imhist(T),title('[对应直方图]');
    subplot(3,4,5),imshow(T_imadjust3),title('[补码图像]');  
    subplot(3,4,6),imhist(T_imadjust3),title('[对应直方图]');
    subplot(3,4,9),imshow(T_imadjust),title('[线性灰度变换]');  
    subplot(3,4,10),imhist(T_imadjust),title('[对应直方图]');
    
    subplot(3,4,3),imshow(T),title('[原始图像]');  
    subplot(3,4,4),imhist(T),title('[对应直方图]');
    subplot(3,4,7),imshow(T_imadjust4),title('[对数灰度变换]');  
    subplot(3,4,8),imhist(T_imadjust4),title('[对应直方图]');
    subplot(3,4,11),imshow(T_histeq),title('[直方图均衡化]');  
    subplot(3,4,12),imhist(T_histeq),title('[对应直方图]');
    
    %% NO.3 
    I = imread('car_3.jpg');
    try
        T=rgb2gray(I);    % 如果是RGB图像,转成灰度图
    catch
        T = I; % 否则,不做变换
    end
    T_imadjust = imadjust(T); % 线性灰度变换
    T_imadjust3 = imcomplement(T);  % 补码图像
    T_imadjust4 = im2uint8(mat2gray(log(1+double(T)))); % 对数变换
    T_histeq = histeq(T); % histeq执行直方图均衡化
    
    figure,set(gcf,'outerposition',get(0,'screensize')); % figure窗口最大化
    subplot(3,4,1),imshow(T),title('[原始图像]');  
    subplot(3,4,2),imhist(T),title('[对应直方图]');
    subplot(3,4,5),imshow(T_imadjust3),title('[补码图像]');  
    subplot(3,4,6),imhist(T_imadjust3),title('[对应直方图]');
    subplot(3,4,9),imshow(T_imadjust),title('[线性灰度变换]');  
    subplot(3,4,10),imhist(T_imadjust),title('[对应直方图]');
    
    subplot(3,4,3),imshow(T),title('[原始图像]');  
    subplot(3,4,4),imhist(T),title('[对应直方图]');
    subplot(3,4,7),imshow(T_imadjust4),title('[对数灰度变换]');  
    subplot(3,4,8),imhist(T_imadjust4),title('[对应直方图]');
    subplot(3,4,11),imshow(T_histeq),title('[直方图均衡化]');  
    subplot(3,4,12),imhist(T_histeq),title('[对应直方图]');
    
    
    
    

    P a r t . 3 实 验 结 果 及 分 析 仅 限 于 学 习 交 流 Part.3 实验结果及分析^{仅限于学习交流} Part.3

    由于噪声、光照等外界环境或设备本身的原因,通常我们所获取的原始数字图像质量不是很高,因此在对图像进行后续分析处理之前,一般都需要对原始数字图像进行增强处理。通过图像灰度变换,一方面可以改善图像的视觉效果,另一方面也能突出图像的特征,便于计算机更有效地对图像进行识别和分析。图像增强按所用方法可分成频率域法和空间域法。前者把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。具有代表性的空间域算法有局部求平均值法和中值滤波(取局部邻域中的中间像素值)法等,它们可用于去除或减弱噪声。
    基于空域的算法分为点运算算法和邻域去噪算法。点运算算法即灰度级校正、灰度变换和直方图修正等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。邻域增强算法分为图像平滑和锐化两种。平滑一般用于消除图像噪声,但是也容易引起边缘的模糊。常用算法有均值滤波、中值滤波。锐化的目的在于突出物体的边缘轮廓,便于目标识别。常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等。
    亮度的最大值与最小值之比称为对比度,通过提高图像的视觉效果可以达到增强图像的目的。有些图像的对比度很差,例如X光照片或卫星多光谱图像。因此,需要对图像中的每一个像素的灰度进行灰度标尺变化,扩大图像的灰度范围,达到增强的目的。这是对图像视觉效果改善行之有效且相对简单的方法。实验二在Windows操作系统下的MATLAB2019b应用程序中编写程序,待程序调试完成后,通过选取相同尺寸、不同质量的三幅图像分别利用变换函数(线性函数、对数函数)和直方图均衡化方法进行灰度变换来探究基于灰度变换的图像增强效果及其相应的直方图变换情况。程序运行结果如下图所示:

    图1-1 “boy”图像的灰度变换及其直方图均衡化

    图1-1 “boy”图像的灰度变换及其直方图均衡化

    图1-2 “轮胎”图像的灰度变换及其直方图均衡化

    图1-2 “轮胎”图像的灰度变换及其直方图均衡化

    图1-3 “车库”图像的灰度变换及其直方图均衡化

    图1-3 “车库”图像的灰度变换及其直方图均衡化

    当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设备动态范围太窄等因素,都会产生对比度不足从而使图像中的细节分辨不清。这时如将图像灰度线性变换、对数缩放或直方图均衡化,常能显著改善图像的主观质量。图2-1中原始图像灰度范围太窄,通过灰度等级调整使得图像的视觉效果更佳,更清晰。图2-2、2-3中图像灰度失衡,通过调整后图像的细节更加突显。视觉效果好了很多, 更适合人的视觉特性。
    因此图像灰度变换是通过对原图像素值重新分配实现,目的是使图像中表现较暗(或较亮)的像素值,通过灰度变换函数映射的方法使较暗(或较亮)的像素值增大(减小),这样图像的对比度就提高了细节等特征更加突显。由以上三幅图像可以看出:图像灰度变换函数(线性函数、对数函数)和直方图均衡化等方法的处理结果并非总是令人满意,只有对特定图像尝试不同方法才能得到最佳处理效果;此外图像灰度变换处理并不能使原始图像信息增加,其结果只能增强对某种信息的辨别能力,相反这种处理有可能损失一些其他信息。

    P a r t . 4 友 情 链 接 所 需 相 关 资 源 可 留 言 反 馈 获 取 Part.4 友情链接^{所需相关资源可留言反馈获取} Part.4

    1. MATLAB学习索引
    2. GraphPad Prism绘图分析学习记录

    *代码调试不易。转载请标明出处,谢谢!
    如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作分享的最大动力,谢谢!

    References
    [1]阮秋琦.数字图像处理学[M].北京:电子工业出版社, 2001.
    [2]医学影像处理与分析[M]. 电子工业出版社 , 田捷等编著, 2003
    [3]基于MATLAB的系统分析与设计[M]. 西安电子科技大学出版社 , 王晓丹,吴崇明编著, 2000
    [4]朱秀昌, 刘峰, 胡栋.数字图像处理与图像通信[M].北京:北京邮电大学出版社, 2002.
    [5]贾永红.计算机图像处理与分析[M].武昌:武汉大学出版社, 2001.
    [6]何斌, 马天予, 王运坚, 等.Visual c++数字图像处理[M].北京:人民邮电出版社, 2002.
    [7]Venkatesan Rajinikanth,E Priya,Hong Lin,Fuhua Lin. Hybrid Image Processing Methods for Medical Image Examination[M].CRC Press:2020-12-17.
    [8]Ranjan Parekh. Fundamentals of Image, Audio, and Video Processing Using MATLAB®:With Applications to Pattern Recognition[M].CRC Press:2020-12-17.
    [9]Comparison of Edge Detector Performance through Use in an Object Recognition Task[J] . Min C Shin,Dmitry B Goldgof,Kevin W Bowyer. Computer Vision and Image Understanding . 2001 (1)
    [10]A novel zero-crossing edge detectionmethod based on multi-scale space theory. Mengmeng Zhang,Xia Li,Zhihui Yang,Yang Yan g. M Signal Processing (ICS P),2010IEEE10th International Conference . 2010
    [11]医学图像分割算法研究及其在骨分割中的应用[D]. 黄琴波.西安电子科技大学 2011
    [12]刘付桂兰.基于MATLAB图像处理技术及应用[J].科学技术创新,2020(35):64-67.
    [13]一阶边缘检测算法的研究[J]. 朱振伟,刘广瑞,刘巧红. 现代电子技术. 2009(24)
    [14]孙道辉.基于信息融合的图像边缘检测算法实现[J].电子测试,2018(13):53-54.
    [15]李晶晶,王迪,常玲. 基于图像边缘检测算法的应用研究与实现[A]. 中共沈阳市委、沈阳市人民政府、中国农学会.第十三届沈阳科学学术年会论文集(理工农医)[C].中共沈阳市委、沈阳市人民政府、中国农学会:沈阳市科学技术协会,2016:5.
    [16]张慧,冯驰.图像边缘检测算法研究及其MATLAB实现[J].佳木斯职业学院学报,2015(09):330.

    *可以肯定的是学海无涯,这篇文章也会随着对MATLAB的深入学习而持续更新,
    欢迎各位在评论区留言进行探讨交流。

    展开全文
  • matlab中pi是什么意思

    千次阅读 2021-04-19 06:16:24
    解:MATLAB 源程序为 >> t=0:0.001:40; >>ft=5*sawtooth(pi/5*t,0.5); >>plot(t,ft),grid on >> axis([0 40 -10 10]); 其运行结果如下 ......MATLAB中FFT结果的物理意义_数学_自然科学_专业...

    解:MATLAB 源程序为 >> t=0:0.001:40; >>ft=5*sawtooth(pi/5*t,0.5); >>plot(t,ft),grid on >> axis([0 40 -10 10]); 其运行结果如下 ......

    MATLAB中FFT结果的物理意义_数学_自然科学_专业资料。MATLAB中如何使用fft,以及fft计算出来的图像的物理含义 FFT 结果的物理意义最近正在做一个音频处理方面的项目,......

    MATLAB simulink中的基本模块的参数、含义、应用.._其它_职业教育_教育专区。MATLAB simulink 电力线路模块 PI Section Line 单项 ? 型线路单相传输线模块。 电阻,......

    matlab里FFT输出的含义_电子/电路_工程科技_专业资料。在 matlab 或 R 里我们可以直接调用 FFT 函数实现快速傅里叶变换, 然而 FFT 的输出到底是什么含义,经常让......

    7、 在 MATLAB 中,A = [0:1/2:2]*pi,那么 sin(A) = ___[0 1 0 -1 0]___。 8、 在 MATLAB 中,A=[1,2,3;4,5,6;7,8,0],B=[2,1......

    掌握程度予以评价 加分 0-30 分 总分 报告得分+答辩/特色加分 2 PI控制器设计与讨论 1.引言本文讨论的对象是智能交通/高速公路系统 IVHS(习题 7.3),系统通过......

    MATLAB simulink中的基本模块的参数、含义、应用(DOC)_幼儿读物_幼儿教育_教育专区 MATLAB simulink 电力线路模块 PI Section Line 单项? 型线路单相传输线模块。...

    clf; fs=100;N=128; %采样频率和数据点数 n=0:N-1;t=n/fs; %时间序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号 y=fft(x,N); ......

    (2*pi*20*t); %频率为 20Hz 的余弦信号 xy=x+y; 频率为 10Hz, 20Hz 的余弦信号的叠加信号 …..调用 MATLAB 提供的函数[Rxx,tao]=xcorr(x,Lags,'......

    华中科技大学电气学院 matlab 选修课大作业 PI 控制器 2018 级《M...

    MATLABsimulink中的基本模块的参数含义应用_中医中药_医药卫生_专业资料。 电力线路模块 PI Section Line 单项 ? 型线路单相传输线模块。 电阻,电感和电容的传输线,......

    MATLAB simulink中的基本模块的参数、含义、应用_其它_职业教育_教育专区。 电力线路模块 PI Section Line 单项 型线路单相传输线模块。电阻,电感和电容的传输线,......

    函数极值及几个常见无理数pi,e,r的matlab编程实现_理学_高等教育_教育专区。函数极值的 matlab 编程实现 %不讨论区间的情况。 clear clc syms x f=input('请......

    你甚至可以在任意位置添加相关标注 text(-pi/4,sin(-pi/4),'\\leftarrow sin(-\\pi\\div4)') 注意在matlab中"\\"标示对下一个单词进行转义表达 三、其他要......

    (见图 5.3.5) >> theta=-pi:pi/80:pi; >> polar(theta,2*cos(3*theta)) 图 5.3.5 极坐标图 5.4 符号表达式绘图 MATLAB 软件提供了将表达式进行......

    MATLAB 中绘图命令介绍空间的各项绘图命令, 本节将介绍 MATLAB 基本...

    华中科技大学电气学院 matlab 选修课大作业__PI 控制 器 2008 级...

    pha = phase(g) 复制代码 % 对应角度为 -3*pi/4 (=-2.3562) 和 3*pi/4 (=-2.3562) 输出结果是: ang = -2.3562 2.3562 pha = -2.3562 -3......

    基于 PI 控制方式的 7A 开关电源 MATLAB 仿真研究学院:电气与光电工程学院 专业:电气工程及其自动化目录 0 绪论 --- . 基于 PI 控制方式的 7A 开关电源 MATLA......

    展开全文
  • MATLAB数字图像处理详细总结

    千次阅读 2020-08-17 19:52:03
    单精度表示式single,双精度是double,查看变量的字节空间大小whos命令,注意普通数组[],细胞数组{},函数句柄是一个可调用的MATLAB函数的关联,通过句柄可以调用任意函数用@fhandle创建句柄>> fhandle=@sin,>...

    前言

    给一个算法如何写程序https://blog.csdn.net/baidu_38205880/article/details/80241655先在网上找一些参考再写

    算法的一般步骤自顶向下,考虑输入输出,有点像信号中的响应的思想,还要考虑数据结构,特殊输入,增加程序的健壮性,

    下面是数字图像处理matlb方面的知识,看例子是很快理解知识点的一种方案,具体都要实现什么功能,可以做分解,然后每一步都用流程图实现,最后编写代码

    使用说明

    本文参照的图书MATLAB图像处理实例详解,链接地址:https://pan.baidu.com/s/1uUBqJNdWpzTZ21xLZnFMRg
    提取码:3hpc,本文是做图像处理很好辅助博文,具体使用方法是先用ctrl+F来搜索需要处理的函数名称,找到之后再MATLAB中输入函数按F1键获得函数帮助,就可以使用函数了。

    目录

    前言

    使用说明

    一,MATLAB基础

    1.1矩阵的算术运算

    1.2判断循环

    1.3MATLAB绘图

    1.3.1二维图形绘制

    二,MATLAB图像处理基础

    2.1图像类型的转换

    2.2文件信息的读取保存

    三,数字图像的点运算

    3.1图像点运算

    3.2图像的领域操作

    四,图像增强

    4.1空域滤波

    4.2频域滤波

    五,图像复原技术

    5.1空域滤波复原

    5.2图像复原

    六,图像分割

    六,图像变换技术

    七,彩色图像坐标变换

    八,图像压缩编码

    九,图像特征分析

    十,图像形状特征

    10.1形状特征描述

    10.2形态学数字图像处理

    十一,小波变换

    十二,Simulink数字图像处理


    一,MATLAB基础

    按下Tab命令可以出现提示,

    二进制图像函数,im2bw();单精度表示式single,双精度是double,查看变量的字节空间大小whos命令,注意普通数组[],细胞数组{},函数句柄是一个可调用的MATLAB函数的关联,通过句柄可以调用任意函数用@fhandle创建句柄>> fhandle=@sin,>> y1=fhandle(2*pi),y3=sin(2*pi);利用struct()函数创建结构体

    >> student=struct('name',{'liming','nnn'},'number',{'2012','200'}),也可以stu(2).name='mm';
    stu(2).number='11'来建立结构体

    细胞数字作为MATLAB特有的一种数据类型,组成它的元素是细胞,细胞用来存储不同类型数据单元,细胞数组的建立可以用直接赋值法和cell()函数,语句后面有冒号就是先不执行,没有冒号就是直接执行cellplot(student)显示细胞数组的结构,

    1.1矩阵的算术运算

    对角矩阵eye(3),魔方矩阵magic(3),点乘.*,乘*,矩阵比较大小本质上也是一个一个的比返回的结构也是矩阵,就是对应元素是0,表示假,1表示真

    >> A=[1 2 3;2 5 6];
    >> B=[2 2 3;27 8 8];
    >> cl=A<B

    cl =

      2×3 logical 数组

       1   0   0
       1   1   1

    逻辑运算异或xor(A,B)需要维数相同,运算符的优先级,括号运算最高,非运算的优先级也比较高,点乘高于乘,逻辑的其它运算优先级最低

    矩阵:创建一个行矩阵可以有逗号或者空格来分隔每一个元素,行与行之间是用“;”,行列之间是用逗号,创建多行矩阵,行与行之间用分号来分隔,常用的特殊矩阵函数比如ones(n),n是维度,见书的49页

    >> a=[1 2 3];
    >> b=[1,2,3]

    矩阵的操作[A B]表示矩阵横向合并,[A;B]表示纵向合并,用([x],[y]);来表示提取矩阵([1 3],[2 3]),冒号在提取这部分的作用

    [1:3]表示1到3,[:]表示省略,不提取,det()求矩阵行列式的值,transpose()求转置矩阵,求逆矩阵inv(),满秩的方阵才有逆矩阵,在MATLAB中非满秩的方阵也可以求逆矩阵,叫伪逆矩阵pinv(),求矩阵的秩可以用rank()函数,秩就是矩阵中非零元素阶次的最大值,ans是默认的一个变量;

    MATLAB控制语句for,while,if,for 变量=初始:增量:终值,增量省略是默认是1,比如for a=1:6,每一层for循环都以for开始end结束,给矩阵赋值要现有矩阵,比如可以用特殊的值创建矩阵,之后在改变,和我们之前c的不同if在于没有括号,需要加end结束循环,while(循环条件)   end

    >> clear
    >> for a=1:5
    x=a+a;
    end
    >> 

    1.2判断循环

    选择结构if,swich,try,选择结构的作用是根据指点的条件是否可以满足,决定程序的流向,向if,try,for这样的关键字后都不用加";"

    if 表达式

    语句1;

    else

    语句二;

    end

    swich 表达式

    case  表达式1

    语句1

    case 表达式2

    语句2

    otherwise

    语句3

    end

    try是一个错误捕捉语句,程序先执行语句一没有错误就跳出try,有错误就执行语句二,

    try 

    语句1

    catch

    语句2

    end

    A=imread('D:\logi\IMG20160402201058','jpg');
    catch
    A=imread('D:\logi\IMG20160402201059','jpg');
    end
    >> imshow(A)

    影响程序流程走向的程序,称为流程控制语句,break,continue,return,break是终止的是循环体,而continue结束的是一次循环,break可以跳出本次循环,执行语句end的下一条语句,continue语句可以结束本次循环,跳过其后的循环,执行下一次循环,pause语句:其调用格式为pause,则暂停程序运行,按任意键继续,还有一种调用格式为pause(n),就是程序暂停n秒后执行,调用格式为pause on /off,就是允许或禁止之后的程序执行,

    M文件就是 编写函数的,编写好之后可以在命令窗口调用函数,M文件就是一系列命令的集合,M文件分为脚本文件和函数文件脚本文件不接受参数输入,也不返回输出参数,文件执行过程中产生的所有变量都存储在工作空间中,函数文件可以接受参数输入,也有返回值,程序执行完局部变量就会释放不会存储在工作空间中,从新建的地方建立脚本或函数文件,只有输入参数和输出参数会存储在工作空间,而脚本文件只要m文件中变量在工作空间中都可以查到。

    M文件的调试,在有疑问的地方添加变量输出就,查看是否有错,还可以查询工作空间中的变量,可以利用工具的Debug,在matlab中用%号来表示注释,脚本文件的每一行结尾都要有“;”,

    function y%输出参数%=average%函数名%(x%输入参数%)
    y=sum(x)/length(x);
    end

    1.3MATLAB绘图

    MATLAB绘图步骤:

    1)数据准备 确定变量的函数关系及取值范围,明确横坐标变量和纵坐标变量,计算出变量数据,

    2)设置图形窗口位置在指定的位置创建新的绘图窗口,缺省是打开figureN01

    3)绘制图形,生产图形文件:创建坐标轴,调用绘图函数,设置图形中线型,色彩,数据点形等属性

    4)图形的修饰:为了突出图形显示结果,可对生成的图形文件做进一步调整如设置坐标轴的范围和刻度,图形注释(图名,坐标名文字说明等

    5)保存和导出图形,按指定文件格式保存图形导出图形,以方便后续使用

    1.3.1二维图形绘制

    使用函数plot(),用subplot()来分割函数,图形的修饰可以在plot()函数中加参数,具体可以参考68页,plot(x,y,‘b’),t图形的坐标轴限制函数anxis([xmin xmax ymin ymax]),对横轴坐标的标注xlable('string'),标题使用title(‘string’)利用gtext('sting')来用鼠标给函数曲线命名,也就是说用gtext('string'),产生文字用鼠标拖拽在曲线上,用grid函数给图像加栅格

    >> clear
    >> x=0:0.02:2*pi;
    >> y=sin(x);
    >> plot(x,y);
    >> plot(x,y,'b')
    >> plot(x,y,'g')
    >> gtext('sinx')
    >> grid
    1.3.2直方图绘制

    使用函数hist(y,n)将Y的值等分为n段,平均的分在x轴上,然后统计每一段出现的频率,柱状图用bar(x,y)来画,

    matlab中有几种获取帮助的途径

    第一种,也是最有效的就是选中函数名,按F1直接查看该函数的帮助文档;

    •第二种,就是通过命令窗口中(help 函数名)来获取该函数的帮助文档;

    •第三种,就是通过工具栏中的帮助菜单来输入函数名,获取该函数的帮助文档;

    •第四种,就是去matlab官网MathWorks查找函数的帮助文档

    取值是通过函数来实现,具体可以看28页,在matlab中A既可以是变量,也可以是矩阵,一般习惯用小写表示变量,大写表示矩阵,

    二,MATLAB图像处理基础

    1)主要介绍matlab图像处理工具箱可以从help--图形处理工具箱,还可以从左下角start打开;

    2.1图像类型的转换

    图像类型的转换,可以用对应的函数来完成,图像的转换如下图3.11所示RGB转为灰度函数RGB2gray(),其他函数可以参照P80页灰度图像转为索引图像,灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个Mx3的颜色映射表,所以要将灰度图像转换为索引图像,则必须生产对应的颜色映射表,调用函数格式为[x,map]=gray2ind(I,n)就是将灰度图像I转为索引图像,n是灰度级数默认64,[x,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值,索引图像中有颜色,饱和度,亮度信息,灰度图像只保留了亮度信息,将索引图像转为RGB图像,[x,map]指向索引图像,将RGB指向转换过程中形成一份三维数组,然后将索引图像的颜色映射表中的颜色值赋值给三维数组,,二值图像的转换,如果图像转换前不是灰度图像,要先转为灰度图像,然后再通过阈值法把灰度图像转化为二值图像;一个数据矩阵就相当于一幅数字图像,只是在数字图像中对应的数组元素必须在一定的取值范围内可以调用mat2gray()进行转化,格式为I=mat2gray(X,[xmin,xmax]),xmin对应灰度值0,即黑色,xmax对应灰度值为1,即白色,具体可看P84,索引图像和RGB图像的构成比较类似,索引图像是一个数组和一个映射表先找到数组中的值,数组中的值对应一个map值,map值中有颜色信息,而RGB是三个分量的颜色合成色彩信息

     
    >> map=colorcube(128);%指定颜色的数目
    >> x=rgb2ind(RGB,map);

    >> imshow(x,map)%显示索引图像的

    2.2文件信息的读取保存

    文件信息的读取,用imfinfo()来读取文件信息,调用格式为INFO=imfinfo('filename','fmt'),或INFO=imfinfo('filename.fmt')filename是文件名,fmt是文件类型名;图像文件的读取用imread(),彩色图像和灰度图像调用格式为I=imread('filename','fmt')或I=imread('filename.fmt'),索引图像[X,map]=imread('filename','fmt'),还有网络图片的读取,具体参照p93;特殊文件格式的读写,比如GIF[...]=imread(...,'frames',idx),idx是图像的编号,

    >> [I,map]=imread('D:\logi\GIF1.gif',2);
    >> imshow(I,map)

    图像文件的保存,用函数imwrite(),大体使用方法和imread()类似,调用格式为imwrite(I,'filename','fmt'),索引图像的保存为imwrite(X,map,filename','fmt')

    图像文件的显示imtool()工具箱图像浏览器或imshow()通用的常用的;像素信息的显示函数impixel()可以返回选中像素或像素集数据,可以直接将像素坐标作为该函数的输入参数;函数impixelinfo(),>> pixels1=impixel(I)用鼠标选定图像上的点然后显示该点的值,选完之后按Enter结束,impixel()还可以用来显示特定的像素值不用鼠标impixel(I,100,400),100,400分别为横纵坐标;函数impixelinfo()就是用这个函数写完之后显示了图像,你就可以在上面用鼠标点,点了之后就会执行在图像的上方或者下方直接显示该点的像素值

    视频文件的读取,主要函数有aviinfo()和函数aviread()来读取视频文件信息及视频流,新出现的读取函数有mfileinfo(),mmreader()和函数read();视频文件的播放用函数movie(),movie(M),播放M一次,M是一个结构体包含cData和Colormap,movie(M,N)就是播放视频M,N次,movie(M,N,FPS),FPS是帧速率,默认是12帧/秒

    三,数字图像的点运算

    3.1图像点运算

    图像点运算,点运算又称对比度增强,对比度拉伸或灰度变换,是对通过图像中一个像素值,进行运算的图像处理方式B(x,y)=f(A(x,y)),J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)

    将图像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。 
    [M,N]=size(J);          %获得灰度图像数据J的行列数M,N,用imadjust()直接就对RGB图像进行操作,而利用分段线性处理和对数函数处理,都要先把RGB图像转为灰度图像,分段的时候是对坐标分段,也可以根据灰度值进行分段
    图像的空间变换,在MATLAB中图像处理工具箱提供一个专门的函数intransform(),用户可以定义参数实现多种类型的空间变换,包括放射变换(如平移,缩放,旋转,剪切),还有医学上常用的投影变换,B=imtransform(A,TFORM),TFORM是函数maketform()返回的一个结构体,调用格式如下图一,custom可以实现投影变换和放射变换,放射性变换中原图像中某个像素点坐标(x,y)和变换后该像素点坐标(x',y'),关系如下图二,其实这种变换就是矩阵中的坐标变换,变换前的坐标乘上一个矩阵得到变换后的坐标(x',y')
                                            图一                                                                    图二                                                   图三
    主要步骤就是生产结构体,调用结构体imtransform(),需要maketform()函数的配合,size(1,2)可以得到函数的列数,技术数组的大小,xData,YData就是对X,Y的数据范围进行限制,size(I,2)表示取出I中列数,size(I,1)取出I中的行数,fillvalue是对矩阵的填充
    >> Ia=maketform('affine',[cosd(30) -sind(30) 0;sind(30) cosd(30) 0;0 0 1]);
    >> Ib=imtransform(I,Ia);
    平移后的溢出J=ones(M,N,G); 就是不考虑,J=ones(M+abs(a),N+abs(b),G);  %初始化新图像矩阵全为1,大小根据考虑x轴和y轴的平移范围,也就是说平移后的图形如果不对矩阵进行扩大,图像是不能完全显示的
     

    3.2图像的领域操作

    图像的领域操作,在MATLAB中提供了几个实现领域操作的函数,用户可以直接调用这些函数,实现各种操作,通用滑动领域操作函数nlfiler(),列方向领域操作函数colfilt(),分离领域操作函数blockproc(),@符号主要使用于匿名函数,充当函数句柄,如下图所示:比如没有In函数但是有log函数我们可以使用ln=@(x)log(x)就可以调用log了有点像给函数重新命名,X是参数,blockproc()就是 把函数 分为一小块一小块的,调用格式为blockproc(A,[M,N],fun),加入fun这个句柄就是说在分离的同时可以再做旋转等,

    图像的区域选取,可以找到我们感兴趣的区域进行相关操作,MATLAB也提供了一些图像区域选择和操作函数,如多边形区域选择函数roipoly(),是基于区域,roipoly(I,c,r)坐标选择灰度ROI区域选择函数roicolor(),roicolor(I,low,high);根据灰度的范围进行选取,区域填充函数roifill(),就是选择出来的区域,涂上一种颜色,区域滤波函数roifilt2(),介绍一个掩模的概念:就是用一个有洞的纸张挡住图像所看到的部分,h = fspecial(type),是滤波函数

    四,图像增强

    图像增强空间域也叫对比度增强,灰度增强只改变像素点的灰度值,并逐点进行,和周围的其他像素点无关,为了进行灰度变化首先要获得灰度直方图在MATLAB中可以使用imhist(I)函数来获得,彩色图像也可以做直方图,只不过是对三个分量RGB分别做灰度直方图,直方图均衡化用的是histeq(I),直方图均衡化使得图像的色彩分布更加的均匀,不会出现过明或者是过暗的情况,图像的标准差,可以采用std2()计算矩阵的标准差,std()计算向量的标准差,标准差越大,图像的对比度越大,mean()平均值函数,中值滤波函数medfilt2(I),计算两幅大小相同的图像的相关系数用,corr2(I,J);灰度图像的等高线就是灰度相同的点连接成的,利用imcontour(I,n),n是绘制的等高线的数量,

    4.1空域滤波

    空域滤波:线性平均滤波是一种最常用的线性空域滤波,图像的边缘属于高频成分,常用的模板有3x3的,K=imfilter(J, h),表示J卷积H的意思,可以用这个函数或者conv2(J,H)也可以,加噪声的函数imnoise(I, 'salt & pepper', 0.02);顺序统计滤波函数ordfilt2(I, 1, true(5));就是有点像领域滤波的感觉就是用领域内的第一个像素代替目标像素,true(5)表示用5*5的模板,维纳自适应滤波函数是wiener2(J, [5 5]);

    4.2频域滤波

    频域滤波图像增强首先是通过傅里叶变换将图像从空间域变换到频率域,然后反变换回去,频域内的图像增强有低通滤波,高通滤波和同态滤波;低通去除噪声,但是也会使得边缘模糊,matlab里面的字母是分大小写的,Y = fftshift(X);平移零频分量,然后绘制以零为中心的功率,也就是零点跑到中间去了,Y = fft2(X,m,n) 将截断 X 或用尾随零填充 X,以便在计算变换之前形成 m×n 矩阵。Y 是 m×n 矩阵。如果 X 是一个多维数组,fft2 将根据 m 和 n 决定 X 的前两个维度的形状; [X,Y] =  mesh grid(x,y) :输出X的每一行的数值都是复制的x的值;输出Y的每一列的数值都是复制的y的值, mesh grid就是产生这样两个矩阵,时域卷积频域乘积 K=J.*H;,c=b(1:size(b,1),1:size(b,2))表示取出b的这些行和列上的元素,赋值给c,最后一个值不超过size(b,1)的一个向量,size(b,1)是b矩阵的行数,表示求距离函数D=sqrt(U.^2+V.^2);滤波器的类型分为巴特沃斯滤波器和高斯滤波器,带阻滤波器是用来抑制距离频率中心一定距离的一个圆形区域的频率,可以用来消除一定频率范围内的噪声,同态滤波是一种特殊的滤波技术,可用于压缩图像动态范围,且增强对比度,滤波窗口越大图像边缘越模糊,图像去燥效果越好

    五,图像复原技术

    5.1空域滤波复原

    图像复原技术,可以通过imnoise()给图像添加噪声,调用格式为imnoise(I,type,parameters),parameters不同噪声的参数不同,如果是椒盐噪声则表示,椒盐噪声的密度大小,高斯噪声则表示均值和方差,空域滤波方法,首先是均值滤波包括算术均值滤波和几何均值滤波,顺序统计滤波包括中值滤波,中值滤波能够很好的保留图像的边缘,非常适合去除椒盐噪声,效果优于均值滤波,顺序统计滤波还包括最大值,最小值滤波,最大值滤波能够去除椒盐噪声,但是会从黑色物体的边缘去除一些黑色像素,最小值滤波类似,会从白色物体的边缘去除一些白色像素,J=medfilt2(I, [m, n]);二维中值滤波,采用的窗口大小是mxn的,B=ordfilt2(A,order,domain),domain=[0 1 1 0; 1 1 1 1; 1 1 1 1; 0 1 1 0];J=ordfilt2(I, 6, domain);domain是一个模板,order是去除domain中的第6个像素值作为该点像素值;自适应滤波wiener2()可以根据图像中的噪声进行滤波,还可以对噪声进行估计,该函数根据图像的局部方差来调整滤波器的输出,调用格式为J=wiener2(i,[m,n],noise),采用的窗口为mxn,如果不指定窗口大小,默认是3x3的,输入噪声noise为噪声的能量,返还的是图像J,K=imcrop(I, [100, 100, 1024, 1024])是裁剪图像的函数,意思就是从(100,100)的起始坐标开始,裁剪出1024x1024的图像,[K, noise]=wiener2(J, [5, 5]);采用维纳自适应滤波,返回图像K和图像的噪声估计。

    5.2图像复原

    图像复原:1,逆滤波复原,通过傅里叶变换实现,最后用傅里叶反变换,2,自适应滤波优点是复原效果好,计算量较低,PSF=fspecial('motion', LEN, THETA);该函数就是产生滤波模板的,比如产生拉普拉斯算子模板,K=deconvwnr(J, PSF, NSR);这是维纳自适应滤波函数,NSR是信噪比3,约束最小二乘法复原,采用函数deconcreg()进行图像的约束最小二乘法复原,调用格式是J=deconvreg(I,PSF),lucy复原,K=deconvlucy(J, PSF, 5);5是迭代次数,迭代次数越多,复原效果越好;前面的复原方法都需要预先知道退化图像的PSF,但在实际应用中,经常是不知道PSF的情况下对图像进行复原,下面介绍盲解卷积复原,对PSF进行估计,[K, PSF2]=deconvblind(J, INITPSF, 30); INITPSF为输入的PSF估计值,PSF2为真实的PSF的一个估计值,fspecial函数用于创建预定义的滤波算子,可以用来产生噪声模板,或者使用imnoise来直接添加噪声,会与imfilter搭配使用,g = imfilter(f, w, filtering_mode, boundary_options, size_options)其中,f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用“相关”还是“卷积”。boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。具体参数选项见下表:

                              图一                                                                                                           图二

    从定义式中可以看到,互相关函数和卷积运算类似,也是两个序列滑动相乘,但是区别在于:互相关的两个序列都不翻转,直接滑动相乘,求和;卷积的其中一个序列需要先翻转,然后滑动相乘,求和,如果使用算子来模糊图像,需要算子和图像混合后,再使用滤波函数

    六,图像分割

    图像分割主要包括边缘分割技术,阈值分割技术和区域分割技术,边缘分割和我们之前的边缘检测有些类似,常用的有微分算子sobel算子,Roberts算子等,对于图像中的间断点,常用的检测模板为如图二所示,线段的检测用的模板也如上图二所示其中第一个是用来检测0度的直线,第二个模板是用来检测45度的直线,Roberts算子J=edge(I, 'roberts');表示采用roberts算子进行边缘检测,[J, thresh]=edge(I, 'roberts', 35/255);35/255表示所使用的阈值,thresh表示返回的图像分割阈值,这个阈值表示的是图像归一化以后的阈值,其它的算子类似都是直接在后面改相应的名称,[J, thresh]=edge(I, 'prewitt', [], 'both');'both'表示水平和垂直都检测,采用edge()进行边缘提取得到的图像为二值图像,只有黑白两种颜色 []表示占位符,canny算子用来抑制虚假边缘,因为它不依赖边缘方向,canny算子的调用也是通过edge()函数来实现,调用格式和soble算子一致;LOG算子就是拉普拉斯算子,是一种不依赖边缘方向的二阶微分算子,先利用高斯函数进行平滑,然后再利用二阶导数过零点的性质,去检测边缘,拉普拉斯算子就是一个两个方向的二阶偏导数之和,都是采用edge函数;阈值分割技术通过图像的直方图来选取合适的阈值,利用if,else来实现,全局阈值通常都选取波谷的值imhist(i,n)n为指定灰度级显示直方图,[width, height]=size(I);得到图像的行和列,也可以使用im2bw(I)来进行分割,也就是灰度图像转为二值图像,OTSU阈值分割,它的基本原理就是选取一个最佳的阈值将图像分割为两部分,使两部分的方差最大,具有最大的分离性,最佳阈值获取函数是J=graythresh(I),下面也是可以使用if,else来实现或者通过BW = im2bw(I,level),level就是阈值,迭代式阈值分割,获取图像中像素的最大,最小值min(I(:)),max(I(:));区域生长法是一种将具有相似性质的像素集合起来构成区域,区域增长法根据区域内像素的相似性质来聚集像素点的方法,区域内像素的相似度量可以包括平均灰度值,纹理,颜色等信息,从初始区域开始,将相邻的具有同样性质的像素或其它区域归并到目前的区域中,从而逐步增长区域,直至没有合并的为止;还有另外一种分水岭,J=watershed(I, 8);参数里面的8代表8连通,在灰度直方图中的山脊称为分水岭,I=im2double(I) %图像灰度值归一化到[0,1]之间

    六,图像变换技术

    图像变换技术时间域就是空间域:图像Radon变换,在matlab中采用函数radon()进行图像的Radon变换,函数调用格式为R=radon(I,theta);thera为角度,R为图像I在theta方向上的变换值,[R, xp]=radon(I, [0, 45]);xp为对应的坐标值,表示在0度和45度方向进行radon变换,x=xp(row),这表示获取位置,angel=theta(column)这表示获取角度,radon变换可以用来检测直线,就是radon变换中的最大值就对应的图像中最明显的直线,用函数iradon()来计算radon的反变换k=iradon(R,thera),R为radon变换矩阵,thera为角度;傅里叶变换通过函数fft()进行一维离散傅里叶变换,通过函数ifft()进行一维离散傅里叶反变换,二维的采用的是fft2(),函数的调用格式为Y=fft(X),或者Y=fft2(x,m,n)采用快速傅里叶算法,计算矩阵大小为二维离散傅里叶变换,傅里叶变换的一个意义,在频谱上是亮暗不一的亮点,如果频谱中暗的点数更多,那么实际图像是比较柔和的,如果亮点比较多,说明图像比价尖锐,通过函数fft2()得到的频谱图,坐标原点位于图像的左上角,可以通过函数fftshift(X),把坐标原点移至图像的中央,坐标原点是低频,向外是高频,可以对图像在频域进行滤波和增强,real(L)是复数的实部,J=fftshift(fft2(I)); L1=ifft2(ifftshift(K1));正变换的时候是先变换再平移,而反变换的时候是先平移后变换;图像离散余弦变换,实际上是傅里叶变换的实数部分,离散余弦变换DCT,有一个重要性质就是大部分可视化的信息都集中在少数的变换系数上,因此离散余弦变换经常用于图像压缩,例如国际压缩标准JPEG格式就采用了离散余弦变换,在傅里叶变换的过程中,如果被展开的函数是实偶函数,那么其傅里叶变换中只包含余弦项,基于傅里叶变换的这一特点,人们提出了离散余弦变换,DCT变换先将图像函数变换成偶函数的形式,再对其进行二维离散傅里叶变换,DCT变换可以看做一种简化的傅里叶变换,采用dct()进行一维离散余弦变换,采用idct()进行一维离散余弦反变换,二维的使用dct2(A),还可以用B=dct2(A,[m,n])该函数计算图像矩阵A的二维离散余弦变换,返回值为B,通过对A补0或裁剪,使得B的大小为m行n列,P=dctmtx(M);这就是离散余弦变换矩阵,离散余弦变换,变换得到的是离散余弦变换系数,离散余弦变换的一个重要用途就是用于图像的数据压缩,介绍图像数据压缩之前,首先介绍图像的块操作函数blkproc(),调用格式如下B=blkproc(A,[m,n],fun),表示对矩阵A进行块操作,对块的操作函数为fun,返回值的大小A和B相同,colormap gray;表示图像显示的颜色,T'是T 的转置,B=blkproc(I,[8,8],'P1*x*P2',T,T');% x就是每一个分成的8*8大小的块,P1*x*P2相当于像素块的处理函数,p1=T p2=T’,也就是fun=p1*x*p2'=T*x*T'的功能是进行离散余弦变换,B2 = blkproc(B,[8 8],'P1.*x',mask); %舍弃每个块中的高频系数,达到图像压缩的目的,I2=blkproc(B2,[8,8],'P1*x*P2',T',T);  %进行反余弦变换,得到压缩后的图象,正变换还是反变换关键是看T'是在前还是在后,在前反变换;hadamard变换没有直接的变换函数但是可以用hadamard(n),n是阶数产生hadamard变换矩阵,也可以对图像进行hadamard变换H1=hadamard(h1);H2=hadamard(h2);J=H1*I*H2;hough变换用于检测几何形状,[H, Theta, Rho]=hough(BW, 'RhoResolution', 0.5, 'ThetaResolution', 0.5);H为返回的hough变换矩阵,Theta为变换角度\Theta,rho为变换半径,'RhoResolution', 0.5'RhoResolution'为名字,0.5是值,此外hough还有houghpeaks(),还有houghline();lines = houghlines(BW,theta,rho,peaks)表示在hough变换的基础上检测出线,y(:,1)中逗bai号前是行,逗号后du是列,冒号表示从几到几。所以y(:,1)表示第一列的所有元素,radon变换的显示函数是imagesc(J);不是imshow(),如果要显示fft2()的图像,最好把图像进行一下类型转换double型转为uint8()型,使用了ifft2()如果要显示必须imshow(real(L2)),MATLAB图像处理工具箱实现离散余弦变换有两种方法:dct2和dctmtx(1)使用函数dct2,该函数用一个基于FFT的算法来提高当输入较大的方阵时的计算速度。(2)使用由dctmtx函数返回的DCT变换矩阵,这种方法较适合于较小的输入方阵(例如8×8或16×16),imshow(A,[ ])
    inshow(A,[ ])相当于imshow(A,[min(A),max(A)])自动调整数据范围以方便显示

    七,彩色图像坐标变换

    彩色图像坐标变换,一种是面向硬件设备的彩色模型RGB,另外一种是面向视觉感知的彩色图像模型例如HSV模型,HSV模型是通过色调、饱和度、亮度来描述彩色图像,RGB是由红、绿、蓝三原色混合而成,不同模型之间可以进行转化,RGB空间转换到HSV空间,调用函数A=rgb2hsv(M),矩阵M的列分别表示红色、绿色、蓝色的强度,A的列分别表示色调、饱和度、亮度,H=HSV(:,:,1);%提取H矩阵,reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵,维度可以改变但是元素的个数是需要保持不变的,c = jet(m) 返回包含 m 种颜色的颜色图,反过来也是一样的hsv2rgb(H),RGB空间到ycbcr空间,调用函数K=rgb2ycbcr(RGB),RGB必须是一个mxnx3的矩阵,当然也可以K=ycbcr2rgb(ycbcr)

    八,图像压缩编码

    图像压缩编码,编码效率用编码参数来衡量数字图像的熵,图像的平均码长,编码效率,每秒所需的传输比特数为bps=mxnxR/两帧时间间隔,霍夫曼编码是一种把概率大的信息符号以短字长编码,概率小的以长字编码,这种编码形式的平均码子长度最短,具体的方法另外一篇文章中有仔细的说明,sort()是排序函数,Y = floor(X)四舍五入函数,看函数都是从最核心的部分开始看代码,因为其它的变量,或者循环之类都是为,最核心代码服务的,[dict,avglen] = huffmandict(symbols,p);%产生霍夫曼编码词典,返回编码词典dict和平均码长avglen,编码词典就是说比如16编码为001,15编码为100,以后在数据中出现直接来字典里面找,huffmanenco(actualsig,dict); %利用dict对actuals来编码,其结果存放在compress中,matlab的数据类型比如uint8直接决定了数据的范围2^8,可以直接在屏幕上disp('hello'),打印输出,

    九,图像特征分析

    图像特征分析:颜色矩通常直接在RGB空间来计算,颜色分布信息主要集中在低阶矩,一阶矩就是均值,反映了每个颜色分量的平均强度用函数mean2(R),二阶矩就是方差,即不均匀性std(std(R));   ,三阶矩是偏度,三阶矩用定义,可用这些信息来辨识物体;许多图像识别系统都采用颜色直方图作为图像的颜色特征,它所描述的是不同色彩在整幅图像中所占的比例,不关心图像颜色分布的统计特性,常用的颜色空间有RGB颜色空间和HSV空间,imhist(I(:,:,1))%显示红色分辨率下的直方图,灰度直方图的分布,如果都在左边说明该分量主要在较暗的地方出现,如果在最右边说明,该分量主要集中在亮处,h = hsv(:, :, 1);%为色调h赋值,这个模型中颜色的参数分别是:色调(H)大概可以理解为图像上有几种颜色,饱和度(S)图像的鲜艳程度,明度(V)图像是亮还是暗,这些特征可以用来做图像分割,比如分离花和叶子;纹理特征反映物品的质地,比如粗糙度、光滑度、颗粒度,随机性和规范性,卫星遥感地表图像的分析常采用纹理分析,这是因为地表的山脉、河流、森林、城市建筑等表现出不同的纹理,下面介绍几种纹理特征的提取方法比如灰度差分统计,自相关函数,灰度共生矩阵,还有就是基于频谱特征的分析系,常用的纹理特征有平均值、对比度、熵、能量,灰度直方图不能直接进行纹理分析,熵值越大图形纹理越粗糙,平均值反映图像的光滑度;自相关函数是用来描述图像的粗糙度,小数值的纹理测度表示细纹理,大数值的纹理测度表示粗纹理,通常采用自相关函数作为纹理测度,mesh()函数用来画三维图像,光滑的自相关函数变化较小,粗糙的自相关函数变化较快,灰度共生矩阵是有函数的glcms = graycomatrix(I,Name,Value,...),glcm = graycomatrix(I,'Offset',[0 2]);  %图像I的灰度共生矩阵,2表示当前像素与邻居的距离为2,offset为[0 2]表示角度为0为水平方向,要快速的看懂matlab函数就是描述前后注意,还要看例子的参数说明,灰度共生矩阵不直观,常常需要二阶统计量,matlab用stats = graycoprops(glcm,{'contrast','homogeneity'}),'contrast表示对比度,homogeneity同质性,也就是说是对角线的紧密程度,里面的参数还可以是Correlation,Energy一个表示相关,一个表示能量stats是一个结构体,contrast是一个成员变量,具体参考p323;频谱分析法用来在傅里叶变换处获得空间不容易 获得的纹理特征如周期,功率谱等,实际应用中将频谱转换到极坐标简化为S(r,\Theta),确定r则S(\Theta)是一维函数可以确定以原点为中心的圆上行为特征,给定\Theta可以得到从原点某方向上的放射行为,在数字图像处理中通常把周期的变为非周期处理,频谱分析方法还有加伯变换Gabor(gabor)和小波变换具体可以参照P328。

    十,图像形状特征

    10.1形状特征描述

    形状特征描述一般是在物体从图像中分割出来以后进行分析,主要包括图像的轮廓提取和区域划分:先对轮廓进行描述在对边界特征进行描述,链码表示方法就是定好起点后,用4方向或者8方向来描述图形,多变形近似,有三种方法1,基于最小周长的多边形法即把线段拉直,还有两种基于最小均方误差的方法,直接坐标转为极坐标[cita,r]=cart2pol(xp1,yp1);%直角坐标转换成极坐标,polar(cita,r);%画出极坐标下的轮廓图,边缘提取使用edge()函数,区域特征描述,1区域面积描述法,用stats = regionprops(L,properties)来统计区域内的像素点的个数,2四叉树描述法S = qtdecomp(I,threshold)该函数实现对四叉树的分解,I为灰度图像,threshold为阈值,S为分解后的图像,blocks = repmat(uint8(0),size(S));%矩阵扩充为S的大小3拓扑关系,就是孔数和欧拉数,使用函数eul = bweuler(I,n),eul为欧拉数,I为图像,I为二值图像如果不是需要使用im2bw(),n=4或8表示4连通和8连通,Image2=fliplr(I);%对图像做镜像变换---镜像变换 ,log()函数用于缩小图像,还有一种方法矩描述

    10.2形态学数字图像处理

    形态学数字图像处理,数字形态学是建立在微分几何以及随机论基础上的,集合论是数学形态学的基础,腐蚀运算和膨胀运算是数学形态学的两个基本变换,参与运算就是两个对象,,图像A感兴趣的目标,图像B结构元素,结构元素通常是个圆盘,但是它可以是任何元素,结构元素是腐蚀和膨胀最基本的组成部分,在matlab中结构体元素生产函数strel()创建任意大小和形状的结构元素对象,膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程,通过膨胀可以填充图像中的小孔,A+B,腐蚀是消除 边界点,使边界向内部收缩过程,可以消除小且无意义的物体,集合被结构元素腐蚀,记为A-B,采用bw2=imdilate(I, se),I是图像se是结构元素,imerode()可以进行腐蚀操作,开运算即先采用结构元素做腐蚀运算,然后再做膨胀运算,使用相同的结构元素,计为(A-B)+B函数J=imopen(I, se)通过开运算去除了图像中比较小的点,闭运算(A+B)-B,通过函数J=imclose(I, se)有利于把区域连接为一块;高帽滤波是A-开运算,高帽滤波可以增强图像的对比度,调用形式J=imtophat(I, se);,图像的低帽滤波A-闭运算,低帽滤波可以增强图像的边缘,调用形式K=imbothat(I, se);imadd(I, J)图像相加,imsubtract(I,J)两个图像相减;图像的填充通过函数imfill(),J=imfill(I, 'holes')通过holes填充图像中的空洞,返回局部极大值,局部极大值不是最大值,调用如下bw=imregionalmax(I),此函数返回的最大值对应1,其它是0,同样的局部最小值bw=imregionalmin(I);图像边界的测定,通过膨胀腐蚀获取图像边界,膨胀的结果减去腐蚀的结果就是图像的边界,还可以通过函数bwperim(I,n)获取二值图像的边缘,n在二维图像中是4或者8连通,二值图像的形态学操作,可以通过bwmorph()进行二值图像的大量形态学操作,例如图像的骨架化,图像的细化,以及开操作和闭操作,函数功能比较强大,J=bwmorph(I, 'thin');BW2 = bwmorph(BW,operation,n)对二值图像进行n次指定的形态学处理n=Inf表示无穷大,移除图像的内部点保留边界也是用的此函数,不过调用的参数为remove,腐蚀膨胀是最基本的形态学操作,下面还有一些二值图像的其他形态学操作,包括极限腐蚀,查表操作,图像的标记,对象的选择,图像的面积和欧拉数等,采用函数bwulterode()进行极限腐蚀,每个对象最后变为一个像素点为止;查表操作,用函数makelut()用于建立表单,函数applylut()用于查表操作,函数调用格式为lut=makelut(fun,n),其中fun为判断条件的函数,n为领域大小可以去2或者3,查表调用格式为applylut(BW,LUT)该函数采用查表的方式来对二值图像的领域进行操作,LUT为建立的表单,二值图像的标记,对于不同的连通区域分配不同的编号,采用函数bwlabel()只支持二维的二值图像和bwlabeln()支持任意维度的二值图像,函数L=bwlabel(bw,n)n为连通类型为4或者8连通,L标记矩阵和原来的二值图像具有相同的大小,还可以是[L, num]=bwlabel(BW, 8),num为连通区域的数目,二值图像的对象选择使用J=bwselect(I, c, r, 4);c为横坐标数组,r为坐标数组,4是4连通的意思,函数的意思就是从I中把这几个坐标的像素值取出来;二值图像的面积,面积是二值图像中像素值为1的像素个数,采用函数bwarea()计算二值图像的面积,total=bwarea(BW);

    十一,小波变换

    小波变换家族Waveletfamilies,或者是Waveletfamilies(‘n’),waveinfo('fk')看具体的信息,小波是一种快速衰减的波,震荡有零值,不像正弦波,缩放,拉伸和缩放,移动,就是让小波从左到右在信号上走,信号在时间刻度进行缩放,小波有一个带通的性质,相同频率的比率因子变化导致拉伸小波,对应较低的频率,较小的比率导致压缩小波,高频拉伸小波有助于捕捉缓慢的变化,缩小小波有助于捕获突然的变化,转移小波变换,离散小波的运用是去燥和压缩,连续小波变换的输出是系数,傅里叶变换是一个全时域的变换,全时域也就是说是负无穷到正无穷,为了解决傅里叶变换无限大的问题,我们提出了时窗,即Gabor变换也叫短时傅里叶变化,但是缺点是分辨率单一,因为在时域的窗口小,频率的就会宽,一旦宽了之后分辨率就会降低,一旦时域确定频域就会确定,不太自由,之后就提出了小波变换wavelet transtorm (WT),一元积分相当于在某个方向上的投影,小波这里就去寻找一个最佳的投影函数\psi(a,b,t)a是时窗的中心频率,b是频率的量W,压缩降噪就是把频率特别小或者特别大的地方去掉,小波变换的其他具体知识之后再补充,此处介绍小波的MATLAB实现,stem()是柱形的画图函数,小波函数和尺度函数wavefun2()只适合正交小波,具体参照P387,

    小波变换的压缩是基于人眼对高频信息不敏感的特性,低频部分的分量全部或部分保留,去掉高频的部分,系数编码时小波变换用于图像压缩的核心,压缩的实质是对系数的量化压缩,Y=wcodemat(X,nbc);%对图像的数值矩阵进行伪彩色编码,wcodemat还有 解压的能力,[C,S]=wavedec2(X,2,'db4'); %对图像小波分解,image()从数组显示图像,下图a,b分别是压缩和解压缩的图

    十二,Simulink数字图像处理

    Simulink是matlab的图像化编程工具,video and image processing blockset,此处介绍基于simulink的视频及数字图像处理,在下面这个地方启动,computer vision system toolbox需要先建立simulink,然后在里面的tool里面library找,输入在sources中设置图像路径,在sinks中的view观看结果,直接用鼠标把模块拖到simulink的工作空间或者右键直接add进来,用鼠标即可连线,类型转换是在convertion中,图像几何变换,双击模块可以修改里面的参数,其实一个模块就对应着一些matlab的语句,

                         Analysis&Enhancement                                                                   Convertions

                                                                                      Filtering                                                                         

                                              

                                                                形态学操作(  Morephological Operations)

    展开全文
  • 该系统以Visual C++为计算平台,提取出了4个音频特征参数,包括短时平均能量、过零率、频谱能量和倒谱值等。而动画对象采用Opengl技术绘制,动画的动作由提取出来的特征参数来控制,最终实现实时音频控...

    摘要:互联网上传送的数据以图像信息和音频信息等多媒体信息为主。近几年来,多媒体信息越来越趋向多元化和综合化,因而音频信息和视觉信息综合化也成为趋势。在此基础上,音频信息转化成视觉信息成为迫切需求。该系统以Visual C++为计算平台,提取出了4个音频特征参数,包括短时平均能量、过零率、频谱能量和倒谱值等。而动画对象采用Opengl技术绘制,动画的动作由提取出来的特征参数来控制,最终实现实时音频控制动画运动。

    关键词:基于内容;音频;特征参数;动画;实现

    中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)33-9513-02

    Content―based Audio Parameter Extraction and Animation Realization

    ZHOU Wen

    (Shandong normal university, Ji'nan 250014, China)

    Abstract: On the Internet, the datas are transmitted primarily by multimedia informations, including image information and audio information. In the last few years, more and more multimedia informations tend to the multiplication and integration, thus the audio frequency information and the visual information integration also becomes the tendency . On this basis, the audio frequency information into the visual information has become the urgent demand. This system takes Visual C++ as the platform , extracts 4 audio frequency characteristic parameters, including Short-time moderate energy, Zero crossing rate, Frequency spectrum energy , Cepstrum value and so on. The animation object uses the Opengl technology plan.The animation movements are controlled by the characteristic parameter and finally the real-time audio frequency realizes.

    Key words: content-based; audio; parameters; animation; realization

    在当今数字化与网络化时代,多媒体信息逐渐成为互联网信息高速网络上所传送数据的主要部分。多媒体信息包括图像,音频和视频信息。其中,对声音信号进行数字化处理得到的信息就是音频信息。人耳在接受到音频信号后,这些音频信号被大脑皮层中的感知器官处理,而后形成音频场景。但是很多人不能形成音频场景,比如聋哑听力障碍人士。而且,随着多媒体信息的多元化和综合化,音频信息和视觉信息的综合化越来越成为趋势,那么如何将音频信息转化为视觉信息呢?

    本文就该问题,提出了一种将音频信息转化成视觉信息的方法。首先提取音频信息的特征参数,然后用计算机图形学构造动画对象,最后用这些特征参数来控制动画视觉场景。本文结尾部分给出了这种方法的仿真结果。

    1 音频特征提取

    提取音频特征参数之前,首先要对音频文件进行加窗处理[1]。即把音频文件划分一个个小段,每个小段称为一帧,每帧的长度为500毫秒,相邻的两帧之间有340毫秒的重叠,然后对每帧进行音频特征提取。而所谓的音频特征就是用来表征音频信息的数据。根据特征空间的不同,特征提取分为在时域,频域和时频域三类[1]。

    1.1 音频时域特征

    音频的时域特征提取包括短时平均能量,过零率等。短时平均能量反映了音频能量幅度的变化,经常用来区分静音,非静音,清音和浊音[2]。描述函数为: 。其中x(n)表示第m个帧信号第n个采样信号值。过零率是指在一个短时帧内,离散采样信号值由正到负,由负到正变化的次数,反映了信号在短时帧内的平均频率。描述函数如下: 。其中x(n)表示第m个帧信号第n个采样信号值。实际计算中,为了避免静音段的随机噪声产生的过高过零率,这里设定了一个门限值[3]:delta=0.02。当前后两个采样的符号不同,并且差值大于这个门限值时,过零率的数值加1。

    1.2 频域特征提取

    所谓频域特征提取,就是将音频信号先进行傅立叶变换,分析出组成该音频信号的不同频率和不同幅值的谐波,对这些谐波进行特征系数的提取[1]。可提取的频域特征有:能量谱,倒谱特征等。能量谱可用来分析该音频文件能量分布,用来提取构成该音频的主要频率。由帕斯维尔等式:得出,x(t)的能量可以由频域值|x(f)|2计算。|x(f)|2就称为x(t)的能量谱。倒频谱是对数功率谱的频谱。倒谱的基本概念如下,当有两个信号卷积s=Σx(n)v(n-m),s傅里叶变换后成为它们各自傅里叶变换的相乘:S=FT(s)=X(k)V(k),把S取对数再逆傅里叶变换,便得到它们各自对数谱的逆傅里叶变换相加:c=iFT(ln|X(k)|+ln|V(k)|)=iFT(ln|X(k)|)+iFT(ln|V(k)|) ,c便是(实)倒谱。在倒谱中原卷积的信号变成它们倒谱的相加。任何一个语音是由声门波和声道的卷积而成的,用倒谱的方法得到声门波的频率(音调)和声道的特征(共振峰)是提取语音特征参数的一种方法[3]。

    1.3 时频特征提取

    某些音频信号具有很强的时变特性,在这段时间内表现出周期信号的特性,而在另一个时间段表现出噪音特性[2]。对于这些时变剧烈的音频信号,不能仅从时域分析,也不能仅从频域分析,因为傅立叶变换只顾及全局特性,而牺牲局部特性,因而引入短时傅里叶变换[4]。思想是:假定非平稳信号x(t)在分析窗函数g(t)的一个短时间间隔内是平稳的,并移动分析窗函数,使x(x(t))g(t-τ)在不同的有限时间宽度内是平稳信号,从而计算出各个不同时刻的功率谱。

    本系统实现实时音频特征参数控制动画场景,鉴于以上特性,本系统最终提取的音频特征参数是:短时平均能量、短时平均过零率、短时傅频能量、短时倒谱值[5]。

    2 动画对象的构造及实现

    2.1 动画对象构造

    计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学[6]。使用计算机图形学可以利用计算机产生令人赏心悦目的真实感图形。本文动画对象的绘制采用OpenGL[7]。OpenGL作为一种图形与硬件的接口,与其他图形程序相比,大大简化了绘制三维图形的过程。OpenGL具有超强的图形绘制能力,包括绘制物体、启动光照、管理位图、纹理映射、动画、图像增强以及交互技术等功能[8]。

    2.2 交互映射

    一个动画对象的运动形式可以包含多种,包括平移,旋转,变色,伸缩等,其中每一种又可以包含许多形式,例如平移可以分为水平、竖直等;旋转又可以分为沿x轴、沿y轴、沿z轴等。将提取出来的音频特征参数通过自选的形式控制动画对象的动作,使动画对象随着声音特征的变化而起伏,这样便实现了音频信息转化成视觉信息。

    3 仿真结果

    打开音频文件,加载背景图片,显示音频文件的信息,包括文件名,声道,采样率,位长等,同时实时显示提取出来而音频特征参数,包括短时平均能量、过零率、频谱能量和倒谱等,动态显示它们各自的图谱。选择各个参数对应的动画对象及其动作。仿真实验中,短时平均能量控制荷花,使其水平移动;过零率控制荷叶使其水平移动;频谱能量控制蝴蝶,使其弧线移动;倒谱控制月亮,使其水平移动。总的映射结果如图4所示。点击动画播放,最终音频参数控制的动画场景如图5所示。并且结果显示,当音乐播放完毕时,动画停止,实现了实时动画。

    5 结束语

    通过以上方法,提取出了音频的特征参数,实现实时音频参数控制动画对象的运动,将音频信息转化成了视觉信息。通过仿真结果可以看出这种方法的可实现性。当然,这个仿真软件也存在不足,比如动画的对象构造是由OpenGL绘制出来的,代码复杂,与用户交互少等。这些还需要在以后的学习中逐渐改进。

    参考文献:

    [1] 庄越挺,潘云鹤,吴飞,等.网上多媒体信息分析与检索[M].北京:清华大学出版社,2002:122-143.

    [2] 李国辉,李恒峰.基于内容的音频检索:概念和方法[J].小型微型计算机系统,2000(11):1173-1177.

    [3] 何强,何英.Matlab扩展编程[M].北京:清华大学出版社,2002.

    [4] 李博轩.多媒体开发指南[M].北京:清华大学出版社,2000.

    [5] 肖宏伟.Visual C++实效编程百例[M].北京:人民邮电出版社,2002.

    [6] 郭晶,刘韦韦.Visual C灵感编程[M].北京:电子工业出版社,2002.

    [7] 段兴.Visual C++实用程序100例[M].北京:人民邮电出版社,2002.

    [8] 郭兆荣,李菁.王彦,等.Visual C++ OpenGl 应用程序开发[M].北京:人民邮电出版社,2006.

    展开全文
  • 模式识别与人工智能:基于MATLAB 第6章 神经网络聚类设计 在20世纪的很长时间里,科学家们期望使用计算机系统模拟人类思维。大约50年过去了,研究者建立了第一个神经网络的电子硬件模型。从此,大量科学团体致力于...
  • 今天学习了下mybatis,对其中的autoCommit自动提交事务比较好奇,研究了下,把配置和代码都放上mapper.xml如下:/p>PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"...

空空如也

空空如也

1
收藏数 9
精华内容 3
关键字:

matlab中原信号后短时傅里叶变化代码

matlab 订阅