最近论文在用SVM进行分类,目的是检测缺陷。缺陷有三种分别是孔洞,刮擦和划痕缺陷。 我用过libsvm和ddtools还有就是matlab中的svm函数 (svmtrain、svmclsassify),libsvm原来用的效果不好,我现在又忘了怎么用了,改天再把它捡起来吧,现在用的是 matlab的函数。
进行svm分类可以按如下步骤进行:
- 采集样本;
- 提取样本的特征;
- 进行cross validation验证支持向量机中的参数
(一般都是选择的rbf的非线性支持向量机,参数有2个,即惩罚系数和rbf核的半径sigma)
实验过程需知:
1、在提取样本时,必须将样本图像缩放成统一大小的二值化(或灰度图像),因为我检测的缺陷中光照变化比较强烈,所以我只是选择了二值化图像,每个图像缩放成50*50的尺寸。注意不同大小的图像后面进行特征提取是没有意义的。
2、其次提样本特征,对于缺陷图像分类,一般来说提取的都是特征矩,我提取的是图像的不变矩,它不随图像的旋转和缩放而产生变化(不变矩最后计算出来有7种参数),当然也可以提取多种矩然后用PCA的进行降维,matlab的PCA很容易,以前的博客上有介绍。
用matlab提取不变矩的算法网上有,叫做invmoments。
1 function phi = invmoments(F) 2 %INVMOMENTS Compute invariant moments of image. 3 % PHI = INVMOMENTS(F) computes the moment invariants of the image 4 % F. PHI is a seven-element row vector containing the moment 5 % invariants as defined in equations (11.3-17) through (11.3-23) of 6 % Gonzalez and Woods, Digital Image Processing, 2nd Ed. 7 % 8 % F must be a 2-D, real, nonsparse, numeric or logical matrix. 9 10 % Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins 11 % Digital Image Processing Using MATLAB, Prentice-Hall, 2004 12 % $Revision: 1.5 $ $Date: 2003/11/21 14:39:19 $ 13 14 if (ndims(F) ~= 2) | issparse(F) | ~isreal(F) | ~(isnumeric(F) | ... 15 islogical(F)) 16 error(['F must be a 2-D, real, nonsparse, numeric or logical ' ... 17 'matrix.']); 18 end 19 20 F = double(F); 21 22 phi = compute_phi(compute_eta(compute_m(F))); 23 24 %-------------------------------------------------------------------% 25 function m = compute_m(F) 26 27 [M, N] = size(F);