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

1 vue (au cours des 30 derniers jours)
MathWorks Support Team
MathWorks Support Team le 14 Oct 2016
どのようにして円形のROIを作成することができますか?
ある座標(xn,yn)を中心として半径 r の 円形のROI を作成したいですが、どのようにすればよいですか?

Réponse acceptée

MathWorks Support Team
MathWorks Support Team le 14 Oct 2016
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%%% 

Plus de réponses (0)

Tags

Aucun tag saisi pour le moment.

Produits


Version

R2014b

Community Treasure Hunt

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

Start Hunting!