[Обнаружение пера] на основе сопоставления шаблонов + исходный код Matlab обнаружения пера PCA

алгоритм

1. Введение

1 PCA
PCA (анализ основных компонентов) — широко используемый метод анализа данных. PCA преобразует исходные данные в набор линейно независимых методов представления данных посредством линейного преобразования, которое можно использовать для извлечения основных компонентов признаков данных и часто используется для уменьшения размерности многомерных данных.

1.1 Проблема уменьшения размерности
В интеллектуальном анализе данных и машинном обучении данные представлены в виде вектора. Например, ситуацию с трафиком и транзакциями в магазине Taobao в 2012 году можно рассматривать как набор записей, в котором данные каждого дня являются записью и имеют следующий формат:
(дата, просмотры, посетители, заказы, транзакции, сумма транзакции)
Где «дата» — это флаг записи, а не значение меры, а интеллектуальный анализ данных в основном связан со значением меры, поэтому, если мы проигнорируем поле даты, мы получим набор записей, каждая запись может быть представлена ​​​​в виде пятимерного вектор, Один из образцов показан ниже:
在这里插入图片描述
Общепринятой практикой является использование вектор-столбца для представления записи, и эта рекомендация будет применяться далее в этой статье.
Сложность многих алгоритмов машинного обучения тесно связана с размерностью данных или даже экспоненциально связана с размерностью. Простые 5-мерные данные здесь могут не иметь значения, но в реальном машинном обучении нередко обрабатываются тысячи или даже сотни тысяч размерных данных.В этом случае потребление ресурсов машинного обучения неприемлемо, поэтому уменьшение размерности будет выполняться на данных. Снижение размерности означает потерю информации, но ввиду того, что сами фактические данные часто имеют корреляции, необходимо найти способы уменьшить потерю информации при уменьшении размерности.
Например, из приведенных выше данных магазинов Taobao мы по опыту знаем, что «просмотры» и «посетители» часто имеют сильную корреляцию, а также сильную корреляцию имеют «заказы» и «транзакции». Интуитивно это можно понять так: «когда количество посещений этого магазина выше (или ниже) в определенный день, мы должны в основном думать, что количество посетителей в этот день также выше (или ниже)». Поэтому, если вы удалите количество просмотров страниц или посетителей, вы не потеряете в итоге слишком много информации, уменьшив тем самым размерность данных, что является так называемой операцией уменьшения размерности. Если уменьшение размерности данных анализируется и обсуждается математически, оно представлено профессиональным термином PCA, который представляет собой широко используемый метод уменьшения размерности со строгой математической основой.

1.2 Векторное и базисное преобразование
1.2.1 Внутренний продукт и проекция
Внутренний продукт двух векторов одинакового размера определяется следующим образом:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.2.2 Основа
В алгебре векторы часто представляются координатами точек концов отрезков. Предполагая, что координата вектора равна (3,2), 3 здесь фактически означает, что проецируемое значение вектора по оси x равно 3, а проецируемое значение по оси y равно 2. То есть неявно вводится определение: вектор длины 1 в положительном направлении оси x и оси y является эталоном. Тогда вектор (3,2) фактически проецируется как 3 по оси X и 2 по оси Y. Обратите внимание, что проекция является вектором и может быть отрицательной. Вектор (x, y) фактически представляет собой линейную комбинацию:
在这里插入图片描述
Из приведенного выше представления можно получить, что все двумерные векторы могут быть представлены в виде такой линейной комбинации. Здесь (1,0) и (0,1) называются базисными наборами в двумерном пространстве.
在这里插入图片描述
Причина, по которой (1,0) и (0,1) выбраны в качестве баз по умолчанию, конечно же, для удобства, потому что они являются единичными векторами в положительных направлениях осей x и y соответственно, поэтому координаты точки и векторы на двумерной плоскости сделаны один за другим. Но на самом деле любые два линейно независимых двумерных вектора могут стать набором базисов.Так называемая линейно независимая двумерная плоскость интуитивно представляет собой два вектора, не лежащих на одной прямой.
在这里插入图片描述
Кроме того, базы здесь ортогональны (то есть скалярный продукт равен 0, или интуитивно говорят, что они перпендикулярны друг другу), единственное требование к набору баз состоит в том, что они линейно независимы, а неортогональные базы также возможно. Однако, поскольку ортогональный базис обладает лучшими свойствами, обычно используется ортогональный базис.
1.2.3 Матрица преобразования базиса
Преобразование базиса в приведенном выше примере может быть представлено умножением матриц, то есть
在这里插入图片描述
Если обобщить, предположим, что есть M N-мерных векторов, и вы хотите преобразовать их в новое пространство, представленное R N-мерными векторами, то сначала R оснований формируются в матрицу A по строкам, а затем векторы образованы столбцами.Матрица B, Тогда произведение AB двух матриц является результатом преобразования, где m-й столбец AB является преобразованным результатом m-го столбца в A, который выражается путем умножения матриц как:
在这里插入图片描述
在这里插入图片描述
1.3 Ковариационная матрица и цель оптимизации
При уменьшении размерности данных ключевой вопрос заключается в том, как определить, является ли выбранный базис оптимальным. То есть выбор оптимального базиса должен максимально обеспечить характеристики исходных данных. Здесь предполагается, что имеется 5 фрагментов данных в качестве
在这里插入图片描述
Вычислите среднее значение каждой строки, а затем вычтите полученное среднее значение из каждой строки, чтобы получить
在这里插入图片描述
Выражая матрицу в виде координат, получаем следующую цифру:
在这里插入图片描述
Итак, теперь возникает вопрос: как использовать одномерный вектор для представления этих данных, но при этом сохранить как можно больше исходной информации? Проблема фактически состоит в том, чтобы выбрать вектор в направлении в двумерной плоскости, спроецировать все точки данных на эту линию и использовать спроецированные значения для представления исходных записей, то есть проблема сведения двумерного к одномерный. Так как же выбрать это направление (или базу), чтобы максимально сохранить самую оригинальную информацию? Интуитивное представление заключается в том, что вы хотите, чтобы спроецированные проецируемые значения были как можно более рассеянными.

