数字图像处理(Matlab)读书笔记
来源:互联网 发布:系统域名免费注册 编辑:程序博客网 时间:2024/04/29 09:35
数字图像处理(matlab)----基本原理
1.数字图像的表示
一幅图像可以被定义为一个二维函数f(x,y)其中x和y是空间(平面)坐标,f在任何坐标点(x,y)处的振幅称为在该点亮度。将坐标值数字化称为取样,将振幅数字化称为量化,当f的x,y分量和振幅都是有限且离散的量时,称该图像为数字图像。
1.1坐标约定
假设对一幅图像f(x,y)取样后,得到了一副有着M行和N列的图像,我们称这幅图像的大小为M×N。坐标(x,y)的值是离散的。在很多图像处理书籍中,图像原点定义在(x,y)=(0,0)。matlab图像处理工具箱中该坐标系统的原点在(r,c)=(1,1)处。
1.2图像的矩阵表示
等式右边是由定义给出的一幅数字图像,该数组中的每一个元素称为像元,图元或像素。一幅图像在matlab表示成矩阵
一个1×N矩阵称为一个行向量,而一个M×1矩阵称为列向量。一个1×1矩阵是一个标量。
1.3读取、显示、保存图像
使用imread函数可以将图像读入MATLAB环境,imread的语法为imread(‘filename’);函数size可给出一幅图像的行数和列数;函数whos可以显示出一个数组的附加信息;函数imshow显示图像;可用函数figure来同时显示两幅图像;函数imwrite将图像写到磁盘上,函数语法为imwrite(f,‘filename’);函数imfinfo保存一幅图像。下边给一个完整的例子并附上结果:
程序:
f =imread('E:\dip\p02-01.bmp');%说明路径+图片名称
g = imread('p02-02.tif');%如果图片在所编写的文件夹内则不需要说明路径
[M,N] = size(f);
whos f %运行结果对应结果图片1
imshow(f); %运行结果对应结果图片2
figure;imshow(g); %运行结果对应结果图片3
imwrite(f,'patient2.jpg','quality',25);%运行结果对应结果图片4
imfinfo patient2.jpg %运行结果对应结果图片5
k = imfinfo ('patient2.jpg');
运行结果:
图1
图2
图3
图4
图5
备注:imshow函数还有如下用法:imshow(f,G)其中f是图像数组,G是显示该图像的灰度级数,若将G省略,则默认的灰度级数是256。imshow(f,[lowhigh])会将所有小于或等于low的值都显示为黑色,所有大于或等于high的值都显示为白色,介于low和high之间的值将以默认的级数显示为中等亮度值。imshow(f,[])可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值。
上述代码中的imwrite函数将保存的图像进行了压缩(保存的格式为jpg),可以省略后边的参数,不进行压缩。
1.4数据类和图像类型
数据类:double 双精度浮点数(8bit每像素);
uint8 无符号8bit整数(1bit每像素);
uint16 无符号16bit整数(2bit每像素);
uint32 无符号32bit整数(4bit每像素);
int8 有符号8bit整数(1bit每像素);
int16 有符号16bit整数(2bit每像素);
int32 有符号32bit整数(4bit每像素);
single 单精度浮点(4bit每像素);
字符类: char 字符(2bit每像素);
逻辑数据类: logical 值为0或1 (1bit每像素);
MATLAB中所有的数值计算都可用double类进行,是图像处理应用中最常用的数据类。uint8主要是从存储设备读取数据时频繁使用,只需要1个字节。
图像类型: 亮度图像、二值图像、索引图像、RGB图像等
图像类和数据类之间的转换:
以下主要以代码和运行结果的形式解析:
1.代码: f =[-0.5,0.5;0.75,1.5];
g = im2uint8(f);
g
运行结果:g =
0 128
191 255
分析:函数im2uint8将输入中所有小于0的值设置为0,而将输入中所有大于1的值设置为255,再将所有的其他值乘以255.
2.代码:f = [1,2;3,4];
g = mat2gray(f);
g
运行结果:g =
0 0.3333
0.6667 1.0000
分析:要把一个double类的任意数组转化成取值范围为[0,1]的归一化double类数组,可以通过函数mat2gray完成。
3.代码: f = uint8([125 50;128 200]);
g = im2double(f);
g
运行结果:g =
0.4902 0.1961
0.5020 0.7843
分析:当输入uint8类数据时,转换只是简单的将输入数组的每个值都除以255.
4.代码: f = [1,2;3,4];
g = mat2gray(f);
gb = im2bw(g,0.6);
gb
运行结果:gb =1+
0 0
1 1
分析:函数im2bw的语法为g=im2bw(f,T),该函数通过阈值处理,将一幅亮度图像f转换为一幅二值图像g。T的取值在[0,1]内。默认为0.5。图像会归一化,然后和阈值进行比较。
1.5数组索引
向量索引:维数为1×N的数组称为行向量,行向量中元素的存取是使用一维索引进行的,V(1)是向量 V的第一个元素,Matlab中向量的元素使用方括号括起,并有空格或者逗号隔开,如:v=[1 2 3 45 6];使用转置运算符( .’)可将行向量转换为列向量;要存取元素的数据块,可以用冒号,如V(1:3),V(1:end),end表示向量中最后一个元素,V(1:2:end)表示索引从1开始,步长为2,直到最后一个元素停止,同时步长可以为负值,索引从end开始;
矩阵索引:在matlab中,矩阵可以用一列被方括号括起并用分号隔开的行向量表示,如:A = [1 2 3; 4 5 6; 7 8 9]显示了3×3矩阵;从矩阵中提取元素和从向量中提取元素是一样的,需要两个索引,一个用于确定行位置,一个用于确定列位置,如A(1,2);矩阵索引使用冒号操作符来对矩阵中选择一个二维元素块,如C3 = A(:,2),会将第二列所有元素输出;sum(A(:))会将向量中的所有元素相加;通过矩阵索引可以进行简单的图像操作,如垂直翻转,裁剪图像,扫描某一行或者某一列元素值等。
1.6一些重要的标准数组
zeros(M,N)生成一个大小为M×N的double类矩阵,其元素均为0;
ones(M,N)生成一个大小为M×N的double类矩阵,其元素均为1;
true(M,N)生成一个大小为M×N的logical类矩阵,其元素均为1;
false(M,N)生成一个大小为M×N的logical类矩阵,其元素均为0;
magic(M)生成一个大小为M×N的”魔术方阵”;
rand(M,N)生成一个大小为M×N的矩阵,矩阵中的元素都是在区间[0,1]中均匀分布的随机数。
randn(M,N)生成一个大小为M×N的矩阵,矩阵中的元素是正态分布的随机数,随机数均值为0,方差为1。
1.7M函数变成简介
M文件由文本编辑器创建,并以filename.m形式的文件名存储,M文件函数的组成部分为:函数定义行、HI行、帮助文本、函数体、命令,函数定义行的形式为function [outputs] = name(inputs);HI行是第一个文本行,它是单个注释行,其前面为函数定义行;帮助文本是紧跟在HI行后面的文本块,二者之间wu空行,帮助文本用来为函数提供注释或在线帮助;函数体包含了所有执行计算并给输出变量赋值的Matlab代码;
算术运算符:矩阵算术运算符由线性代数的规则定义,数组算术运算符可以逐个元素地执行,并且可以用于多维数组,句点(圆点)字符( .)用来区分数组运算符和矩阵运算符。例如,A*B表示传统意义上的矩阵乘法,而A.*B则表示数组乘法.其余运算符(+,-,/,^)均相同.
关系运算符: 运算符A==B(<,<=,>,>=,~=)生成一个与A和B维数相同的逻辑数组,当A与B的相应元素匹配时,新数组中的相应位置取1,其余位置取0;
逻辑运算符:(&,|,~,xor(异或),all(若向量中的所有元素都非零,则返回1),any(若向量中的任一元素都非零,则返回1))Matlab将逻辑1或者非零数值量作为true来处理,将逻辑0和数值0作为false来处理.
流控制:
1. if expression1
statements1
elseif expression2
statements2
else
statements3
end
2. for index = start:increment:end
statements
end
3. while expression1
statements
end
4. break是结束整个循环体,continue是结束单次循环
5. switch switch_expression
case case_expression
statement(s)
case {case_expreeion1,expression2,…}
statement(s)
otherwise
statement(s)
end
6.交互式I/O: 函数disp用来在屏幕上显示信息,disp( argument );函数input用于将数据输入到M函数,t = input(‘message’);若要求输入为数字,可使用函数str2num将串的元素转换为double类数字, n = str2num(t);若输入既有字符又有数字,用strread函数;
- 数字图像处理(Matlab)读书笔记
- 数字图像处理(MATLAB版)---读书笔记一
- 数字图像处理(MATLAB版)---读书笔记二
- 数字图像处理(MATLAB版)---读书笔记三
- 《数字图像处理》读书笔记
- Matlab数字图像处理基础
- matlab数字图像处理(1)
- matlab数字图像处理(2)
- 数字图像处理 读书笔记一 绪论
- 初学matlab和数字图像处理
- 数字图像处理--几个MATLAB函数
- Matlab数字图像处理:DCT变换
- 数字图像处理MATLAB命令汇总
- 数字图像处理matlab基础操作
- 数字图像处理matlab基本命令
- Matlab数字图像处理基础【1】
- Matlab数字图像处理基础【2】
- Matlab数字图像处理基础【3】
- cocos2d-x 节点裁切
- ThreadPoolExecutor解析-主要源码研究
- Forrest 2015年第三季度内存数据库分析报告
- Java 内存
- 检查字符串中出现aa字符串的所有位置
- 数字图像处理(Matlab)读书笔记
- webview 打开 activity
- 互联网+消费金融的打法思考
- 合并两个已经排序的链表
- 怎样判断iOS App是通过哪种途径启动的?
- oracle数据库内存调优
- 返回值类型是接口
- 对于时间管理初识--时间管理入门
- 拓扑排序浅析