matlab 特征值不排序,matlap 代码求解释!从这里开始即可%对特征值进行排序并去掉...

%人脸识别代码

clear all %    //removes all variables from the workspace. This frees up system memory.

close all %    //Delete specified figure

clc

% number of images on your training set.

%训练集数目

M=16;

%Chosen std and mean.

%It can be any number that it is close to the std and mean of most of the images.

um=100;

ustd=80;

%read and show images(bmp);

%读入M个训练图像并显示在一个窗口上

S=[];   %img matrix

temp=[];

figure(1); %  //figure creates figure graphics objects. Figure objects are the individual windows on the screen in which MATLAB displays graphical output. figure creates a new figure object using default property values.

for i=1:M

str=strcat('D:\民族图形图像研究\jpg\',int2str(i),'.jpg');    %concatenates two strings that form the name of the image int is nteger to string conversion

eval('img=imread(str);');       %  //xecute a string containing a MATLAB expression

img=rgb2gray(img); %rgb 转换成为灰度图像

subplot(ceil(sqrt(M)),ceil(sqrt(M)),i) %  //divides the current figure into rectangular panes m求根行m求根列 i表示第几个图像

imshow(img)

if i==3

title('Training set write by 李锋平','fontsize',18)   %  //Add title to current axes 名字 字体尺寸 字体大小

end

drawnow;  %  //Complete pending drawing events  flushes the event queue and updates the figure window.完成待绘图事件刷新事件队列和更新的数字窗口

[irow icol]=size(img);   % get the number of rows (N1) and columns (N2)获得图像的大小,所有图像的大小要一致

m=irow;n=icol;

for i=1:m

for j=1:n

a(i,j)=img(i,j);

end

end

temp=reshape(a,irow*icol,1);     %creates a (N1*N2)x1 matrix一幅图像构造一个向量 向量的大小和图像大小有关

S=[S temp];         %X is a N1*N2xM matrix after finishing the sequence  生成一个向量矩阵,M个图像有M列

%this is our S

end

%Here we change the mean and std of all images. We normalize all images.

%This is done to reduce the error due to lighting conditions.

%下面是对图像规范化,更具所有图像的的平均值和方差

for i=1:size(S,2)

temp=double(S(:,i));

m=mean(temp);

st=std(temp);

S(:,i)=(temp-m)*ustd/st+um; %%%%%

end

%show normalized images 显示规范化后的图像

figure(2);

for i=1:M

str=strcat(int2str(i),'.bmp');  %重新调整矩阵的行数、列数、维数

img=reshape(S(:,i),irow,icol);

eval('imwrite(img,str)');   % 将图像数据写入到图像文件中,

subplot(ceil(sqrt(M)),ceil(sqrt(M)),i)               %subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果第一个数字是2就是表示2行图。p是指你现在要把曲线画到figure中哪个图上,最后一个如果是1表示是从左到右第一个位置。

imshow(img)

drawnow;

if i==3

title('Normalized Training Set write by 李锋平','fontsize',18)

end

end

%mean image;显示平均图像,所有图像叠加在一起

m=mean(S,2);   %obtains the mean of each row instead of each column

tmimg=uint8(m);   %converts to unsigned 8-bit integer. Values range from 0 to 255

img=reshape(tmimg,irow,icol);    %takes the N1*N2x1 vector and creates a N2xN1 matrix

figure(3);

imshow(img);

title('Mean Image write by 李锋平','fontsize',18)

% Change image for manipulation

%对图像变换便于处理

dbx=[];   % A matrix

for i=1:M

temp=double(S(:,i));

dbx=[dbx temp];

end

%Covariance matrix C=A'A, L=AA'

%求协方差矩阵

%对于PCA做人脸识别:中心化(也就是你说的去均值)后的矩阵再乘以它的转置矩阵,结果就是协方差矩阵,之后求它的特征值和特征向量了就可以了...

A=dbx';

L=A*A';

% vv are the eigenvector for L

% dd are the eigenvalue for both L=dbx'*dbx and C=dbx*dbx';

[vv dd]=eig(L);

% Sort and eliminate those whose eigenvalue is zero

%对特征值进行排序并去掉0    实数是按照降序排列的,复数是按照虚部的降序排列的

v=[];

d=[];

for i=1:size(vv,2)

if(dd(i,i)>1e-4)

v=[v vv(:,i)];

d=[d dd(i,i)];

end

end

%sort,  will return an ascending sequence

%排序并返回降序的

[B index]=sort(d);

ind=zeros(size(index));

dtemp=zeros(size(index));

vtemp=zeros(size(v));

len=length(index);

for i=1:len

dtemp(i)=B(len+1-i);

ind(i)=len+1-index(i);

vtemp(:,ind(i))=v(:,i);

end

d=dtemp;

v=vtemp;

%Normalization of eigenvectors

%对特征向量进行规范化

for i=1:size(v,2)       %access each column

kk=v(:,i);

temp=sqrt(sum(kk.^2));

v(:,i)=v(:,i)./temp;

end

%Eigenvectors of C matrix

%得到C的特征向量矩阵

u=[];

for i=1:size(v,2)

temp=sqrt(d(i));

u=[u (dbx*v(:,i))./temp];

end

%Normalization of eigenvectors

for i=1:size(u,2)

kk=u(:,i);

temp=sqrt(sum(kk.^2));

u(:,i)=u(:,i)./temp;

end

% show eigenfaces;

%显示特征脸

figure(4);

for i=1:size(u,2)

cmax=max(u(:,i));

cmin=min(u(:,i));

img=(reshape(u(:,i),irow,icol)-cmin)*255/(cmax-cmin);

%img=histeq(img,255);

subplot(ceil(sqrt(M)),ceil(sqrt(M)),i)

imshow(uint8(img))

drawnow;

if i==3

title('Eigenfaces write by 李锋平','fontsize',18)

end

end

% Find the weight of each face in the training set.

%找出训练集中每张脸的权重

omega = [];

for h=1:size(dbx,2)

WW=[];

for i=1:size(u,2)

t = u(:,i)';

WeightOfImage = dot(t,dbx(:,h)');

WW = [WW; WeightOfImage];

end

omega = [omega WW];

end

% Acquire new image

% Note: the input image must have a bmp or jpg extension.

%       It should have the same size as the ones in your training set.

%       It should be placed on your desktop

%获取一张新的脸

%注意:图像的大小和训练集中图像大小一样

%

InputImage = input('Please enter the name of the image and its extension \n','s');

InputImage = imread(strcat('D:\民族图形图像研究\jpg\',InputImage));

InputImage=rgb2gray(InputImage);

figure(5)

subplot(1,2,1)

imshow(InputImage); colormap('gray');title('Input image','fontsize',18)

InImage=reshape(double(InputImage)',irow*icol,1);

temp=InImage;

me=mean(temp);

st=std(temp);

temp=(temp-me)*ustd/st+um;

NormImage = temp;

Difference = temp-m;

NormImage = Difference;

p = [];

aa=size(u,2);

for i = 1:aa

pare = dot(NormImage,u(:,i));

p = [p; pare];

end

ReshapedImage = m + u(:,1:aa)*p;    %m is the mean image, u is the eigenvector

ReshapedImage = reshape(ReshapedImage,irow,icol);

%ReshapedImage = ReshapedImage';

%show the reconstructed image. 显示重构的图像

subplot(1,2,2)

imshow(uint8(ReshapedImage)); colormap('gray');

title('Reconstructed image write by 李锋平','fontsize',18)

InImWeight = [];

for i=1:size(u,2)

t = u(:,i)';

WeightOfInputImage = dot(t,Difference');

InImWeight = [InImWeight; WeightOfInputImage];

end

ll = 1:M;

figure(68)

subplot(1,2,1)

stem(ll,InImWeight)

title('Weight of Input Face write by 李锋平','fontsize',14)

% Find Euclidean distance 查找Euclidean距离

e=[];

for i=1:size(omega,2)

q = omega(:,i);

DiffWeight = InImWeight-q;

mag = norm(DiffWeight);

e = [e mag];

end

kk = 1:size(e,2);

subplot(1,2,2)

stem(kk,e)

title('Eucledian distance of input image,write by 李锋平','fontsize',14)

MaximumValue=max(e)

MinimumValue=min(e)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python有序队列_【Python】:拓展Queue实现有序不重复队列

最近手头有个需求是这样的,定期检查数据库获取失败任务并且进行重启。最早想到的是添加一个生产者&&消费者队列,但是发现很多棘手的问题。1.重启任务是调用的一个shell脚本然后在脚本中又调用python程序,所以任务完成的状态回传略纠结…

matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc

ode45求解多自由度动力学方程实例Ode45函数调用形式如下:[T,Y]ode45(odefun,tspan,y0)相关参数介绍如下:参数名称参数说明odefun用于存放待求解的方程的m文件名,方程必须用y’f(t,y)的形式存放tspan指定自变量范围的向量,通常用[t…

onenetsim定位功能吗_微信小程序新增后台定位功能,你会卸载地图APP用微信导航吗...

[PConline]8月8日,根据微信官方发布的消息显示,小程序新增后台定位功能,并对自动化测试功能进行了升级。据介绍,为了满足线路导航、路线记录等服务场景下,小程序需要长时间持续定位来提供服务。当用户主动将小程序设置…

pdo 错误 php,多语句查询中的PHP PDO错误

我在我的一个实时网络应用程序中遇到了这个问题.看来如果你通过PHP PDO向MysqL发出一个多语句查询,并且第一个语句是一个insert语句,而第二个语句是一个update语句,那么PDO :: nextRowset()函数不会返回正确的数字结果集(请注意,自PHP 5.3起,PDO应该支持每个MySQL查询的多个语句…

hbuid 集成svn_HBuilder如何配置SVN的步骤详解

前言本文主要给大家介绍了关于HBuilder如何配置SVN的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧。注意:大家都配置前最好先备份好之前的文件资料很早之前就想在编辑器上配置SVN,但找了很多…

MATLAB静力学分析,锻造操作机静力学的Matlab仿真分析

由第3章中该新型锻造操作机的位置反解中的构件的位置以及角度的关系式,均为已知量。施加外力为Ftx50N,Fty300N和沿“轴方向的外力矩M 60000 N.mm。给定初始量范围,通过Matlab软件仿真,可以得到各个液压缸的驱动力的变化曲线。该新型锻造操作机…

babylonjs 设置面板位置_一篇关于开关面板的详细集合,值得收藏转发

对于大部分人来说,开关的布局,开关的种类都会是一脸懵。所以大家在装修的过程中就会迷茫,今天给大家分享一篇集合,相信通过这篇文章,问题会有所缓解~一,开关插座的分类1.电源开关分类:一位单控/…

php递归实现1 10阶乘,用递归实现1到100的和,1到10的阶乘

递归:方法定义中调用方法本身的现象注意实现:1.递归一定要有出口,否则就是死递归 StackOverflowError2.递归的次数不能过多,否则也会出现死递归特殊事项:构造方法不可以递归定义举例:从前有座山,山上有座庙&#xff0c…

xxljob 配置文件_最详细的xxl-job java配置方式spring-boot

转自:https://blog.csdn.net/weixin_44055234/article/details/106565516————XXL-JOB*是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。且支持线…

php怎么排除空的数组,【技术产品】php如何去除空数组

【摘要】对于初入门的php学习者肯定会有很多问题,今天考比过小编为大家整理了关于【技术产品】php如何去除空数组的信息,希望可以帮助到大家。下面就让我们一起来看下【技术产品】php如何去除空数组的具体内容吧!php如何去除空数组在php中可以…

ecs 云服务器 管理控制台_【弹性计算】教您快速学会云服务器ECS 创建命令!

云助手命令可以在ECS实例中快速完成运行自动化运维脚本、轮询进程、重置用户密码、安装或者卸载软件、更新应用以及安装补丁等一些日常任务。命令类型可以是Windows PowerShell脚本、Bat批处理命令和Linux Shell脚本,命令中支持自定义参数,方便设置变量值…

vue.js能美化界面吗_vue将单页面改造成多页面应用的方法

问题描述: 手头有一个项目是使用 vue-cli 搭建的单页面应用。项目分为了管理平台和用户查看页面,用户查看页面是很简单的页面,但是在加载过程中,却加载了整个应用的打包代码,量重且影响了响应和体验。我想要的效果是&a…

exoplayer 纯java,Exoplayer不播放任何视频

让Exoplayer工作有问题 . 我设法从网址加载视频 . 但它只播放音频 . 所以我做错了什么 .BandwidthMeter bandwidthMeter new DefaultBandwidthMeter();TrackSelection.Factory videoTrackSelectionFactory new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);TrackSel…

react 返回一个页面_React页面返回上一页时恢复原来页面的状态

需求:从一个横向纵向都有滚动条的列表页进入详情页,返回时列表页的活动条恢复到之前到位置。难点:1.列表用的是antd的table组件,滚动条是这个table组件的,浏览器返回时自身可以记录页面即document的滚动条,…

java mssql mysql,在JSP中访问MSSQLServer数据库_MySQL

SQL Server下面介绍如何用SQL Server实现一个动态FAQ(常见问题及答案)网站。首先建立一个数据库faq,其中的表faqs有字段id(int,自动增量,并设为主关键字)、subject(varchar,200)、answers(text)。这个表中可以存放一些编程知识的常…

matlab的精度变量,MatLab - 变量精度算术

永远不要假设像vpa(sin(pi / 4))这样的数字精确到完全精度,因为MATLAB通常会使用浮点运算来计算vpa调用内的数字,因此只能精确到大约16位数。但是,它似乎在这里是正确的。例如,我们知道这一点sin(pi/4) sqrt(2)/2让我们测试一下结…

直流降压的简单方法_量血压的重大误区和简单的降压方法,尽快转告身边人!...

见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故…

php oauth2 和 jwt,jwt-auth: thinkphp 的 jwt (JSON Web Token)身份验证扩展包,支持Swoole...

JWT-AUTHthinkphp的jwt(JSON Web Token)身份验证包。支持Header、Cookie、Param等多种传参方式。包含:验证、验证并且自动刷新等多种中间件。支持Swoole环境要求php > 7.0thinkphp ^5.1.10 || ^6.0.0说明目前支持如下三大类型加密方式:RSA,HASH,DSA。…

hadoop2.8配置_Hadoop2.8.2安装与配置(单机)

解压并移动到/software目录:tar -zxvf hadoop-2.8.2.tar.gzmv hadoop-2.8.2 /software/hadoop在/etc/profile文件添加:export HADOOP_HOME/software/hadoopexport HADOOP_INSTALL$HADOOP_HOMEexport HADOOP_MAPRED_HOME$HADOOP_HOMEexport HADOOP_COMMON…

编译php时的configure,PHP编译configure时常见错误

PHP的安装虽然有时候很简单,可是如果应用一多,我们安装起来就很头痛了!出错最多的就是安装PHP扩展的时候了。其实不管是你是Apache类的应用还是Nginx类的,PHP的安装都不是很简单,虽然网上有很多configure参数&#xff…