3

正方形の画像をプロットしていますが、カメラが円形の構造から見えるため、画像も円形に見えるようにしたいと考えています。これを行うには、画像のマスクを作成したかっただけです(基本的にはマトリックスを作成し、データにマスクを掛けます。そのため、画像を保持したい場合は1を掛けます。その部分が必要な場合画像を黒くするには、0 を掛けます)。

ただし、円形の開口部を表すマトリックスを作成する最良の方法はわかりません。円内のすべての要素を「1」にし、円の外側のすべての要素を「0」にして、それに応じて画像に色を付けたいだけです。for ループを実行することを考えていましたが、より高速な方法があることを望んでいました。だから...私が必要なのは次のとおりです。

  • 1280x720 のマトリックス
  • 1280x720 マトリックスの中央にある、直径 720 の円が必要です (これは、円内にあることに対応するすべての要素が「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

上記は明らかに機能しません。1 = P をいつ追加するかを決定するためのより良い方程式を形成するために、もう少しよく見る必要がありますが、理想的には for ループを使用したくない

ありがとう、不明な点があれば教えてください!

4

2 に答える 2

1

考えられる解決策は次のとおりです

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);
于 2013-08-28T12:03:40.053 に答える