1.3.1 Дисперсия
Вышеупомянутая проблема заключается в том, что проецируемые значения после проецирования должны быть максимально рассеяны в одном направлении, а степень рассеивания может быть выражена математической дисперсией, а именно:
在这里插入图片描述
Таким образом, приведенная выше задача формализуется как: Найдите одномерный базис, чтобы после преобразования всех данных в координаты на этом базисе значение дисперсии было наибольшим.

2.3.2 Ковариация
Математически корреляция двух признаков может быть выражена их ковариацией, а именно:
在这里插入图片描述
Когда ковариация равна 0, это означает, что две функции полностью независимы. Чтобы ковариация была равна 0, второй базис может быть выбран только в направлении, ортогональном первому базису. Следовательно, два окончательно выбранных направления должны быть ортогональны.

На этом этапе достигается цель оптимизации задачи уменьшения размерности: уменьшить набор N-мерных векторов до K-мерного (K

2.3.3 Ковариационная матрица
Предполагая, что есть только два поля x и y, они формируются в матрицу по строкам, которая представляет собой матрицу, полученную путем центрирования матрицы, то есть матрицу, полученную путем вычитания среднего значения каждого поля из каждого поля:
在这里插入图片描述
在这里插入图片描述
3.4 Диагонализация ковариационной матрицы
在这里插入图片描述
在这里插入图片描述
1.4 Алгоритмы и примеры
1.4.1 Алгоритм PCA
在这里插入图片描述
1.4.2 Примеры
在这里插入图片描述
在这里插入图片描述
1.5 Обсуждение
Согласно приведенному выше объяснению математических принципов PCA, вы можете понять некоторые возможности и ограничения PCA. PCA по существу принимает направление с наибольшей дисперсией в качестве основного признака и «декоррелирует» данные в каждом ортогональном направлении, то есть делает их некоррелированными в разных ортогональных направлениях.

Поэтому PCA также имеет некоторые ограничения.Например, он может хорошо удалять линейные корреляции, но нет возможности для корреляций высокого порядка.Для данных с корреляциями высокого порядка можно рассматривать Kernel PCA, а нелинейная корреляция решается функция ядра к линейной корреляции. Кроме того, PCA предполагает, что основные характеристики данных распределены в ортогональном направлении.Если имеется несколько направлений с большой дисперсией в неортогональном направлении, эффект PCA будет значительно уменьшен.

Наконец, следует отметить, что PCA - это технология без параметров, то есть при тех же данных, если не учитывать очистку, результаты будут такими же, и субъективные параметры не вмешиваются, поэтому PCA удобен для общей реализации, но не может использоваться сам по себе Персонализированная оптимизация.

Во-вторых, исходный код

%笔的识别
global im;%使用全局变量
imgdata=[];%训练图像矩阵
for i=1:2
    for j=1:4
        a=imread(strcat('ORL\pen',num2str(i),'_',num2str(j),'.bmp'));
        b=a(1:176*132); % b是列矢量 1*M,其中M=23232
        b=double(b);
        imgdata=[imgdata; b]; % imgdata 是一个M * N 矩阵,imgdata中每一行数据一张图片,M=400
    end;
end;
imgdata=imgdata'; %每一列为一张图片
imgmean=mean(imgdata,2); % 平均图片,N维列向量
for i=1:8
    minus(:,i) = imgdata(:,i)-imgmean; % minus是一个N*M矩阵,是训练图和平均图之间的差值
end;

covx=minus'* minus; % M * M 阶协方差矩阵
[COEFF, latent,explained] = pcacov(covx'); %PCA,用协方差矩阵的转置来计算以减小计算量

% 选择构成95%的能量的特征值
i=1;
proportion=0;
while(proportion < 95)
    proportion=proportion+explained(i);
    i=i+1;
end;
p=i-1;
% 训练得到特征笔坐标系
i=1;
while (i<=p && latent(i)>0)
    base(:,i) = latent(i)^(-1/2)*minus * COEFF(:,i); % base是N×p阶矩阵,用来进行投影,除以latent(i)^(1/2)是对笔图像的标准化
    i = i + 1;
end

% 将训练样本对坐标系上进行投影,得到一个 p*M 阶矩阵为参考
reference = base'*minus;
% 测试过程——在测试图片文件夹中选择图片,进行查找测试

im=imread('待测笔\待测笔.bmp');
a=im;
%b=a(1:38400);
b=double(b);
b=b';

object = base'*(b-imgmean);
% 绘出待测图片
subplot(2,3,1); 
imshow(a); 
title(['待测笔']);   

distance=100000;

%最小距离法,寻找和待识别图片最为接近的训练图片
for k=1:8 
   temp= norm(object - reference(:,k));
   if (distance > temp)
     which = k;
     distance = temp;
   end;
end;

%找出距离最近的图片所在的位置
num1 = ceil(which/5);%第num1个文件夹
num2 = mod(which,5);%第num2个图片文件
if (num2 == 0)
    num2 = 5;
end;

3. Результаты операции

在这里插入图片描述