现在的位置: 首页 > 编程语言 > 正文

matlab函数集锦

2018年10月16日 编程语言 ⁄ 共 4132字 ⁄ 字号 评论关闭

PadSize函数

贴下 matlab源代码

function [pad_ul, pad_lr] = PadSize(offsets,op_type)

if isempty(offsets)
    pad_ul = zeros(1,2);
    pad_lr = zeros(1,2);

else
    num_dims = size(offsets{1},2); //求出最大维数
    for k = 2:length(offsets)
        num_dims = max(num_dims, size(offsets{k},2));
    end
    for k = 1:length(offsets)  //建立大矩阵
        offsets{k} = [offsets{k} zeros(size(offsets{k},1),...
                                       num_dims - size(offsets{k},2))];
    end
    
    pad_ul = zeros(1,num_dims);
    pad_lr = zeros(1,num_dims);
    
    for k = 1:length(offsets) //找出矩阵中的最小值
        offsets_k = offsets{k};
        if ~isempty(offsets_k)
            pad_ul = pad_ul + max(0, -min(offsets_k,[],1));
            pad_lr = pad_lr + max(0, max(offsets_k,[],1));
        end
    end
    
    if strcmp(op_type,'erode')
        % Swap
        tmp = pad_ul;
        pad_ul = pad_lr;
        pad_lr = tmp;
    end
end

输入:offsets是 1*6 cell

<7x2 double>  <5*2 double>  <7x2 double>  <5*2 double>  <5*2 double>  <5*2 double>

max(offsets_k,[],1)   offsets_k是5*2的矩阵-

2 -2
-1 -1
0 0
1 1
2 2

贴个详细的解释:http://blog.sina.com.cn/s/blog_505018ce0101976j.html

细说MATLAB中的MAX函数 
一:MAX函数的几种形式 
(1)max(a) (2)max(a,b) (3)max(a,[],dim) (4)[C,I]=max(a) (5)[C,I]=max(a,[],dim) 
二:举例说明函数意思 
(1)max(a) 
如果a是一个矩阵,比如a=[1,2,3;4,5,6],max(a)的意思就是找出矩阵每列的最大值, 本例中:max(a)=[4,5,6] 
(2)max(a,b) 
如果a和b都是大于1维的矩阵,那么要求a和b的行列的维数都要相等,函数的结果是比较a和b中每个元素的大小,比如: 
a=[1,2,3;4,5,6]      b=[4,5,6;7,8,3] max(a,b)=[4,5,6;7,8,6] 另外,如果a和b中至少有一个是常数,也是可以的。比如:       a=[1,2,3;4,5,6]         b=3        c=5 
      max(a,b)=[3,3,3;4,5,6]  相信大家看了例子都明白了函数的意思了吧       max(b,c)=5 
(3)max(a,[],dim) 
这个函数的意思是针对于2维矩阵的,dim是英文字母dimension的缩写,意思是维数。 当dim=1时,比较的a矩阵的行,也就是和max(a)的效果是一样的;当dim2时,比较的是a矩阵的行。下面举个例子: 
a=[1,2,3;4,5,6]       max(a)=max(a,[],1)=[4,5,6]    比较的第一行和第二行的值                    max(a,[],2)=[3,6]
(4)[C,I]=max(a) 
C表示的是矩阵a每列的最大值,I表示的是每个最大值对应的下标: 下面举例说明: 
还是刚才那个例子:a=[1,2,3;4,5,6]          [C,I]=max(a) 
结果显示的是C=[4,5,6]       I=[2,2,2]   返回的是最大值对应的行号。 
(5)[C,I]=max(a,[],dim) 
同理:如果dim=1时,其结果和[c,i]=max(a)是一样的。 当dim=2时,同样上面的矩阵a,我们运行一下: 
[c,i]=max(a,[],2)     结果是:c=[3,6]   i=[3,3]    i返回的是矩阵a的列号。

ndims()函数

ndims(A)返回结果实际上等于length(size(A))。

通俗一点讲,数组维度就是数组具有的方向。比如普通的二维数组,数组具有行方向和列方向,就是说数组具有两个方向,是一个二维数组。MATLAB中还可以创建三维甚至更高维的数组。

对于空数组、标量和一维数组,MATLAB还是当作普通二维数组对待的,因此它们都至少具有两个维度(至少具有行和列的方向)。特别地,用空白方括号产生的空数组是当作二维数组对待的,但在高维数组中也有空数组的概念,这时候的空数组可以是只在任意一个维度上尺寸等于零的数组,相应地,此时的空数组就具有多个维度了。

MATLAB中计算数组维度可以用函数ndims。

ndims(A)返回结果实际上等于length(size(A))。

【例3-13】数组维度。

解:输入命令后其运行结果如下:
         >> B=2
         B =
              2
         >> ndims(B)
         ans =
              2
         >> c=1:5
         c =
              1     2     3     4     5
         >> ndims(c)
         ans =
              2

通过例3-13可以看到,一般的非多维数组,在MATLAB中都是当作二维数组处理的。

在贴一个函数:链接http://blog.sina.com.cn/s/blog_83057b2401012rxj.html

function :填充图像或填充数组

use:

B = padarray(A,padsize,padval,direction)
    A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:
  padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
             
'replicate'表示图像大小通过复制外边界中的值来扩展;
             
'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
    direction:'pre'表示在每一维的第一个元素前填充;
                'post'表示在每一维的最后一个元素后填充;
                'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
    若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。

[a, method, padSize, padVal, direction] = ParseInputs(varargin{:});

if isempty(a),% treat empty matrix similar for any method

   if strcmp(direction,'both')
      sizeB = size(a) + 2*padSize;
   else
      sizeB = size(a) + padSize;
   end

   b = mkconstarray(class(a), padVal, sizeB);
   
else
  switch method
    case 'constant'
        b = ConstantPad(a, padSize, padVal, direction);//作用是:
        
    case 'circular'
        b = CircularPad(a, padSize, direction);
  
    case 'symmetric'
        b = SymmetricPad(a, padSize, direction);
        
    case 'replicate'
        b = ReplicatePad(a, padSize, direction);
  end      
end

if (islogical(a))
    b = logical(b);
end

function b = ConstantPad(a, padSize, padVal, direction)

numDims = numel(padSize);

% Form index vectors to subsasgn input array into output array.
% Also compute the size of the output array.
idx   = cell(1,numDims);
sizeB = zeros(1,numDims);
for k = 1:numDims
    M = size(a,k);
    switch direction
        case 'pre'
            idx{k}   = (1:M) + padSize(k);
            sizeB(k) = M + padSize(k);
           
        case 'post'
            idx{k}   = 1:M;
            sizeB(k) = M + padSize(k);
           
        case 'both'
            idx{k}   = (1:M) + padSize(k);
            sizeB(k) = M + 2*padSize(k);
    end
end

% Initialize output array with the padding value.  Make sure the
% output array is the same type as the input.
b         = mkconstarray(class(a), padVal, sizeB);
b(idx{:}) = a;



抱歉!评论已关闭.