在MATLAB中将3D值转换为2D

时间:2014-03-07 07:33:56

标签: matlab matlab-guide matlab-deployment

我编写了一个将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)

2 个答案:

答案 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

当然还有多个输出(但我不清楚你是否想要这个......)