我正在尝试在MATLAB中创建一个矩阵。
矩阵从左到右以及从上到下从255到0。也就是说,左上角是矩阵唯一值为255的位置,最右边的列和最下面的行的值为0。
我试图这样做而不使用任何循环,任何想法?
答案 0 :(得分:1)
以下是使用bsxfun
和min
的解决方案:
a = 255:-1:0;
result = bsxfun(@min, a, a.');
从MATLAB r2016b开始,你可以写:
result = min(a, a.');
对于最大值3
,将生成此输出:
result =
3 2 1 0
2 2 1 0
1 1 1 0
0 0 0 0
答案 1 :(得分:0)
根据此处的答案:circle with gradient gray scale
一种可能的解决方案是:
N = 255; %// this decides the size of image
[X,Y] = meshgrid(1:-1/N:0, 1:-1/N:0) ;
out= X + Y-1;
out(out<0)=0;
out=uint8(out*255);
答案 2 :(得分:0)
您可以使用hankel
M = hankel(255:-1:0, zeros(1, 256));
输出一个较小的例子:
n = 3; % Top left value
M = hankel(n:-1:0, zeros(1, n+1))
>> M = [ 3 2 1 0
2 1 0 0
1 0 0 0
0 0 0 0 ]
像这样的结构的另一个有用功能是toeplitz
。可以生成相同的结果:
M = fliplr(toeplitz(zeros(1, 256), 0:255));