【问题标题】:How to create a 3D matrix in MATLAB by rotating 2D matrix around its center column or center row?如何通过围绕中心列或中心行旋转 2D 矩阵在 MATLAB 中创建 3D 矩阵?
【发布时间】:2017-05-08 00:41:38
【问题描述】:

我有一个 2D MATLAB 矩阵,它关于它的中心列是对称的。我想围绕它的中心列旋转这个矩阵,以生成一个表示具有圆柱对称性的对象的 3D 矩阵。

我想用一个不同的矩阵做同样的事情,它关于它的中心行是对称的。 (这次我想围绕它的中心行旋转它以生成 3D 矩阵)。

我的想法是将链接中给出的想法推广到 3D:

How to create a 2D image by rotating 1D vector of numbers around its center element?

但对 MATLAB 的了解不够好,这对我来说并不是一件那么简单的任务。

有人可以帮忙吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我刚刚将accepted answer修改为3D:

    % generate symetric matrix
    A = zeros(11,31);
    A(4:8,10:22) = repmat([1:7 6:-1:1],[5 1]);
    % symmetric x axis
    n = floor(size(A,2)/2);
    
    % A vector of distance (measured in pixels) from the center of vector V to each element of V
    [r,y] = meshgrid([n:-1:0, 1:n],1:size(A,1));
    
    % Now find the distance of each element of a square 2D matrix from it's centre. @(x,y)(sqrt(x.^2+y.^2)) is just the Euclidean distance function.
    ri = sqrt( bsxfun( @(x,y)x.^2+y.^2,r,permute(r,[1 3 2]) ) );
    yi = repmat(y,[1 1 size(A,2)]);
    
    % Now use those distance matrices to interpole V
    obj = interp2(r(:,1:n+1),y(:,1:n+1),A(:,1:n+1),ri,yi,'nearest');
    obj(isnan(obj)) = 0;
    
    % show
    [xg,yg,zg] = meshgrid(1:size(obj,2),1:size(obj,1),1:size(obj,3));
    scatter3(xg(:),yg(:),zg(:),10,obj(:)+1,'filled')
    axis equal
    

    更新 - 如果你不想使用interp2,你可以这样做:

    obj = interp1(r(1,1:n+1).',A(:,1:n+1).',ri(1,:,:),'nearest');
    obj = permute(obj,[4,3,2,1]);
    obj(isnan(obj)) = 0;
    

    【讨论】:

    • 感谢您的回答!我想问有没有办法用interp1解决问题而不用interp2?
    • 您可以省略 y 并在 A 的行上循环使用 interp1for row = 1:1:size(A,1); obj(row,:,:) = interp1(r(row,1:n+1),A(row,1:n+1),ri(row,:,:),'nearest'); end
    • 抱歉我的唠叨,但是对于大型矩阵来说,循环会花费太长时间。还有其他选择吗?也许使用矩阵的重塑或类似的东西?感谢您的帮助!
    • 非常感谢!还有一件事:不幸的是,我没有设法为另一个矩阵翻译围绕中心行旋转的代码,该矩阵围绕中心行(而不是中心列)对称。你能帮我解决这个问题吗?
    • 这很简单,只需在相关代码行中的维度之间切换即可。
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多