⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 impad.m

📁 有关matlab的电子书籍有一定的帮助希望有用
💻 M
字号:
function b = impad(varargin)
%IMPAD Pad array.

%   SLE, July 1997
%   Copyright 1993-1998 The MathWorks, Inc.  All Rights Reserved.
%   $Revision: 1.6 $  $Date: 1997/11/24 16:20:15 $

[a, padSize, method, params, msg] = ParseInputs(varargin{:});
if (~isempty(msg))
    error(msg);
end

b = feval(method, a, padSize, params{:});
if (islogical(a))
    b = logical(b);
end

%%%
%%% constant
%%%
function b = constant(a, padSize, padValue)
% Extend a by a constant value (default = 0).

if (nargin < 3)
    padValue = 0;
end

% Initialize output array to have the correct size, class, and
% initial value.
numDims = length(padSize);
sizeA = size(a);
if (length(sizeA) < numDims)
    sizeA = [sizeA ones(1,numDims - length(sizeA))];
end
sizeB = sizeA + 2*padSize;
b = repmat(feval(class(a), padValue), sizeB);

% Form index vectors to subsasgn input array into output array.
idx = cell(numDims,1);
for k = 1:numDims
    idx{k} = (1:sizeA(k)) + padSize(k);
end

b(idx{:}) = a;

%%%
%%% symmetric
%%%
function b = symmetric(a, padSize)

if (isempty(a))
    sizeB = zeros(1,length(padSize));
    for k = 1:length(sizeB)
        % This computation is in a loop because padSize might be
        % longer than sizeB.
        sizeB(k) = size(a,k) + 2*padSize(k);
    end
    b = feval(class(a), zeros(sizeB));
    
else
    
    numDims = length(padSize);
    
    idx = cell(numDims,1);
    for k = 1:numDims
        M = size(a,k);
        dimNums = [1:M M:-1:1];
        p = padSize(k);
        idx{k} = dimNums(mod([-p:-1 0:M-1 M:M+p-1], 2*M) + 1);
    end
    
    b = a(idx{:});
end

%%%
%%% replicate
%%%
function b = replicate(a, padSize)
%REPLICATE Extend matrix by replicating rows and columns.

if (isempty(a))
    sizeB = zeros(1,length(padSize));
    for k = 1:length(sizeB)
        % This computation is in a loop because padSize might be
        % longer than sizeB.
        sizeB(k) = size(a,k) + 2*padSize(k);
    end
    b = feval(class(a), zeros(sizeB));
    
else
    
    numDims = length(padSize);
    
    idx = cell(numDims,1);
    for k = 1:numDims
        M = size(a,k);
        onesVector = ones(1,padSize(k));
        idx{k} = [onesVector 1:M M*onesVector];
    end
    
    b = a(idx{:});
    
end

%%%
%%% ParseInputs
%%%
function [a, padSize, method, params, msg] = ParseInputs(varargin)

a = [];
padSize = [];
method = 'constant';
params = {};
msg = '';

if (nargin < 2)
    msg = 'Too few input arguments';
    return;
end

a = varargin{1};
padSize = varargin{2};

if (~isnumeric(a))
    msg = 'Invalid input image';
    return;
end

if (nargin >= 3)
    if (ischar(varargin{3}))
        % IMPAD(A,padSize,'method',params...)
        
        method = lower(varargin{3});
        methodStrings = {'replicate'; 'symmetric'; 'constant'};
        
        idx = strmatch(method, methodStrings);
        if (isempty(idx))
            msg = sprintf('Unknown method string "%s"', method);
            return;
            
        elseif (length(idx) > 1)
            msg = sprintf('Ambiguous method string "%s"', method);
            return;
            
        else
            method = methodStrings{idx};
        end
        
        params = varargin(4:end);
        
    else
        % IMPAD(A,padSize,padVal)
        method = 'constant';
        params = {varargin{3}};
    end
    
end

if (isempty(padSize))
    msg = 'Pad size must not be empty.';
    return
end

if (min(size(padSize)) ~= 1)
    msg = 'Pad size must be a vector.';
    return
end

if (isequal(size(padSize), [1 1]))
    % Turn N into [N N].
    padSize = [padSize padSize];
end
    
% Add trailing zeros if necessary.
if (ndims(a) > length(padSize))
    padSize = [padSize(:)' zeros(1,ndims(a)-length(padSize))];
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -