我有100个灰度图像(256256像素),它们存储在faces.mat文件中。因此,在faces.mat文件中,有100行和65536(256256)列。每行代表一个图像。
现在我要重新塑造面孔矩阵并显示图像。
我用途:
for i=1:N
imagesc(reshape(faces(i,:)'),256,256));
colormap gray;
end
但是我发现我的图像转了90度!x1c 0d1x
有人能告诉我如何正确地转换图像吗?当我把图像转换成face.mat时,我处理图像的方式是否有误?下面是我写的将图像存储到matrix的代码。
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');
4条答案
按热度按时间jyztefdp1#
由于图像被表示为值的矩阵,因此您可以转置矩阵,因此imgNew= img ';
范例:
goqiplq22#
对于整数乘数为90度的旋转图像,存在
rot90
函数:这比
imrotate
更有效,比其他答案中提出的just transpose更通用。qlfbtfca3#
您可以使用
imrotate
来旋转图像。要逆时针旋转90度,只需编写xriantvc4#
对于没有图像处理工具箱的人,可以通过应用转置(翻转X和Y),然后围绕X轴进行反射来实现同样的效果:
顺便说一句,我相信您可以通过更改编写面孔的代码来省去很多麻烦,如下所示:
此时,您将以正确的顺序存储图像中的所有体素,并且可以使用
要理解为什么这样做,你必须意识到Matlab在数组中存储元素的顺序--例如m(1,1),m(2,1),m(3,1),m(1,2),m(2,2),......等等。我这样做的方式保留了图像中像素的顺序,所以我在最后要做的就是重塑矩阵并恢复第i张脸。