矩阵的创建方式
在MATLAB中创建矩阵的方法一般有3种:第一种是直接输入矩阵元素;第二种是通过调用函数生成特殊矩阵;第三种是利用M文件创建矩阵。
1.元素直输法创建矩阵
在MATLAB中,创建一个矩阵最简单的方法是使用矩阵构造符号[ ],在[ ]中,使用逗号“,”或空格“ ”分隔矩阵的列,使用分号“;”分隔矩阵的行。
2.调用函数生成特殊矩阵
全0矩阵,A=zeros(n):生成n乘n的全零矩阵;A=zeros(m, n)或者A=zeros([m, n])生成m乘n的全零矩阵;
全1矩阵,A=ones(n)或A=ones(m, n)或A=ones([m, n]);
单位矩阵,A=eye(n)或A=eye(m, n)或A=eye([m, n]);
魔方矩阵,A=magic(n);
均匀分布随机矩阵,A=rand(m, n),生成m乘n的0~1之间的均匀分布的随机矩阵;100*rand(m, n),把生成的0~1之间的随机矩阵的值变为为0~100之间的随机矩阵;round(100*rand(m, n)),把生成的0~100随机数取整数。
正态分布随机矩阵,A=normrnd(MU,SIGMA, m, n):生成m×n形式的正态分布的随机数矩阵。
3.利用M文件创建矩阵
对于比较大且复杂的矩阵,可以为它专门建立一个M文件。
(1)启动MATLAB文本编辑器,并输入待建立的矩阵:
data=[11 21 31 41 51 61 71 81 91;
12 22 32 42 52 62 72 82 92;
13 23 33 43 53 63 73 83 93];
(2)把输入的矩阵存盘(设文件名为 matrix.m)
(3)在MATLAB命令行窗口中输入matrix,就可以运行该M文件,就可以自动建立一个名为data的矩阵,可供使用。在MATLAB中创建矩阵的方法一般有3种:第一种是直接输入矩阵元素;第二种是通过调用函数生成特殊矩阵;第三种是利用M文件创建矩阵。
在MATLAB中创建矩阵的方法一般有3种:第一种是直接输入矩阵元素;第二种是通过调用函数生成特殊矩阵;第三种是利用M文件创建矩阵。
矩阵的类型及转换
MATLAB中读入图像的数据类型是uint8,uint型的优势在于节省空间,涉及运算时要转换成double型,除此之外MATLAB还支持无符号整型(uint8和uint16)。
double函数只是将读入图像的uint8数据转换为double类型,一般不使用;常用的是im2double函数,将uint8图像转为double类型,范围为0-1,如果是255的图像,那么255转为1,0还是0,中间的做相应改变。如果不转换,在对uint8进行加减时会产生溢出。
uint8 | uint16 | double | single |
无符号8位整型 | 无符号16位整型 | 双精度浮点类型 | 单精度浮点类型 |
一般常用的转换函数的基本用法如下:
im2double():将图像数组转换成double精度类型;
im2uint8():将图像数组转换成unit8类型;
im2uint16():将图像数组转换成unit16类型;
im2single():将图像数组转换为单精度浮点类型。
数字图像处理函数及用法
imread(‘filename’) | 将图片以矩阵的形式存储,图片需要在matlab路径下。支持png、jpg、jpeg、tiff、bmp等格式的图片。 | |
imshow(f) | imshow(f,[low high]) | 将f中小于等于low的处理定义为black,大于等于high的处理定义为white。 |
imshow(f,[]) | 将f中最小的元素设定为low,最大元素设定为high,按照线性规则进行一一映射。 | |
imwrite(f,’filename’) | 将f矩阵所表示的图片写入'filename'中。 | |
imfinfo(’filename’) | 获取一张图片的具体信息,包括图片的格式、尺寸、颜色数量、修改时间等等。 | |
impixel(A) | 确定像素颜色值。 | |
bwlabel(A,n) | 返回一个和A大小相同的矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。 | |
numel(A) | 返回数组A中的元素个数。 | |
imresize() | imresize(A, m) | 比例缩放图像。m大于1,放大图像;m小于1,缩小图像。 |
imresize(A,[numrows numcols]) | 非比例缩放图像,numrows和numcols分别指定目标图像的高度和宽度。 | |
imrotate(A,angle,method,bbox) | 对图像进行旋转操作 | angle表示旋转度数,正数表示逆时针旋转,负数表示顺时针旋转。 |
method参数改变插值算法: 'nearest':最邻近线性插值 'bilinear':双线性插值 'bicubic':双三次插值 | ||
bbox参数指定输出图像属性: 'crop':通过对旋转后的图像进行裁剪,保持旋转后输出图像的尺寸和输入图像A的尺寸一样。 'loose':使输出图像足够大,以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 | ||
imadjust(A,[low_in; high_in],[low_out; high_out],gamma) | 用于调节灰度图像的亮度或彩色图像的颜色矩阵 | 将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了。 |
gamma指定描述值A和转化值关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,默认为线性映射。 | ||
mean2(f),取f中全部元素的平均值 | mean(f,1) | 计算f中的全部列元素平均值,返回行向量。 |
mean(f,2) | 计算f中的全部行元素平均值,返回列向量。 | |
size(A),输出矩阵A的行数和列数 | size(A,1) | 输出矩阵A的行数。 |
size(A,2) | 输出矩阵A的列数。 | |
转换函数 | im2double(A) | 将图像数组转换成double类型。 |
im2uint8(A) | 将图像数组转换成unit8类型。 | |
im2uint16(A) | 将图像数组转换成unit16类型。 | |
im2bw(A, level) | 使用阈值变换法把灰度图像转换成二值图像,level设置阈值,取值范围[0, 1]。 | |
logical(A) | 将数值数组A转化为二值图像,将A中所有非0的值转化为逻辑1,0转化为逻辑0。 | |
uint8(A) | 把A中大于255的数全部强制置为255,而小于255的部分则保持原样不变。 | |
mat2gray(A) | 将图像矩阵A归一化为,归一化后矩阵中每个元素的值都在0到1范围内(包括0和1)。 | |
rgb2gray(A) | 将RGB图像或彩色图转换为灰度图像 |