Image 在图片中创建一个菱形
我要写一个程序,在一个特定的图像中画一个钻石 我写了这段代码Image 在图片中创建一个菱形,image,matlab,image-processing,Image,Matlab,Image Processing,我要写一个程序,在一个特定的图像中画一个钻石 我写了这段代码 Img=zeros(256,256); for x=1:256 for y=1:256 if(y-x==128)||(y-x==-128)||(y+x==128) Img(x,y)=1; end end end imshow(Img); 我可以画三面菱形。 如何绘制第四面؟缺少的条件是y+x==384。因此,将if行替换为 if (y-x==128)||(y-x==-12
Img=zeros(256,256);
for x=1:256
for y=1:256
if(y-x==128)||(y-x==-128)||(y+x==128)
Img(x,y)=1;
end
end
end
imshow(Img);
我可以画三面菱形。
如何绘制第四面؟缺少的条件是
y+x==384
。因此,将if
行替换为
if (y-x==128)||(y-x==-128)||(y+x==128)||(y+x==384)
如果坐标以0
为中心,例如-128:128
:
Img=zeros(257,257);
for x=-128:128
for y=-128:128
if(y-x==128)||(y-x==-128)||(y+x==128)||(y+x==-128)
Img(129+x,129+y)=1;
end
end
end
imshow(Img);
正如@kkuilla所指出的,这很容易矢量化。请参见。Luis Mendo在循环的
if
语句中确定了最后一个条件以绘制最后一条线。他的解决方案就是您想要的for
循环解决方案
然而,如果你想要更矢量化的东西,一个更有效的方法是使用定义一个坐标网格,然后简单地应用一系列逻辑操作来获得你的菱形。换言之:
[x,y] = meshgrid(1:256, 1:256);
Img = abs(x-y) == 128 | x+y == 384 | x+y == 128;
imshow(Img);
因此,我们得到:
通常,对于给定大小的正方形图像,您可以通过以下方式使其适应任何大小的图像:
N = 256; %// Change here - width/height of your image
[x,y] = meshgrid(1:N, 1:N);
Img = abs(x-y) == floor(N/2) | x+y == floor(3*N/2) | x+y == floor(N/2);
imshow(Img);
我放置了一个floor
操作,以防您想要指定一个不能被2平均整除的图像大小。然而,钻石的对称性看起来可能不正确,但无论如何代码都会工作。我在等待矢量化解决方案…:-)@kkuilla Hahaha。我没想到,但是是的,这很容易做到。我正在删除矢量化部分,因为它已经出现在@kkuilla中。我想通过furie系列使用此代码对图像进行压缩。好吗?@LuisMendo-我希望你不介意我使用你最后的if
语句并将其矢量化:)我不想在你发现问题的时候蒙蔽你首先是代码。顺便说一句,谢谢你链接到我的答案:)