错误使用eig输入矩阵包含南或正从图像

52视图(30天)
请帮我解决这个错误。我使用AT & T数据库,您可以下载 https://github.com/SilvesterHsu/ORLFaceRecognition-PCA/tree/origin/master/att_faces ,进行训练和测试(1 pgm测试保存在目录testing_set, 2 - 10是培训保存在目录training_set)。Validation_set testing_set一样。 截图(12). png
函数eigenfaces ()
清晰;
%最大大小(如果大图片会做调整)
image_max_width = 46;
image_max_height = 56;
%,火车数据库
[database_sets, database_set_images database_images、database_eigenfaces database_mean_face, database_weights] = eigenfaces__train (image_max_width image_max_height);
%,使用数据库进行分类的面孔
eigenfaces__recognize (image_max_width、image_max_height database_sets、database_set_images database_images, database_eigenfaces, database_mean_face, database_weights);
%工艺验证
eigenfaces__validation (image_max_width、image_max_height database_sets、database_set_images database_images, database_eigenfaces, database_mean_face, database_weights);
结束
函数[database_sets, database_set_images database_images、database_eigenfaces database_mean_face, database_weights] = eigenfaces__train (image_max_width image_max_height)
disp (“>培训开始…”);
抽搐();
(集、set_images图像、image_height image_width, image_count] = eigenfaces__load_images (“training_set”、image_max_width image_max_height);
流(“加载%我第九% %的图像像素\ n”,image_width image_count image_height);
%规范化面临向量:γ(i) {n}(γ(1)γ(2),…]
images_gamma = eigenfaces__normalize(图像、image_height image_width image_count);
%的意思是面对向量:PSI {1}
image_psi = eigenfaces__mean (images_gamma image_height、image_width image_count);
%减号意味着面对向量:φ(i)[φφ(1),(2),…]
images_phi = eigenfaces__mean_substract (images_gamma image_psi、image_height image_width, image_count);
%的协方差矩阵
covariance_matrix = eigenfaces__process_covariance_matrix (images_phi);
%的特征向量
特征向量= eigenfaces__process_eigenvectors (covariance_matrix image_count);
% Eigenfaces
eigenfaces = eigenfaces__process_eigenfaces(特征向量);
%的重量
重量= eigenfaces__process_weights (eigenfaces images_phi image_count);
%第一eigenfaces取消这个视图
:% eigenfaces__util_images_show (eigenfaces (1:10), image_height, image_width,大小(eigenfaces (1:10,:), 1));
流(“处理时间:% f秒\ n”toc ());
disp (“>培训结束了。”);
database_sets =集;
database_set_images = set_images;
database_images =图像;
database_eigenfaces = eigenfaces;
database_mean_face = image_psi;
database_weights =重量;
结束
函数eigenfaces__recognize (image_max_width、image_max_height database_sets、database_set_images database_images, database_eigenfaces, database_mean_face, database_weights)
disp (“>识别开始…”);
抽搐();
(集、set_images图像、image_height image_width, image_count] = eigenfaces__load_images (“recognition_set”、image_max_width image_max_height);
流(“加载%我第九% %的图像像素\ n”,image_width image_count image_height);
%进行识别
results_all = eigenfaces__process_recognizer (database_sets database_set_images、database_eigenfaces database_mean_face, database_weights,图像集,set_images, image_height, image_width, image_count);
eigenfaces__util_recognition_show(图像、database_images集、database_sets results_all, image_height, image_width, image_count);
流(“处理时间:% f秒\ n”toc ());
disp (“>识别结束。”);
结束
函数eigenfaces__validation (image_max_width、image_max_height database_sets、database_set_images database_images, database_eigenfaces, database_mean_face, database_weights)
disp (“>验证开始…”);
抽搐();
% TODO:验证实现的质量
% - >错误率
% - >速度每单位认可
(集、set_images图像、image_height image_width, image_count] = eigenfaces__load_images (“validation_set”、image_max_width image_max_height);
流(“加载%我第九% %的图像像素\ n”,image_width image_count image_height);
%进行识别
[results_all, mean_time] = eigenfaces__process_recognizer (database_sets、database_set_images database_eigenfaces, database_mean_face, database_weights,图像集,set_images, image_height, image_width, image_count);
%过程误差比率
error_ratio = eigenfaces__util_error_ratio (results_all、集合database_sets image_count);
流(同时每个识别周期:% f秒\ n ',mean_time);
流(“错误的比率:% f % \ n ',error_ratio);
流(“处理时间:% f秒\ n”toc ());
disp (“>验证结束。”);
结束
函数(集、set_images图像、image_height image_width, image_count] = eigenfaces__load_images (image_set、image_max_width image_max_height)
集=细胞(0,1);
set_images =细胞(0,1);
图像= [];
image_height = 0;
image_width = 0;
image_count = 0;
image_extension =“pgm”;
%列表类
directory_name = sprintf (”。/ % s ',image_set);
class_dirs = dir (directory_name);
class_index =找到([class_dirs.isdir]);
c = 1:长度(class_index)
class_name = class_dirs (class_index (c)) . name;
class_path = fullfile (directory_name class_name);
%图片列表
image_files = dir (fullfile (class_path sprintf (“* % s。”,image_extension)));
image_index =找到(~ [image_files.isdir]);
i = 1:长度(image_index)
image_count = image_count + 1;
image_name = image_files (image_index(我)). name;
image_path = fullfile (class_path image_name);
current_image = imread (image_path);
%转换为灰度吗?
如果image_extension ~ =“pgm”
current_image = rgb2gray (current_image);
结束
%调整吗?(如果可用)图像处理工具箱
如果大小(current_image 1) > image_max_height | | (current_image, 2) > image_max_width大小
current_image = eigenfaces__util_image_resize (current_image image_max_width image_max_height);
结束
图像=猫(1、图像current_image);
集{image_count} = [class_name];
set_images {image_count} = [image_name];
[current_image_height, current_image_width] =大小(current_image);
如果我= = 1
%第一图像尺寸是参考尺寸
image_height = current_image_height;
image_width = current_image_width;
其他的
%检查下一个图像大小匹配的第一个图像(
%的图像必须撒~我大小)
如果current_image_height ~ = image_height | | current_image_width ~ = image_width
把(MException (“MYFUN: image_size”,的图片都必须有相同的大小));
结束
结束
结束
结束
结束
函数images_gamma = eigenfaces__normalize(图像、image_height image_width image_count)
= eigenfaces__normalize_vector_project图像(图像、image_height image_width image_count);
images_gamma =图像;
结束
函数images_vector = eigenfaces__normalize_vector_project(图像、image_height image_width image_count)
images_vector = 0 (image_count, image_height * image_width);
我= 1:image_count
image_vector =图像(((i - 1) * image_height + 1):(我* image_height),:);
image_vector =重塑(image_vector image_height * image_width, 1);
image_vector =双(image_vector);
:images_vector(我)= image_vector;
结束
结束
函数image_psi = eigenfaces__mean(图像、image_height image_width image_count)
image_psi = 0 (1, image_width * image_height);
我= 1:image_count
c = 1:(image_width * image_height)
image_psi (1 c) = image_psi (1 c) +(图像(i, c) / image_count);
结束
结束
结束
函数images_phi = eigenfaces__mean_substract (images_gamma image_psi、image_height image_width, image_count)
images_phi = 0 (image_count, image_height * image_width);
我= 1:image_count
images_phi(我:)= images_gamma(我,:)- image_psi;
结束
结束
函数covariance_matrix = eigenfaces__process_covariance_matrix (images_phi)
covariance_matrix = x (images_phi);
结束
函数(特征向量,特征值)= eigenfaces__process_eigenvectors (covariance_matrix image_count)
(特征向量,特征值)= eig (covariance_matrix);

答案(1)

克里斯汀Tobler
克里斯汀Tobler 2019年12月20日
变量covariance_matrix包含非限定的值(正意义无穷,例如从1/0返回,或南意义不是一个数字,例如从0/0)返回:eig函数将抛出一个错误,因为它不接受这些值作为输入,但问题是早些时候。
试着通过代码,检查变量,找到第一个地方,一个变量包含的价值正或南。
1评论
史蒂文的主
史蒂文的主 2019年12月20日
你可能想要 设置一个错误断点 尽快停止创建非限定的值。如果你像preallocate 所以想要阻止只有当 eig 被调用和抛出一个错误,你可以设置一个断点暂停错误错误。
另一个反馈:
函数eigenfaces ()
清晰;
我建议让 放的习惯 清晰的 在每个代码的文件。如果eigenfaces()接受一个输入参数, 清晰的 调用将把这些输入扔到垃圾。

登录置评。

s manbetx 845


释放

R2019a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!