1つの方法として、strel関数による構造化要素を使った形態学的膨張処理(Image Processing Toolbox にて提供)を実行する方法が考えられます。
例えば、
se = strel('disk',4);
にて、半径4 の円形オブジェクトを作成することができます。
ここに、座標(x,y) 1ピクセルのみ 1 で周囲を0 とするような画像に、imdilate 関数による形態学的膨張処理を加えますと、その(x,y) を中心に円形オブジェクトを描画することになります。下記は一例となります。
%%%BEGIN CODE%%%
I = imread('cameraman.tif');
BW = zeros(size(I,1),size(I,2));
se = strel('disk',4); % 半径4の 円形オブジェクトを作成
centr = [20,20
50,70
100 180];
for n = 1:size(centr,1)
BW(centr(n,1),centr(n,2)) = 1;
end
figure(1), imshow(BW), title('膨張処理前')
BW = imdilate(BW,se); % 膨張処理
figure(2), imshow(BW), title('膨張処理後')
figure(3), imshow(uint8(BW).*I), title('マスク画像')
%%%END CODE%%%
また、円の中心座標が小数点を含むような場合、viscircles 関数で取得された円の線分データに各画像ピクセル値が入っているか入っていないかで判別する方法が考えられます。
viscircles の戻り値から、Lineハンドルを取得し、Line を構成する xdata, ydata の生値を取得することが可能です。
各画像ピクセルがその円を構成する線分内にあるか外にあるか inpolygon 関数にて判別可能となります。
%%%BEGIN CODE%%%
I = imread('cameraman.tif');
imshow(I)
centr = [102.12, 35.2;
150.7 , 150.3;
180.66, 200.23];
[X,Y] = meshgrid(1:256);
bw = zeros(size(I,1), size(I,2));
for n = 1:size(centr,1)
h = viscircles([centr(n,1) centr(n,2)],10,'LineWidth',1,'EdgeColor',[0 0 0])
ax = get(h,'Children');
xd = get(ax(1),'XData');
yd = get(ax(1),'YData');
in = inpolygon(X,Y,xd,yd);
bw = bw | in;
end
figure,imshow(I.*uint8(bw))
%%%END CODE%%%