image - 在图片中创建一个钻石

标签 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);

enter image description here

我可以画三边菱形。 我如何绘制第四条边?

最佳答案

Luis Mendo 在循环的 if 语句中确定了最后一个条件以绘制最后一行。如果您需要 for 循环解决方案,他的解决方案就是您正在寻找的解决方案。

但是,如果您想要更矢量化的内容,更有效的方法是使用 meshgrid 定义坐标网格然后只需应用一系列 逻辑 操作即可获得您的钻石。换句话说:

[x,y] = meshgrid(1:256, 1:256);
Img = abs(x-y) == 128 | x+y == 384 | x+y == 128;
imshow(Img);

我们因此得到:

enter image description here


一般来说,对于给定尺寸的正方形图像,您可以通过以下方式将其调整为任何尺寸的图像:

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 整除的图像大小。但是,菱形的对称性可能看起来不正确,但代码会无论如何工作。

关于image - 在图片中创建一个钻石,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426052/

相关文章:

c++ - 从平铺图像中进行双线性采样有什么好的策略吗?

java - 在 swing 中向图像添加滤镜

matlab - K折交叉验证

image-processing - 在 web 中实现 PSD 处理(如在 social6.com 中)

opencv - 如何混合 80x60 热图像和 640x480 RGB 图像?

opencv - 在3D图像中查找表面

image - 为什么 Twitter (twimg.com) 使用大小后缀(例如 ':large' )而不是查询参数

javascript - 如何查找 src 为空的 Img 标签。并删除它

performance - 如何进行快速的多维矩阵向量乘法?

matlab - Softmax 回归的向量化实现