EDA365电子论坛网
标题:
MATLAB 模式识别
[打印本页]
作者:
baqiao
时间:
2021-9-2 14:47
标题:
MATLAB 模式识别
4 }7 h, u9 h; P& N: J/ J& q2 |" r5 i
识别问题:
# m$ {5 h. ^+ m) {5 e+ ~' i7 z
3 b9 K2 i `$ S. q5 A# T1 v
训练样本-> 特征提取-> 分类器-> 样本类别
" ~ @9 W7 D; s! F! @/ A
1 E, o! T: M7 A) F& c4 `
训练过程
W' V& m& g M
) e& v4 d( g4 A) ~& _3 E
模式 -> 特征提取 -> 分类器 -> 模式类别
3 g& y! i+ m0 r# S8 t L* f- _
( T4 g/ o v) o" y% \5 x% y
识别过程
0 s/ V: B3 |: ]. ~) [+ T9 N1 w
, ?6 C, v6 d p* r6 n3 M; |
最小距离分类器和模板匹配
' h4 H8 W- C- y7 P4 U
7 ~& ?* U, w5 H# G
最小距离分类器实现源码
: W& [8 U: [" t/ U
! A2 `! N9 B9 |+ H# f2 `
clear all load fisheriris %载入Matlab自带的鸢尾属植物数据集 % 每类的前40个样本用于生成代表该类的模板,后10个作为独立的测试样本 m1 = mean( meas(1:40, :) ); %第1类的前40个样本的平均向量 m2 = mean( meas(51:90, :) ); %第2类的前40个样本的平均向量 m3 = mean( meas(101:140, :) ); %第3类的前40个样本的平均向量 % 测试样本集 Test = [meas(41:50, :); meas(91:100, :); meas(141:150, :)]; % 测试样本集对应的类别标签 classLabel(1:10) = 1; classLabel(11:20) = 2; classLabel(21:30) = 3; % 利用最小距离分类器分类测试样本 class = zeros(1, 30); %类标签 for ii = 1:size(Test, 1) d(1) = norm(Test(ii, :) - m1); %与第1类的距离 d(2) = norm(Test(ii, :) - m2); %与第2类的距离 d(3) = norm(Test(ii, :) - m3); %与第3类的距离 [minVal class(ii)] = min(d); %计算最小距离并将距离样本最短的类赋给类标签数组 class end % 测试最小距离分类器的识别率 nErr = sum(class ~= classLabel); rate = 1 - nErr / length(class); strOut = ['识别率为', num2str(rate)]
+ c2 e A$ E* U
5 R) C3 B& m: n: `! b/ {1 p. \
# F7 J% ?6 W( V' F
, U3 B' g E- S" ^" [# h% h
基于相关的 模板匹配
8 F! y8 x* T- `( b3 N
%function Icorr = imcorr(I, w) % function Icorr = imcorr(I, w, ) % 计算图像 I 与子模式 w 的相关响应,并提示最大的响应位置 % % Input:I - 原始图像 % w - 子图像 % % Output:Icorr - 响应图像 I=imread('patterns.bmp'); w=imread('pat1.bmp'); figure,imshow(w); [m, n] = size(I); [m0, n0] = size(w); Icorr = zeros(m-m0+1, n-n0+1); %为响应图像分配空间 vecW = double( w(:) ); %按列存储为向量 normW = norm(vecW); %模式图像对应向量的模 for ii = 1:m-m0+1 for jj = 1:n-n0+1 subMat = I(ii:ii+m0-1, jj:jj+n0-1); vec = double( subMat(:) ); %按列存储为向量 Icorr(ii, jj) = vec' * vecW / (norm(vec)*normW+eps); %计算当前位置的相关 end end % 找到最大响相应位置 [iMaxRes, jMaxRes] = find(Icorr == max( Icorr(:) ) ); figure, imshow(I); hold on for ii = 1:length(iMaxRes) plot(jMaxRes(ii), iMaxRes(ii), 'w*'); plot([jMaxRes(ii), jMaxRes(ii)+n0-1], [iMaxRes(ii), iMaxRes(ii)], 'w-' ); plot([jMaxRes(ii)+n0-1, jMaxRes(ii)+n0-1], [iMaxRes(ii), iMaxRes(ii)+m0-1], 'w-' ); plot([jMaxRes(ii), jMaxRes(ii)+n0-1], [iMaxRes(ii)+m0-1, iMaxRes(ii)+m0-1], 'w-' ); plot([jMaxRes(ii), jMaxRes(ii)], [iMaxRes(ii), iMaxRes(ii)+m0-1], 'w-' ); end
& [2 l O! i% j( ~2 |3 P7 O
/ j1 W) R1 [4 A( t; X! c* h" `
2.png
(85.25 KB, 下载次数: 7)
下载附件
保存到相册
2021-9-2 14:47 上传
) d2 {" j& K- ^
. ~8 M0 @8 C% M& v3 H- c! V4 `& ^
0 u& m6 s/ j7 J3 c: A z% I( ^
相关匹配计算效率源码
& C: J# a8 X1 c3 _6 w
2 q8 T" Z* n C$ a/ G
function Icorr = dftcorr(I, w) % function Icorr = dftcorr(I, w) % 在频域下计算图像 I 与子模式 w 的相关响应,并提示最大的响应位置 % % Input:I - 原始图像 % w - 子图像 % % Output:Icorr - 响应图像 I = double(I); [m n] = size(I); [m0 n0] = size(w); F = fft2(I); w = conj(fft2(w, m, n)); %w 频谱的共轭 Ffilt = w .* F; %频域滤波结果 Icorr = real(ifft2(Ffilt)); %反变换回空域 % 找到最响相应位置 [iMaxRes, jMaxRes] = find(Icorr == max( Icorr(:) ) ); figure, imshow(I, []); hold on for ii = 1:length(iMaxRes) plot(jMaxRes(ii), iMaxRes(ii), 'w*'); plot([jMaxRes(ii), jMaxRes(ii)+n0-1], [iMaxRes(ii), iMaxRes(ii)], 'w-' ); plot([jMaxRes(ii)+n0-1, jMaxRes(ii)+n0-1], [iMaxRes(ii), iMaxRes(ii)+m0-1], 'w-' ); plot([jMaxRes(ii), jMaxRes(ii)+n0-1], [iMaxRes(ii)+m0-1, iMaxRes(ii)+m0-1], 'w-' ); plot([jMaxRes(ii), jMaxRes(ii)], [iMaxRes(ii), iMaxRes(ii)+m0-1], 'w-' ); end
0 H$ F- ^5 P3 s' ^5 B
8 g1 N7 c. g Z6 A
4 i, Q# u( P% r# b/ w: g$ z
7 |( g! B: K: X. u3 B, d
作者:
xiaogegepcb
时间:
2021-9-2 15:50
MATLAB 模式识别
作者:
youOK
时间:
2021-9-2 15:51
最小距离分类器实现源码
作者:
AustCor1
时间:
2021-9-2 15:52
相关匹配计算效率源码
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2