教程:通过MATLAB进行数字图像处理仿真的快速上手;

MATLAB是一款数学软件,是MatrixLaboratory(矩阵实验室)的缩写。它把数学中的矩阵和线性代数等知识和传统的计算机编程语言结合到了一起,并内置了丰富的库,让很多算法轻松实现仿真化成为了可能。比如,你通过数学写了一个二维图像灰度变换的函数公式,可以在matlab下轻松地像以C语言math情况下去描述它,并实现赋值计算,再通过它内置的图形计算库还可以把你的算法完完全全仿真出来。

MathWorks公司历史悠久、团队强大、产品专一。它的matlab产品可用于多种学术研究专业,这样首屈一指的软件使得它在全世界都十分流行。也是数字图像处理仿真的好帮手。本文送给从未接触过matlab的朋友们。

关于数图处理的一些前景知识;

图像处理系统基础设计的一个重要特点是测试和实验的有效程度。系统方法和快速原型候选解决方案的能力在减少运算开销和时间方面起着重要的作用。

一幅图像可以定义为一个二维函数f(x,y),其中x和y是空间坐标,而f在任意坐标(x,y)处的幅度称为图像在该点处的亮度和灰度。彩色图像是由多个单色图像组合而成。当x,y和f的幅值都是有限的离散值时,称该函数为数字图像。数字图像是由有限数量的数组组成的,每个元素都有一个特殊的位置和数值。这些元素称为图片元素(picture element)、图像元素(image element)和像素(pixels\pels)。

数字图像处理分为低中高三种处理: 低级处理包括原始操作(降低噪声、对比度增强..),输入输出都是图像。 中级处理(分割..),把图像分为区域或目标,然后对目标进行描述。输入是图像,输出是图像提取出的属性。 高级处理通过执行通常与人类视觉相关的感知函数,来对识别的对象进行总体确认。

matlab与数字图像处理的一些关系;

一幅图像可定义为一个二维数组f(x,y),其中x和y是空间(平面)坐标。图像关于x坐标、y坐标和幅度是连续的。将坐标值数字化称为采样,将幅值数字化称为量化。当x、y和幅值f都是有限的、离散的量时,我们称该图像为数字图像。

采样和量化得到的是一个实数矩阵。假设对一幅图像f(x,y)采样后得到一个M行、N列的图像。我们可以称这幅图像的大小是MxN,坐标的值是离散量。

这样,一幅二维数字图像就可以把它看做成一个矩阵函数f(x,y),把阵列的每个元素赋值就可以显示出东西。这个阵列的每个元素都称为图像元素、图画元素或像素。一个1N的矩阵被称为一个行向量,一个M1的矩阵被称为一个列向量。一个1*1的矩阵则被称为标量。

把二位数字图像看成矩阵,这样我们就可以轻松地在matlab中做各种仿真尝试惹。

matlab数据的表示和运算;

matlab的命令行(>>)窗口是我们操作matlab的一个重要媒介。

我们可以进行一些简单计算,比如把2+2的值赋给变量a。

a=2+2

如果输入的表达式后面加上分号;的话,那么结果就不会显示出来。还有,matlab的变量名是对大小写字母敏感的。它主要支持以下数值运算符:

+(加)、-(减)、*(乘)、/(除)、^(幂)、'(矩阵转制)。

同时,matlab中还提供一些预定义变量可以直接使用。

i或j    根号1

pi      π

abs    数值的大小(实数的绝对值)

angle  复数的角度,以弧度表示

real    求复数的实部

imag    求复数的虚部

cos    余弦函数,假设角度是弧度制

sin    正弦函数。假设角度是弧度制

exp    指数函数

sqrt    求平方根

matlab矩阵的表示和运算;

我们可以指定元素建立向量。创建一个1*4的行向量:

v=[1 3 5 7]; 或 v=[1,3,5,7];

也可以增加向量,变成1 3 5 7 8:

v(5)=8;

用等间隔元素建立向量:

t=0:.1:10;

这个命令创建了一个1*101的向量,元素为0,0.1,0.2,…,10。这个表达式中前面的数字表示初值,后面的数字表示终值,中间的数字表示增量。

函数linespace和logspace也可用于创建向量;

x=linespace(a,b,n);

a表初值,b表终值,n指定元素个数,默认n为100,x是1*n的线性等间隔分部的向量。

x=logspace(a,b,n);

a表示的向量初值为10的a次方,b表示终值为10的b次方,n指定元素个数,默认n为50,x是1*n的向量,这n个元素取以10为底的对数后在[a,b]间等间隔分布。

矩阵可以通过输入行列元素获得:

M=[1 2 4;3 6 8];

M=1.00  2.00    4.00

  3.00  6.00    8.00

矩阵特定位置元素可以通过下面的命令赋值:

M(1,2)=5;

用下面几个命令可以定义一些特殊矩阵:

M=[];            空矩阵

M=zeros(n,m);    n*m的0矩阵

M=ones(n,m);    n*m的1矩阵

M=eye(n);        n*m的单位阵

要得到向量或矩阵的规模可以用下面这两个函数:

[r,c]=size(A)  r、c分别为矩阵A的行数和列数

n=length(b)    n为向量b的长度

matlab部分基本常用功能;

波形的绘制:

plot            绘制曲线图

stem            绘制杆图

