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