星海湾科技
数字图像处理中MATLAB的相关基础知识
来源:网络 | 作者:星海湾 | 发布时间: 2024-12-23 | 136 次浏览 | 分享到:

矩阵的创建方式

在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进行加减时会产生溢出。


表1 数据类型

uint8 uint16 double single

无符号8位整型 无符号16位整型 双精度浮点类型 单精度浮点类型

一般常用的转换函数的基本用法如下:


im2double():将图像数组转换成double精度类型;


im2uint8():将图像数组转换成unit8类型;


im2uint16():将图像数组转换成unit16类型;


im2single():将图像数组转换为单精度浮点类型。


数字图像处理函数及用法

表2 函数及用法

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图像或彩色图转换为灰度图像