PDA

查看完整版本 : [求助]用matlab生成随机图像


子虫湖南
2008-10-27, 22:35
有个matlab程序,运行结果不是我想得到的效果。
我的目的是想生成一幅二值图像,白色背景,由随机分布的50个黑色矩形构成,也就是说矩形的位置是随机的。其次,矩形宽服从正态分布,高是宽的两倍。
请高手帮忙,程序如下:

f=ones(256,256); %生成全为1的256阶矩阵
subplot(131);imshow(f); %显示(白色矩阵)

x=unidrnd(256^2,1,50); %生成50个不超过256的平方的均匀随机数
for i=1:50
f(x(i))=0;
end %50个随机点处像素值改为0(50个黑点)
subplot(132);imshow(f);

y=normrnd(15,1,1,50); %生成50个正态分布N(15,1)随机数
y=round(y);
z=2*y;

for i=1:50
for k=1:z(i)
if x(i)+k>256^2
break;
else
f(x(i)+k)=0;
for n=1:y(i)
if y(i)*256+x(i)>256^2
break;
else
f(y(i)*256+x(i))=0;
f(y(i)*256+x(i)+k)=0;
end
end
end %对每个黑点x(i),将以该点为左上角顶点的高为z(i),
宽为y(i)的矩形区域内的点全都赋值0(即变黑)
subplot(133),imshow(f);

直接复制到matlab下,可以运行。:ft:

子虫湖南
2008-10-27, 22:42
补充
我的想法是,
第一步,生成一个白色矩阵
第二步,确定随机的50个位置作为黑色矩形的左上角顶点
第三步,产生50个正态随机数,然后取整,于是得到50个矩形的大小即长与宽
第四步,以50个黑点为矩形左上角顶点,将其下方的一个矩形区域都赋值0,变黑。

问题出现在第四步,程序执行后没有返回最终的图像。不知道为何:'(