%%n为你想得到做局的IMF的个数
c = x('% copy of the input signal (as a row vector)
N = length(x)-
% loop to decompose the input signal into n successive IMFs
imf = []% Matrix which will contain the successive IMF, and the residuefor t=1:n
% loop on successive IMFs
%-------------------------------------------------------------------------
% inner loop to find each imf
h = c% at the beginning of the sifting process, h is the signal
SD = 1% Standard deviation which will be used to stop the sifting process
while SD >0.3 % while the standard deviation is higher than 0.3 (typical value) %%筛选停止准则
% find local max/min points
d = diff(h)% approximate derivative %%求各点导数
maxmin = []% to store the optima (min and max without distinction so far)
for i=1:N-2
if d(i)==0% we are on a zero %%导数为0的点,即”此明驻点“,但驻点不一定都是极值点,如y=x^3的x=0处
if sign(d(i-1))~=sign(d(i+1)) % it is a maximum %%如果驻点两侧的导数异号(如一边正,一边负),那么该点为极值点
maxmin = [maxmin, i]%%找到极值点在信号中的坐标(不分极大值和极小值点)
end
elseif sign(d(i))~=sign(d(i+1)) % we are straddling a zero so%%如y=|x|在x=0处是极值点,但该点倒数不存在,所以不能用上面的判
断方法
maxmin = [maxmin, i+1] % define zero as at i+1 (not i) %%这里提供了另一类极值点的判断方法
end
end
if size(maxmin,2) <2 % then it is the residue %%判断信号是不是已经符合残余分量定义
break
end
% divide maxmin into maxes and mins %% 分离极大值纯扒让点和极小值点
if maxmin(1)>maxmin(2) % first one is a max not a min
maxes = maxmin(1:2:length(maxmin))
mins = maxmin(2:2:length(maxmin))
else% is the other way around
maxes = maxmin(2:2:length(maxmin))
mins = maxmin(1:2:length(maxmin))
end% make endpoints both maxes and mins
maxes = [1 maxes N]
mins = [1 mins N]
%------------------------------------------------------------------------- % spline interpolate to get max and min envelopesform imf
maxenv = spline(maxes,h(maxes),1:N) %%用样条函数插值拟合所有的极大值点
minenv = spline(mins, h(mins),1:N)%%用样条函数插值拟合所有的极小值点
m = (maxenv + minenv)/2% mean of max and min enveloppes %%求上下包络的均值
prevh = h% copy of the previous value of h before modifying it %%h为分解前的信号
h = h - m% substract mean to h %% 减去包络均值
% calculate standard deviation
eps = 0.0000001% to avoid zero values
SD = sum ( ((prevh - h).^2) ./ (prevh.^2 + eps) )%% 计算停止准则
end
imf = [imfh]% store the extracted IMF in the matrix imf
% if size(maxmin,2)<2, then h is the residue
% stop criterion of the algo. if we reach the end before n
if size(maxmin,2) <2
break
end
c = c - h% substract the extracted IMF from the signal
end
return
参考资料
http://zhidao.baidu.com/link?url=Dv2ef87TOGx8zcbCT1UJsZ2kutWrm4FuT5kbMZY5mAAn5yv7APibQ1y8fSag5JvbF2fKlI5jhgpTXu95SDRgi_
其实都可以对彩色图像处理的,只是matlab里面的实现不一致。均值滤波和中值滤波matlab函数只考虑了单通道当然就必须转毕型换成灰度图像;小波降噪的matlab函数祥州不知道你是用的那个,肯定也需要把三通道的彩色图像先转换成单通道,分别去噪以后再整合成彩色图像。总的来说一般图像去噪都是对单通道谨数蔽来处理的,因为大部分的filter都是对二维矩阵来 *** 作的,要是对三通道处理也需要分别对不同的通道处理再整合。一般的的查询可在matlab里的帮助界面进行搜索,点击帮助。打开帮助页面,左侧检索栏进行检索需要查询的语句,然后即可查看右侧谨老孝查询结果。
或者在主界面,输入help 空格+你要查询的内容,进行查询。下次你可以尝试一下。
一般程序都会有不懂得语句,或没用过的,可以在刚刚说过的帮助页面进行查询,看如何使用,输入参量什么意义,程序输出结果是什么。
你这个描述祥稿太过于简略了,含氏我只能给出这样的答案了,一般可以都给一点程序,也许会有对答题人帮助。
不过你这个程序的确有点复杂,不根据前后逻辑,和主程序和目的是很难解答的。
你可以看看主程序,再查查帮助。
希望对你有所帮助。谢谢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)