【问题标题】:Shift m*n image matrix on matlab to the right将matlab上的m*n图像矩阵右移
【发布时间】:2018-10-26 02:39:50
【问题描述】:

我目前有一个 m*n 灰度点图像矩阵。我想将图像向右移动一定数量的像素。以下代码似乎将其向右和向上移动。我怎样才能解决这个问题?我需要做一些矩阵运算来做移位,所以内置函数不起作用。

% Performs a shift on an input image matrix
function shift(CBout, matrix)    
    [m,n]=size(CBout);
    T=ones(m,n)*200;

    CBout = T+CBout;

    plot(CBout(1,:), CBout(2,:), 'k.');
    scale = 400;
    axis([-scale scale -scale scale])
end

【问题讨论】:

  • 你为什么要这样做?除非 Matlab 可以优化您的代码,否则这种转变将意味着为新的(和更大的)数据分配内存并将旧数据复制到新数据。内存分配很慢。最好只更改您对数据的解释(在您的脑海中)而不对它做任何事情(使用计算机)。我想您的目标是继续向其中添加行,并且您知道数组的最终大小。如果是这种情况,最好只创建一个具有最终大小的大矩阵,然后填充该大矩阵的行。
  • 您考虑过使用circshift吗?在您的情况下,如果我正在阅读您想要正确执行的操作,那将是 circshift(CBout, 200, 2)
  • @rayryeng 这是一个更好的解决方案......但是我这样做是为了一个线性代数类,它只允许我对 CBout 矩阵执行矩阵运算

标签: matlab matrix linear-algebra


【解决方案1】:

我能够弄清楚。我只是创建了一个向量,然后将其添加到 mxn 矩阵的第一行。

% Performs a shift on an input image matrix
function shift(CBout, amount)
    disp('Shifting...');

    n = size(CBout, 2);
    T=ones(1,n)*amount;

    % Add shift amount to every element in the first row
    CBout = [CBout(1,:)+T; CBout(2,:)];

    plot(CBout(1,:), CBout(2,:), 'k.');
    scale = 400;
    axis([-scale scale -scale scale])
end

【讨论】:

  • 请注意,您不需要创建一个数组。您可以只添加标量 amount。 MATLAB 足够智能,可以确定您正在将矩阵中的所有值偏移一个固定的量。
猜你喜欢
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多