hold on        保留当前图形及坐标的全部属性

hold off        恢复图形设置缺省值

grid on        画网格线

grid off        去掉网格线

subplot(m,n,p)  将当前窗口分成m*n个子图,并选择在其中第p个上绘图

figure          创建图形窗口

xlabel          横轴标注

ylabel          纵轴标注

legend          在右上角建立一个图例说明盒

axis            确定坐标轴刻度范围

text            在图中特定位置标注

数据的输入和输出:

load my.mat    调用my.mat数据文件

load data.txt  调用txt文件,并生成与文件名同名的变量

save my t y    把变量t和y保存名为my.mat的二进制文件

save data.txt t y-ascii

把变量t和y保存名为data.txt的8位ASCII文件

其它常用matlab命令:

who    列出内存中的变量名

whos    列出内存中变量的详细信息

clc    清除命令窗口

clear  清除内存变量和函数

clf    清除图形窗口

sound  对声音进行回放

help    帮助

你还可以尝试在安卓或ios端安装matlab官方的远程软件操控电脑端的matlab,需要局域网环境和较新版本的matlab。

connector on

connector on password

connector off

matlab下的数字图像处理快速上手;

读入数字二维图像文件到matlab变量f:

f=imread('test.png');

在新的图形窗口显示变量f中的图像:

figure,imshow(f)

写入图像write函数(调整质量的范例):

imwrite(f,'test.png','quality','q');

q是0到100的一个整数,数字越小劣化越高

matlab提供惹一个图像处理工具箱,它把matlab数值计算环境扩展到图像处理的函数合集。

工具箱支持4种图像类型:

灰度级图像(Gray-scale images)

二值图像(Binary images)

索引图像(Indexed images)

RGB图像(RGB images)

类和图像类型:

double      双精度浮点数,范围±10的308次方(8byte/元素)

single      单精度浮点数,范围±10的38次方(4byte/元素)

uint8      无符号8字节整数,范围[0,255](1byte/元素)

uint16      无符号16字节整数,范围[0,65535](2byte/元素)

uint32      无符号32字节整数,范围[0,4294967295](4byte/元素)

int8        有符号8字节整数,范围[-128,127](1byte/元素)

int16      有符号16字节整数,范围[-32768,32767](1byte/元素)

int32      有符号32字节整数,范围[-2147483648,2147483647](4byte,元素)

char        字符(2字节/元素)

logical    值为0或1(1字节/元素)

类uint8和logical广泛地用于图像处理,浮点类double和single用于计算灰度的操作。

灰度级图像:一幅灰度级图像是一个数据矩阵,矩阵的值表示灰度的浓淡。

二值图像:一幅二值图像是一个取值只有0和1的逻辑数组。使用函数logical可将数值数组转换为二值图像。

判断c是否为二值数组:islogical(c)

转换变量A到g变为二值图像:g=mat2gray

matlab下的M文件;

M文件是大量MATLAB命令的集合,它以文本文件的形式存储,文件后缀".m"。M文件可以是一个有输入、输出变量的函数,也可以是一系列的命令脚本。可以直接放到matlab里执行。

引例,一个计算两数之和的函数:

创建:edit z

function z=yplus(y,x)

z=y+x;

调用:z=yplusx(2,3)

关系运算符:

<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、~=(不等于)。

逻辑运算符:

&(逐个元素"与")、|(逐个元素"或")、~(逐个元素"非")、&&(标量"与")、||(标量"或")。

流控制语句:

if          if与else和elseif一起,执行基于指定逻辑条件的一组语句

for        对一组语句执行规定次数

while      根据规定的逻辑条件,对一组语句执行不确定的次数

break      中止执行for或while循环

continue    将控制传递到for或while循环的下一次迭代,跳过循环体中所剩余的语句

switch      switch与case和otherwise一起,根据规定的值或字符串执行不同的语句组

return      使执行返回到调用参数

try...catch 若在执行过程中检测到错误,则改变流控制

matlab函数tic和toc可用于测量函数执行的时间。

tic;sinfun1(100);toc

函数timeit可用于得到函数调用的可靠的可重复的时间测量。

s=timeif(f)

利用矩阵和向量形式写的M文件效率比较高。循环和if语句也可以在matlab中使用,但是计算效率较低,所以要谨慎使用。

向量化说明和函数meshgrid的介绍。

我们用matlab基于如下公式写函数来创建一幅合成图像:f(x,y)=Asin(u0x+v0y)

for循环版:

function f=twodsin1(A,u0,v0,M,N)

f=zeros(M,N);

for c=1:N

    v0y=v0*(c-1);

    for r=1:M

        u0x=u0*(r-1);

        f(r,c)=A*sin(u0x+v0y);

    end

end

meshgrid向量版:

function f2=twodsin2(A,u0,v0,M,N)

    r=0:M-1;

    c=0:N-1;

    [C,R]=meshgrid(c,r);

    f2=A*sin(u0*R+v0*C);

end

检验:

timeit(@()twodsin1(1,1/(4*pi),1/(4*pi),512,512))

f=twodsin1(1,1/(4*pi),1/(4*pi),512,512);

imshow(f,[])

向量化形式运行的时间约可少50%。

本地磁盘姬

ohayou.aimo.moe

微博:@本地磁盘姬碟酱

Twitter:本地磁盘姬

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容