子虫湖南
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:
我的目的是想生成一幅二值图像,白色背景,由随机分布的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: