我编写了一个将3D值转换为2D的功能,但是无法使其正常工作可能是我正在解析错误的值。
我将valuse
中的值作为2坐标传递,并尝试在2D中进入Output
。任何人都可以在下面的功能中进行修正并帮助我运行该功能吗?
% Perspective Projection
function Output = perspective_projection(Input)
Output = zeros(size(Input));
for ii = 1: length(Input)
Output(ii,1) = Input(ii,1)/Input(ii,3);
Output(ii,2)=Input(ii,2)/Input(ii,3);
end
value = [6,4,2];
[a1,b1] = perspective_projection(a1)
答案 0 :(得分:3)
Rody建议的BSXFUN方法是一种优雅的方式,但是如果你想保持循环,试试这个 -
% Perspective Projection
function Output = perspective_projection(Input)
Output = zeros(size(Input,1),2);
for ii = 1: size(Input,1)
Output(ii,1) = Input(ii,1)/Input(ii,3);
Output(ii,2) = Input(ii,2)/Input(ii,3);
end
答案 1 :(得分:2)
如果我理解正确,你应该将你的功能重写为:
function Output = perspective_projection(Input)
Output = bsxfun(@rdivide, Input(:,1:2), Input(:,3));
end
或者,从你似乎在呼唤它的方式来判断:
function [OutputX,OutputY] = perspective_projection(Input)
OutputX = Input(:,1)./Input(:,3);
OutputY = Input(:,2)./Input(:,3);
end
请注意,您的功能非常简单(我甚至不使用函数):
[X,Y] = deal(Input(:,1)./Input(:,3), Input(:,2)./Input(:,3));
至于你的原始功能:错误是在初始化中:
function Output = perspective_projection(Input)
%// WRONG: this initializes a 3D array!
Output = zeros(size(Input));
%// ...but you want a 2D array
for ii = 1: length(Input)
Output(ii,1) = Input(ii,1)/Input(ii,3);
Output(ii,2) = Input(ii,2)/Input(ii,3);
end
end
当然还有多个输出(但我不清楚你是否想要这个......)