我是MATLAB的新手,我对以下问题有以下公式。如果我想将灰度从64设置为256,我只需修改矩阵以创建M[256,3]
,其中:
M[Xi,1]=M[Xi,2]=M[xi,3]
M[Xi,Yi] < M[Xi+1,Yi]
M[1,Yi]=0
M[256,Yi]=1.
所以我需要创建一个我不知道的步骤矩阵;最后一个元素是1
,第一个元素是0
,我得到了以下适用于任何列的公式:
C[i]= X0 - (Xn*i -Xn)/N
其中X0=0
,Xn=1
和N=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必须具备的东西,使用那么多循环真的很烦人:根据第一个元素,最后一个元素和向量的大小将值设置为数组。
答案 0 :(得分:3)
我们bsxfun
-
palette = bsxfun(@rdivide,[0:255]',255*ones(1,3))
说明:以下是从原始循环方法开始推断出bsxfun
解决方案的方法:
1)设置1D i
值数组 -
I=(1:256)-1
2)将255
的除数存储为3
的行向量,这些元素对应于三列所需输出 -
D = 255*ones(1,3)
3)最后,在转置I
之后,按D
执行I
的元素划分,以便为我们提供所需的输出 -
out = bsxfun(@rdivide,I.',D)
答案 1 :(得分:2)
首先需要从X0
到Xn
的等距步长向量,总共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在his answer的评论中指出,转置的正确方法是linspace(X0,Xn,N).'
,因为.'
是转置运算符。简单地使用'
将计算共轭转置,但只要您使用实数这两个是相同的(但它很容易忘记{{} 1}}如果你真的只想转置一个复杂的变量。)
答案 2 :(得分:2)
gray
函数执行此操作:
palette = gray(256);