为我的图形创建一个圆形蒙版

spa*_*omb 3 matlab mask

我正在绘制一个正方形图像,但由于我的相机从圆形结构中查看,我希望图像看起来也是圆形的.所以要做到这一点,我只是想为图像创建一个掩码(基本上创建一个矩阵,并通过掩码将我的数据相乘,所以如果我想保留我的图像,我乘以一,如果我想要那个部分图像变为黑色,我乘以0).

我不确定制作一个代表圆形开口的矩阵的最佳方法.我只是希望圆圈内的每个元素都是"1",圆圈外的每个元素都是"0",这样我就可以相应地为我的图像着色.我正在考虑做一个for循环,但我希望有一个更快的方法来做到这一点.所以......我需要的是:

  • 矩阵为1280x720
  • 我需要一个直径为720的圆,居中于1280x720矩阵的中间(我的意思是所有对应于圆内的元素都有一个"1"而所有其他元素都有一个"0"

我的尝试

mask = zeros(1280,720)
for i = 1:1280
    for j = 1:720
        if i + j > 640 && i + j < 1360
            mask(i,j) = 1;
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

以上显然不起作用,我需要更好地看一下,以确定何时添加1 = P的更好的等式,但理想情况下我不想使用for循环

谢谢,如果有什么不清楚,请告诉我!

Pet*_*erM 10

@kol的回答看起来很正确.您可以使用meshgrid函数使用矢量化代码执行此操作.

width = 1280;
height = 720;
radius = 360;
centerW = width/2;
centerH = height/2;
[W,H] = meshgrid(1:width,1:height);
mask = ((W-centerW).^2 + (H-centerH).^2) < radius^2;
Run Code Online (Sandbox Code Playgroud)