【问题标题】:Get step from size, last value and first value in MATLAB从 MATLAB 中的大小、最后一个值和第一个值获取步长
【发布时间】:2015-10-04 14:44:37
【问题描述】:

我是 MATLAB 新手,对于以下问题,我有以下公式。如果我想设置从 64 到 256 的灰度,我只需修改一个矩阵以创建一个 M[256,3] 其中:

  1. M[Xi,1]=M[Xi,2]=M[xi,3]
  2. M[Xi,Yi] < M[Xi+1,Yi]
  3. M[1,Yi]=0
  4. M[256,Yi]=1.

所以我需要创建一个包含我不知道的步骤的矩阵;最后一个元素是1,第一个元素是0,我得到了适用于任何列的以下公式:

C[i]= X0 - (Xn*i -Xn)/N

其中X0=0Xn=1N=256

使用这样的循环:

k=(1:256);
for i=1:256,
   k(i)=(i-1)/255;

然后将值设置为调色板

palette=zeros(256,3);

 for ii=1:3, 
     palette(:,ii)=k;
 end

还有其他选择吗?对我认为 MATLAB 必须具备的东西使用这么多循环真的很烦人:根据第一个元素、最后一个元素和向量的大小将值设置为数组。

【问题讨论】:

  • 你的意思是linspace,如linspace(X0,Xn,N)?那么答案是repmat(linspace(X0,Xn,N)',[1 3])
  • @AndrasDeak Ops,没有看到您使用repmat 编辑的评论!添加作为答案?这一定是最直观的解决方案。
  • @AndrasDeak 这是最简单的解决方案,谢谢,你能给我解释一下吗?
  • @Divakar,谢谢,我刚刚做了(为了完整性)。路易斯:请看下面我的回答。

标签: matlab image-processing matrix vectorization


【解决方案1】:

让我们bsxfun -

palette = bsxfun(@rdivide,[0:255]',255*ones(1,3))

解释:以下是从您原来的循环方法开始推断bsxfun 解决方案的方法:

1) 设置i 值的一维数组 -

I=(1:256)-1 

2) 将255 的除数存储为3 的行向量,这些元素对应于所需输出的三列-

D = 255*ones(1,3)

3) 最后,在转置I 后,将I 除以D,得到我们想要的输出 -

out = bsxfun(@rdivide,I.',D)

【讨论】:

  • 你能解释一下吗?
  • 你能给我解释一下“。” “请?
  • @LuisRubiera 看看编辑后的 ​​cmets 是否增加了一些意义?
  • @LuisRubiera 哦,.',它在那里执行转置,而不是与' 共轭转置。有关更多信息,请参阅Using transpose versus ctranspose in MATLAB
【解决方案2】:

您首先需要一个从X0Xn 的等距步长向量,总共有N 个点。这可以通过

来实现
linspace(X0,Xn,N)

(注意这是一个行向量,即它的size[1 N])。重复这 3 次的最简单方法是 repmat 函数,它以第二个参数指定的方式重复其第一个参数,所以

repmat(linspace(X0,Xn,N)',[1 3])

将按列重复linspace(X0,Xn,N)'(行向量,大小为[N 1])三次,精确创建您需要的矩阵(大小为[N 3])。

请注意,正如 @Divakar 在 cmets 中指出的 his answer,转置的正确方法是使用 linspace(X0,Xn,N).',因为 .' 是转置运算符。简单地使用 ' 将计算 conjugate 转置,但只要你使用实数,两者是相同的(但如果你真的想要转置一个复变量)。

【讨论】:

    【解决方案3】:

    gray 函数可以做到这一点:

    palette = gray(256);
    

    【讨论】:

    • 我什至不确定这是一个 hack:我认为 OP 需要一个颜色图。无论如何,我从来没有想过这个解决方案:)干得好!
    • @AndrasDeak 谢谢!是的,对我来说这是一个最自然的功能,因为它是颜色图之一,就像你心爱的 jet :-)
    猜你喜欢
    • 2019-03-09
    • 2016-12-12
    • 2020-06-09
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多