どのようにして円形の​ROIを作成すること​ができますか?

1 回表示 (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2016 年 10 月 14 日
回答済み: MathWorks Support Team 2016 年 10 月 14 日
どのようにして円形のROIを作成することができますか?
ある座標(xn,yn)を中心として半径 r の 円形のROI を作成したいですが、どのようにすればよいですか?

採用された回答

MathWorks Support Team
MathWorks Support Team 2016 年 10 月 14 日
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%%% 

その他の回答 (0 件)

タグ

タグが未入力です。

製品


リリース

R2014b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!