我有一个图像,我已将其列为矩阵。我想对该图像进行转置,然后在屏幕上显示该图像。
我想知道如何以“硬”的方式做到这一点,即不使用 MATLAB 的转置函数。
function [B] = trans(A)
[r c] = size(A);
B = zeros(c,r);
for i = 1:r
for j = 1:c
B(j,i) = A(i,j)
end
end
end
因为这是一堂课,所以我不会给你一个确切的答案,但我会朝正确的方向轻推你。我假设您正在寻找一种涉及手动转置信息的方法,而不是使用内置函数。
Matlab 以向量和“大小”的形式将值存储在矩阵中 - 例如,2x3 矩阵将在向量中存储六个值,然后 [2,3] (内部)告诉它它是 2x3而不是 6x1。
对于 2x3 矩阵,这是向量中值的顺序:
1 3 5
2 4 6
要引用 (2,2) 中的值,可以将其引用为 A(2,2) 或 A(4)。(1,3) 中的值可以引用为 A(5)。
因此,如果您可以构造一个引用转置顺序中的值的向量,那么您可以将新值分配到适当的顺序并将它们存储在适当大小的矩阵中。为了说明这一点,请考虑上述矩阵的转置:
1 2
3 4
5 6
这将表示为 (1,3,5,2,4,6),大小为 (3,2)。如果您可以构造向量 (1,3,5,2,4,6),那么您可以使用该向量来适当地分配值。
以下是解决方案的提示:转置将A(1,2)
普通数组A
中的元素B(2,1)
转换为转置后数组中的元素B
( B=A'
),反之亦然。因此,您可以遍历所有行和列,并逐个元素地应用转换。
为此,您可以将 rot90 与 flipud/fliplr 一起使用。