How to write a .bmp format file?
18 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hi, all
I am using Principal Component Analysis (PCA) to analyze a 2D facial image database (ORL database). Here is my code
-----------------------------------------
data = zeros(400, 10304);
for i = 1:400
name = ['face' num2str(i) '.bmp'];
temp = imread(name);
temp = reshape(temp, 1, 10304);
data(i, :) = temp;
end
meanface = mean(data, 1);
data = data - repmat(meanface, 400, 1);
intermat = (data * data') / (400-1);
[intervec, val] = eig(intermat);
pc = data'*intervec;
pc = pc';
for i = 1:400
pc(i,:) = pc(i,:) / sqrt(dot(pc(i,:), pc(i,:)));
sd(i) = sqrt(val(i,i));
eigenvalue(i) = val(i,i);
end
pc = flipud(pc);
sd = fliplr(sd);
eigenvalue = fliplr(eigenvalue);
---------------------------------------
After PCA, I try to write an eigenface in a .bmp image
face = meanface + sd(1) * pc(1,:);
face = reshape(face, 112, 92);
imwrite(face, 'eigenface.bmp');
However, what I get is a pure white image. Then I try to write meanface alone, and the result is all the same, a white plane. Till I try to write a principal component alone, the contour of a human face reveals.
Can anyone help me to find my mistake?
Many thanks in advance.
Sincerely Wenlong
1 comentario
Jan
el 31 de Ag. de 2012
While the PCA part of the code is not relevant for the actual problem, it would be more helpful if you explain 1. the range and type of the variable "face" and 2. how you determine that the image is white.
Perhaps there is a confusion with UINT8 and DOUBLE types of the image? Or the re-import fails.
Respuestas (1)
Image Analyst
el 31 de Ag. de 2012
Try this:
face_uint8 = uint8(255 * mat2gray(face));
fullFileName = fullfile(folder, 'eigenface.bmp'); % Or call uiputfile() if you want.
imwrite(face_uint8, fullFileName);
0 comentarios
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!