我正在绘制一个方形图像,但由于我的相机从圆形结构中查看,我希望图像看起来也是圆形的。所以要做到这一点,我只是想为图像创建一个掩码(基本上创建一个矩阵,并通过掩码将我的数据相乘,所以如果我想保留我的图像,我乘以一,如果我想要那个部分图像变为黑色,我乘以0)。
我不确定制作代表圆形开口的矩阵的最佳方法。我只是希望圆圈内的每个元素都是“1”,圆圈外的每个元素都是“0”,这样我就可以相应地为我的图像着色。我正在考虑做一个for循环,但我希望有一个更快的方法来做到这一点。所以......我只需要:
我的尝试
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
以上显然不起作用,我需要更好地看一下,以确定何时添加1 = P的更好的等式,但理想情况下我不想使用for循环
谢谢,如果有什么不清楚,请告诉我!
答案 0 :(得分: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;
答案 1 :(得分:1)
Here是一种可能的解决方案:
width = 160;
height = 120;
mask = zeros(width, height);
center_x = width / 2;
center_y = height / 2;
radius = min(width, height) / 2;
radius2 = radius ^ 2;
for i = 1 : width
for j = 1 : height
dx = i - center_x;
dy = j - center_y;
dx2 = dx ^ 2;
dy2 = dy ^ 2;
mask(i, j) = dx2 + dy2 <= radius2;
end;
end;
picture = randn(width, height); % test image :)
masked_image = picture .* mask;
imagesc(masked_image);