我有100张灰色图像(256 * 256像素),它们存储在faces.mat文件中。 所以在faces.mat文件中,有100行和65536(256 * 256)列。 每行代表一张图片。
现在我想重塑面部矩阵并显示图像。
我用:
for i=1:N
imagesc(reshape(faces(i,:)'),256,256));
colormap gray;
end
但我发现我的图像变成了90度!
有人可以告诉我如何正确转动图像吗?当我把它们变成face.mat时,我处理的图像是错误的吗?下面是我写的将图像存储到矩阵的代码。
function ImageGenerate
Files = dir(strcat('D:\face\','*.tiff'));
LengthFiles = length(Files);
faces = [];
for i = 1:LengthFiles;
Img = imread(strcat('D:\face\',Files(i).name));
temp = im2double(Img);
[row, col] = size(temp);
vector = [];
for i =1 : row
for j = 1:col
vector = [vector temp(i,j)];
end
end
faces = [faces;vector];
end
save('faces2.mat','faces');
答案 0 :(得分:5)
答案 1 :(得分:3)
您可以使用imrotate
旋转图像。要逆时针旋转90度,只需写入
img = reshape(faces(i,:)'),256,256);
img = imrotate(img, 90);
答案 2 :(得分:1)
对于没有图像处理工具箱的人来说,通过应用转置(翻转X和Y)然后反射X轴可以实现同样的目的:
img = reshape(faces(i,:), [256 256]);
rightImg = flipdim(img', 1);
顺便说一句,我相信你可以通过更改编写面部的代码来节省很多麻烦,如下所示:
temp = im2double(Img);
faces = [faces;temp(:)];
此时,您将以正确的顺序存储图像中的所有体素,并且可以使用
处理单个图像fre = reshape(faces,[256 256 100]);
img = fre(:,:,ii);
要理解为什么这个工作你必须意识到Matlab按元素的顺序存储数组中的元素 - 所以m(1,1),m(2,1),m(3,1),m( 1,2),m(2,2),...等我这样做的方式保留了图像中像素的顺序,所以我最后要做的就是重塑矩阵并恢复第i个面
答案 3 :(得分:0)
由于图像表示为值矩阵,因此您只需转置矩阵即可imgNew = img';
示例:强>
load mandrill
X2=X';
figure()
image(X);
colormap(map)
figure()
image(X2)
colormap(map)