function outName = phaseAmplify(vidFile, magPhase , fl, fh,fs, outDir, varargin)%'sigma', sigma,'pyrType', pyrType,'scaleVideo', 0.5
%% Read Video
vr = VideoReader(vidFile);
[~, writeTag, ~] = fileparts(vidFile);%返回三个参数,那么,中间一个参数是视频文件的名字,最后一个是扩展名
FrameRate = vr.FrameRate;
vid = vr.read();
[h, w, nC, nF] = size(vid);%返回视频文件的大小,通道数以及帧数
%% Parse Input
p = inputParser();% 解析并检查输入名称的有效性,创建一个输入解析器模式,语法 @(x) 创建具有一个输入的匿名函数的句柄。
defaultAttenuateOtherFrequencies = false; %If true, use reference frame phases
pyrTypes = {
'octave', 'halfOctave', 'smoothHalfOctave', 'quarterOctave'};
checkPyrType = @(x) find(ismember(x, pyrTypes));%ismember函数返回的结果是x在pyrTypes里是否存在,若存在返回1,若不存在则返回0.find(X)找出X中的所有非零元素,并返回其索引值
defaultPyrType = 'octave';
defaultSigma = 0;
defaultTemporalFilter = @FIRWindowBP;%f=@(x)cos(x)表示 f 为函数句柄,@是定义句柄的运算符。y=f(x),y=cos(x)
defaultScale = 1;
defaultFrames = [1, nF];%nF是帧数
%addOptional将可选的位置参数添加到输入解析器模式中
addOptional(p, 'attenuateOtherFreq', defaultAttenuateOtherFrequencies, @islogical);%为输入参数指定验证函数。
addOptional(p, 'pyrType', defaultPyrType, checkPyrType);
addOptional(p,'sigma', defaultSigma, @isnumeric); %第四个参数是验证输入值是否能够解析成功的条件
addOptional(p, 'temporalFilter', defaultTemporalFilter);%第二个参数是输入值,第三个参数是输入值的默认值
addOptional(p, 'scaleVideo', defaultScale);% 将可选的位置输入参数 argName 添加到输入解析器模式 p 中。如果函数的输入不包含此可选输入的值,输入解析器会为其赋予 defaultVal 值。
addOptional(p, 'useFrames', defaultFrames);
parse(p, varargin{
:});
refFrame = 1;
attenuateOtherFreq = p.Results.attenuateOtherFreq;%0
pyrType = p.Results.pyrType;%octave
sigma = p.Results.sigma;%3
temporalFilter = p.Results.temporalFilter;%@FIRWindowBP
scaleVideo
基于相位代码 部分注释 针对某一视频 不保证正确 仅供参考
最新推荐文章于 2024-05-23 09:43:12 发布