❶ DTW算法,我在网上下载了matlab的DTW(动态时间规整)算法的程序,里面计算两个不同维度向量的匹配距离。
你的程序没贴出来啊?
如果受字数限制,可以传到网盘,再把链接贴出来。
❷ matlab匹配问题 dtw算法
我看了一下你的链接和程序.
这是你没定义dtwOptSet,当然dtw和dtwOptSet都是作者自定义的函数,不在matlab的标准库里,这个图也是明显用了3个subplot画的
如果你想运行这个,请去作者推荐的
http://mirlab.org/jang/books/dcpr/introMatlabProgram.asp?title=1-2%20Example%20Programs%20(%A6p%A6%F3%A8%FA%B1o%B5{%A6%A1%BDX)
下载example就可以了.
❸ 【求助】关于《MATLAB扩展编程》中CH13 的例子程序 dtw
wavread改成readwav,前提是你安了voicebox的包
❹ 遗传算法实现数字水印用MATLAB,程序怎么写啊可以把我的积分都给了你
一、嵌入水印信息的MATLAB程序
首先读入原始图象并设置参数,然后嵌入水印信息,程序代码如下:
clear
%
%读入原图象
trueImage=imread('C:\Documents and Settings\ks001\My Documents\My Pictures\lean.tif');
alfa=.1;
LENGTH=2500;
subplot(2,2,1);
imshow(trueImage);
title('原始图象');
%
%对原图象进行DCT变换
dctF1=dct2('C:\Documents and Settings\ks001\My Documents\My Pictures\lean.tif');
subplot(2,2,2);
imshow(log(abs(dctF1)),[ ]);
title('DCT cofficient matrix');
[m,n]=size(dctF1);
%
%产生水印序列并对其排序
radon('right',10);
watermark1=radon(LENGTH,1);
subplot(2,2,3);
title('watermark seqence')
[Y0,I0]=sort(watermark1);
%
%找出水印嵌入位置(幅值较大的n个频域成分)
A=dctF1(:);
[Y1,I1]=sort(A);
x=m*n;
k=LENGTH;
M=zeros(x,1);
%
%修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符)
for i=1:x
if k>=1
M(x)=Y1(x)*(1+alfa*Y0(k));
k=k-1;
else
M(x)=Y1(x);
end
x=x-1;
end
N=zeros(x,1);
x=m*n;
for i=1:x
N(I1(i))=M(i);
end
a=1;
for j=1:n
for i=1:m
dctF2(i,j)=N(a);
a=a+1;
end
end
%
%DCT反变换,得到嵌入水印的图象
idctF1=idct2(dctF2);
subplot(2,2,4);
imshow(idctF1,[ ]);
title('嵌入水印后的图象');
end
二、提取恢复水印信息的MATLAB程序
水印提取过程是水印嵌入过程的逆过程,相对嵌入过程来说比较复杂,难度较大,下面是水印提取检测的MATLAB程序代码:
function watermark_detect(image,Y1,I0,waterMark1)
%image:嵌入水印的图象
%Y1:原始图象的序列排序
%I0:原始水印的序列排序
%waterMark1:原始水印序列
%
%对嵌入水印图象进行DCT变化
dctW1=dct2(image);
%
%找出幅值较大的系数
B=dtW1(:);
[Y1,I2]=sort(B);
[m1,n1]=size(dctW1);
y=m1*n1;
k=length(waterMark1);
N0=zeros(k,1);
%
%提取水印序列
while k>=1
N0(k)=(Y2(y)-Y1(y))/alfa/Y1(y);
k=k-1;
y=y-1;
end
k=length(waterMark1);
waterMark2=zeros(k,1);
for i=1:k
waterMark2(I0(i))=N0(i);
end
%
%选取50个测试序列,其中第10个为提取出的水印
figure;
for i=1;50
if i==10;
waterMark=waterMark2;
else
waterMark=rand(k,1);
end
%计算各个序列与原来水印序列的相关值
c=waterMark'*waterMark1/sqrt(waterMark'*waterMark);
stem(i,c);
hold on;
end
%
三、接下来对嵌入水印的图象进行不同的攻击,用以测试水印的鲁棒性。
程序的目的和程序代码如下:
%
%攻击实验
disp('input you choice according to the following
image processing operation:');
disp('0--exit');
disp('1--smoothing patterns');
%添加噪音
disp('2--adding uniorm noise 添加噪音');
%滤波
disp('3--adding filter [10 10] 滤波');
%剪切
disp('4--cutting part of the image 剪切');
%压缩
disp('5--10 quality JPEG compressing 压缩');
%旋转45度
disp('6--rotate 45 旋转');
%
d=input('please input you choice(请输入您的选择):');
while d~=0
switch d
case 1
watermark_detect(idctF1,Y1,I0,waterMark1);
case 2
WImage2=idctF1;
noise0=10*rand(size(WImage2));
WImage2=WImage2+noise0;
figure;
imshow(WImage2,[ ]);
title('adding uniform noise 添加噪音');
watemark_detect(WImage2,Y1,I0,waterMark1);
case 3
WImage3=idctF1;
H=fspcial('gaussian高斯',[10,10],5);
WImage3=imfilter(WImage3,H);
figure;
imshow(WImage3,[ ]);
title(through filter [10,10] 滤波');
watemark_detect(WImage3,Y1,I0,waterMark1);
case 4
WImage4=idctF1; WImage4(1:128,1;128)=256;
figure;
imshow(WImage4);
title('cutting part of the image 剪切');
watemark_detect(WImage4,Y1,I0,waterMark1);
case 5
WImage5=idctF1;
WImage5=im2double(WImage5);
cnum=10;
dctm=dctmtx(8);
p1=dctm;
p2=dctm.';
imageDCT=blkproc(WImage5,[8,8],'p1*p2*x',dctm,dctm.');
DCTvar=im2col(imageDCT,[8,8],'distinct').';
n=size(DCTvar,1);
DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n;
[m,order]=sort(DCTvar);
cnum=64-cnum;
mask=ones(8,8);
mask(order(1:cnum))=zeros(1,cnum);
im88=zeros(9,9);
im88(1:8,1:8)=mask;
im128128=kron(im88(1:8,1:8),ones(16));
dctm=dctmtx(8);
p1=dctm.';
p2=mask(1;8,1:8);
p3=dctm;
Wimage5=bikproc(imageDCT,[8,8],'p1*(x.8p2)*p3',dctm.',mask(1:8,1:8),dctm);
figure;
imshow(Wimage5);
title('JPEG Image 压缩');
watemark_detect(WImage5,Y1,I0,waterMark1);
case 6 WImage6=idctF1;
WImage6=imrotate(WImage6,45,'bilinear','corp');
figure;
imshow(Wimage6);
title('rotate 45 旋转');
watemark_detect(WImage6,Y1,I0,waterMark1);
case 0
break;
otherwise
error('you have a valid value(您的输入错误)');
end
d=input('please input you choice(请输入您的选择):');
end
%结束
❺ 基于单片机的特定语音识别的DTW算法 怎样用C语言实现 跪求!
建议,非特定人语音识别芯片 LD3320,
或者索性 思索语音识别模块V280,已经开发完毕,直接可以用了。
❻ matlab中实现DTW算法,语句中的t,r代表什么
t和r是当你引用这个dist函数的时候,传的参数
❼ dtw算法在语音识别系统的应用,
DTW是动态时间规整算法,在语音识别系统中通常用于特定人识别,特定人识别即A用户使用这个语音识别系统,B用户使用就会出现语音识别出错或无法识别的现象。
DTW在语音识别系统中,是一个需要用户事先训练的系统。从操作方面上,首先需要训练,对需要控制的命令录制对应的语音;使用时只要说出与训练时同样的语音命令,即可出现识别结果,实现声控。
DTW在语音识别系统中充当数据匹配比对模块。语音识别系统首先采集用户的语音,经过端点检测,找出用户的有效语音而把其他非语音段给删除;然后经过MFCC特征提取,得到用户声音的特征,最后进入DTW,进行欧式距离的比对,距离最小对应的模板,即为识别结果。
希望以上信息对你有所帮助。
❽ DTW算法程序最终输出的D(n,m)是一个距离还是一个矩阵
是一个方阵
❾ 我用DTW算法识别录制的语音后,后面我想用switch case语句调用函数来播放一个音乐文件,程序应该怎么写
几乎不可能实现。播放音乐的同时,还作语音识别,根本就是给语音识别找不痛快吗,音乐就是大干扰源。
补充:
在 Voiceui那个公司的官网上,看到一款语音识别软件,可以语音识别,也可以播放一些MP3。供参考。
❿ matlab中的特定人语音识别算法DTW算法的应用例程
语音识别原理
语音识别系统的本质就是一种模式识别系统,它也包括特征提取、模式匹配、参考模式库等基本单元。由于语音信号是一种典型的非平稳信号,加之呼吸气流、外部噪音、电流干扰等使得语音信号不能直接用于提取特征,而要进行前期的预处理。预处理过程包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。经过预处理的语音数据就可以进行特征参数提取。在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。后续的处理过程还可能包括更高层次的词法、句法和文法处理等,从而最终将输入的语音信号转变成文本或命令。
DTW算法原理
DTW是把时间规整和距离测度计算结合起来的一种非线性规整技术,它寻找一个规整函数im=Ф(in),将测试矢量的时间轴n非线性地映射到参考模板的时间轴m上,并使该函数满足:
D就是处于最优时间规整情况下两矢量的距离。由于DTW不断地计算两矢量的距离以寻找最优的匹配路径,所以得到的是两矢量匹配时累积距离最小所对应的规整函数,这就保证了它们之间存在的最大声学相似性。
DTW算法的实质就是运用动态规划的思想,利用局部最佳化的处理来自动寻找一条路径,沿着这条路径,两个特征矢量之间的累积失真量最小,从而避免由于时长不同而可能引入的误差。