skelmap.m
来自「在matlab的小波分析中标,设计一个包含若干不连续点的一维信号」· M 代码 · 共 45 行
M
45 行
function [skellist,skelptr,skellen] = SkelMap(maxmap)
% 连接模极大曲线
maxDis = 10;
[scale,n] = size(maxmap);
% 从最细尺度开始连接
rootPos = find(maxmap(1,:));
nchain = length(rootPos);
for i = 1:nchain
if(i==1)
skelptr(i) = 1;
else
skelptr(i) = skelptr(i-1)+skellen(i-1);
end
curScale = 1;
curPos = rootPos(i);
skellen(i) = 1;
% 记录曲线的第一个点
skellist(1:2,skelptr(i)) = [curScale;curPos];
% 根据第一个点记录曲线的符号,小波变换值为局部极大为1,为局部极小则为-1
sign = maxmap(curScale,curPos);
maxmap(curScale,curPos) = 0;
% 依次查找其他点
while(curScale < scale)
curScale = curScale+1;
j = find(maxmap(curScale,:));
circdist = min([ abs(j-curPos) ; abs(j-curPos+n); abs(j-curPos-n) ]);
[dist,pos] = min(circdist);
if ~isempty(pos)
if(sign==maxmap(curScale,j(pos(1))) & abs(curPos-j(pos(1)))<maxDis )
% 与曲线符号相同,且与前一尺度模极大点在最大限制距离内
curPos = j(pos(1));
skellist(1:2,skelptr(i)+curScale-1) = [curScale;curPos];
maxmap(curScale,curPos) = 0;
skellen(i) = skellen(i)+1;
else
curScale = scale;
end
else
curScale = scale;
end
end
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?