www.gusucode.com > matlab,图像识别的简单人机界面源码程序 > gaborsolo.m
function [ imMatchName, imMatchDis ] = gaborsolo( im ) %GABORSOLO Summary of this function goes here % Detailed explanation goes here load gabortrain.mat imsize; G = gaborbank(); im = imresize(im,imsize); fpoints = gaborpoints(imsize); [ imref, imref_bin ] = gaborbankfilter( im, G, fpoints); load gene.mat gene; % 如果输入构造空间,使用构造空间 % 不完全依靠遗传算法(只考察滤波器,不考虑滤波器的位置) % 此时每个基因位代表一个滤波器 filterindex = gene; % 基因清零 gene = []; % 为每一个滤波器配上相应的位(特征点那么多的位) % 选择一个滤波器,就选择相应滤波器对应的图像 load gabortrain.mat fpointscnt; imbits = fpointscnt*2; for i = 1:length(filterindex) if filterindex(i)>0 gene = [gene,ones(1,imbits)]; else gene = [gene,zeros(1,imbits)]; end end gene = gene > 0;% 转化成逻辑值 % 对训练图像滤波值进行选择 load gabortrain.mat train; trainSele = train(gene,:); % 对测试图像滤波值进行选择 imbinSele = imref_bin(gene,:); % 灵活方案 % 本方案实现所有参加测试和训练向量之间的距离计算 % 每个向量都跟所有其他的测试向量和训练向量计算距离 % 可以使用不同的距离计算方式,包括典型的欧式距离等 % 但不同距离得衡量是不同的,有的是数值大距离远,有的是数值小距离远 % 在匹配时 需要进行相关的调整 min/max % alldis是所有训练和所有测试向量中任意两个向量的距离矩阵(统计用) % 包括训练向量和训练向量 测试向量和测试向量 训练和测试向量 % 以矩阵的形式,全面列出,里面以对角线为对称轴 轴对称 % 对角线位置上的值是自己与自己的距离,恒等于0 alldis = pdist([double(trainSele),double(imbinSele)]','euclidean'); alldis = squareform(alldis); % dis是测试向量与训练向量的距离(计算识别率用) dis = alldis(1:size(trainSele,2),end-size(imbinSele,2)+1:end); % 寻找测试样本匹配的训练样本 [imMatchDis,n] = sort(dis); % 把训练图像的名字按照与测试图像相似程度由高到低排列 load gabortrain.mat trainName; imMatchName = trainName(n,:); end