Matlab学习(一):数字图像处理大作业用到的函数

时间:2024-02-16 21:49:00

1.dlmread——将以 ASCII 码分隔的数值数据读入到矩阵中

dt = dlmread(\'data1.txt\',\' \',1,0);
dt = dt(:,1);
save(\'data2.txt\',\'dt\',\'-ascii\');

2.mean

mean(A)    % 求各行的均值
mean(A,2) % 求各列的均值

3.min/max

*dim=1 返回行向量,每列的最大值

 dim=2 返回列向量,每行的最大值

max(A,[],dim) 

4.round 四舍五入取整(向最近的整数取整)

5.struct

s = struct(\'field1\',values1,\'field2\',values2,...) 

这是在建立结构体的时候就赋值,values1,values2就是针对field1,field2所赋的值。field1,field2是域名称。

*“true”或”false”直接创建逻辑数组

6.nargin 判断输入参数个数

7.norm

1、如果A为矩阵
n=norm(A) 
返回A的最大奇异值,即max(svd(A))

n=norm(A,p) 
根据p的不同,返回不同的值p  
1  返回A中最大一列和,即max(sum搜索(abs(A)))  
2  返回A的最大奇异值,和n=norm(A)用法一样 
inf  返回A中最大一行和,即max(sum(abs(A’))) 
 ‘fro’  A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A\'*A)))

2、如果A为向量,norm(A,p)返回向量A的p范数。
即返回 sum(abs(A).^p)^(1/p),对任意 1<p<+∞.

norm(A)返回向量A的2范数,即等价于norm(A,2)。
norm(A,inf) 返回max(abs(A))
norm(A,-inf) 返回min(abs(A))

8.函数句柄

函数句柄:是包含了函数的路径、函数名、类型以及可能存在的重载方法。
函数句柄必须通过专门的定义创建的,而一般的图像的句柄是自动建立的。

创建函数句柄使用@或者str2func命令创建
[email=h_fun=@fun]h_fun=@fun[/email];
h_fun=str2func(\'fun\');
比如说sin函数,[email=h_sin=@sin]h_sin=@sin[/email];   h_sin=str2func(\'sin\');

执行sin函数     feval
feval(\'sin\',pi/2)
ans =
     1
那么使用函数句柄有什么好处呢?
1、提高运行速度。因为matlab对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。
2、使用可以与变量一样方便。比如说,我再这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。因为你创建的function handles中,已经包含了路径,比如说我创建了一个fun
h_fun=str2func(\'rei\');
可以用functions来查看这个function,结果果然已经包括了路径。

functions(h_fun)
ans =
    function: \'rei\'
        type: \'simple\'
        file: \'G:\program\serial232\rei.m\'

 9.arrayfun

利用arrayfun函数可以避免无谓的循环,从而大大提高代码的简介性。
1、A=ARRAYFUN(FUN, B)
FUN是函数句柄,对B中的每一个元素调用FUN函数(计算顺序随意),结果存放于A中,size(A)==size(B)
FUN函数可接受numeric, logical, char, struct, cell的自变量类型。
2、[A, B, ...] = ARRAYFUN(FUN, C, ...)
FUN函数的返回值是一个向量,对B中的每一个元素调用FUN函数,计算结果放在A,B…中。
3、 A = ARRAYFUN(FUN, B, C,  ...)
FUN函数接受参数不唯一,分别调用B, C,  ...中的元素,A(i,j...)=Fun(B(i,j...),C(i,j,...)...),
B,C...大小必须相等。

*注意,如果你的函数y=func(x) 返回的y不是一个标量值,而是矩阵,字符串,cell数组等不单单占一个存储空间的数据时
  要设置cellfun的输出形式UniformOutput为0
  b=cellfun(\'func\',a,\'UniformOutput\',0);
  这时候b也是一个cell矩阵了,每个元素是根据a中计算的结果


例1、Fun调用B中的一个数值

>> s=[1 2;3 4];
>> f=@(x) x^2;
>> arrayfun(f,s)
ans =
     1     4
     9    16

例2、Fun的接受参数是一个向量

>> ss=num2cell(s,2);
>> f=@(x) sum(x{:}.^2);
>> arrayfun(f,ss)
ans =
     5
    25

例3、Fun函数返回值是向量

>> F=@(x) x{:}.^2;
>> cell2mat(arrayfun(F,ss,\'UniformOutput\',false))
ans =
     1     4
     9    16

例4、Fun函数参数不唯一

>> f=@(x,y) x^2+y^2;
>> [X,Y]=meshgrid(-2:2,-1:5);
>> Z=arrayfun(f,X,Y);
>> mesh(X,Y,Z)

例5、Fun函数的参数不唯一,而且都是向量

>> F=@(f,h)sum(diff(f{:}).^2)+sum(diff(h{:}).^2);
>> f=[1,2,3;3,4,5;1,2,5];
>> h=[2,4;4,5;];
>> ff=num2cell(f,2);
>> hh=num2cell(h,2);
>> fff=repmat(ff\',length(hh),1);
>> hhh=repmat(hh,1,length(ff));
>> arrayfun(F,fff,hhh)
ans =
     6     6    14
     3     3    11

 10. fix 向0靠拢取整

11. clf 清除图形

12. imcrop 图像裁剪

调用格式:

I2=imcrop(I,RECT);

X2=imcrop(X,MAP,RECT);

RGB2=imcrop(RGB,RECT);

其中,I、X、RGB分别对应灰度图像、索引图像、RGB图像的数据矩阵,MAP为索引图像颜色表,I2、X2、RGB2分别为各自输入矩阵所对应的输出矩阵。而RECT为可选参数,格式为[XMIN YMIN WIGTH HEIGHT].例如[20 20 40 40],则剪裁后的图像的左上角像素为原图像位置在(20,20)的像素,而剪裁后图像的右下角像素为原图像位置在(60,60)的像素。

另外,如不加参数RECT,将使用鼠标在原图像上划矩形框的方法来实现图像的剪裁,所划矩形框内的图像将在新窗口中输出。

13. cumsum 计算各行的累加值

14. drawnow

将还未处理完的图像实时的显示出来,可以理解为立即执行的plot,变化的plot。

当代码执行时间长,需要反复执行plot时,Matlab程序不会马上把图像画到figure上,这时,要想实时看到图像的每一步变化情况,需要使用这个语句。

15.sub2ind:把数组中元素下标转换为该元素在数组中对应的索引值

在命令窗口输入:
>> A=[4 7 2 9 8;3 9 1 4 3;1 5 9 6 4;8 3 7 1 0]
A =
4 7 2 9 8
3 9 1 4 3
1 5 9 6 4
8 3 7 1 0
则A中每个元素对应的索引如下(MATLAB中数据是按列的方式存储的):
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20
ind=sub2ind(siz,I,J):siz表示要转换的矩阵的行列数,I是要转换矩阵的行标,J是要转换矩阵的列标。I,J的行列数必须相同。ind为输出参数,其行列数与I,J相同。ind即为索引。
在命令窗口中输入:
>> ind=sub2ind(size(A),[1,2;3,4],[1,1;2,2])
则显示
ind =
1 2
7 8
从运算结果可以看出,在矩阵A中,下标(1,1)的索引值为1,下标(2,1)的索引值为2,下标(3,2)的索引值为7,下标(4,2)的索引值为8

16.numel
该函数用于计算数组中满足指定条件的元素个数。若是一幅图像,则numel(A)将给出它的像素数。语法格式: n = numel(A) 返回数组A中元素个数。
17.unique
b = unique (a)         %取集合a的不重复元素构成的向量
18. nnz(A)返回A中非0元素的个数