目前,我需要用matlab transformate使用這樣實現矩陣變換與齊次座標
% for translation
T = [1 0 dx; 0 1 dy; 0 0 1];
例如齊次座標矩陣寫一個程序:
A =
92 99 1 8 15 67 74 51 58 40
98 80 7 14 16 73 55 57 64 41
4 81 88 20 22 54 56 63 70 47
85 87 19 21 3 60 62 69 71 28
86 93 25 2 9 61 68 75 52 34
17 24 76 83 90 42 49 26 33 65
23 5 82 89 91 48 30 32 39 66
79 6 13 95 97 29 31 38 45 72
10 12 94 96 78 35 37 44 46 53
11 18 100 77 84 36 43 50 27 59
>> I = translate(A, 4, 4)
I =
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN 92 99 1 8 15 67
NaN NaN NaN NaN 98 80 7 14 16 73
NaN NaN NaN NaN 4 81 88 20 22 54
NaN NaN NaN NaN 85 87 19 21 3 60
NaN NaN NaN NaN 86 93 25 2 9 61
NaN NaN NaN NaN 17 24 76 83 90 42
凡NaN
細胞是指「空白空間「。如您所見,A
矩陣是在x
軸上翻譯4個單位,在y
軸上翻譯爲4個單位,並保留NaN
值。輸出矩陣I
必須與A
一樣大小。
不過,我目前的方案不細使用圖像的工作(這不穿空的空間「男」的價值觀,它把「1」):
所以,這是我的程序:
function t_matrix = translate(input_matrix, dx, dy)
[rows cols] = size(input_matrix);
t_matrix = input_matrix;
t_matrix(:) = NaN;
T = [1 0 dx; 0 1 dy; 0 0 1];
for n = 1:numel(input_matrix)
[x y] = ind2sub([rows cols], n);
v = [x y 1]';
v = T*v;
a = floor(v(1));
b = floor(v(2));
if a > 0 && b > 0
t_matrix(a, b) = input_matrix(x,y);
end
end
t_matrix = t_matrix(1:rows, 1:cols);
如何以更簡單的方式使用matlab實現均勻轉換?
唯一的限制:繼續使用這個矩陣:
% for translation
T = [1 0 dx; 0 1 dy; 0 0 1];
並保持NaN值空的空間。