まずは、MATLABでコンポーネントの機能検討をしてみましょう。最初にサンプル画像を読み込んで表示します。
>> I = imread('PenBall.jpg');
>> imshow(I)
次に緑色のオブジェクトを抽出します。RGB成分を演算するときは、元のuint8型ですと、オーバーフローが生じる恐れがあるので、double型に変換してから演算しています。
>> IR = double(I(:,:,1)); %R成分 >> IG = double(I(:,:,2)); %G成分 >> IB = double(I(:,:,3)); %B成分 >> Ig = uint8(IG-0.5*(IR+IB)); >> figure,imshow(Ig)
閾(しきい)値(プログラムでは26)で2値化します。閾値は何度か実行してボール全体が抽出できるよう調整します。
>> Ith = Ig > 26; >> figure, imshow(Ith)
検出したいボール以外に、左側にノイズによる白い点がいくつか見えるので、モルフォロジー処理でノイズを除去します。
>> se = strel('disk',5)
>> Im = imopen(Ith, se);
>> figure, imshow(Im)
重心点を求めて座標値を元画像に表示します。
>> Ct = regionprops(Im, 'Centroid')
>> xy = Ct.Centroid;
>> hold on
>> text(xy(1),xy(2),'*', 'FontSize',14);
>> text(xy(1)-100,xy(2)+40,...
[num2str(xy(1)) ', ' num2str(xy(2))],...
'FontSize',14);
おおよそこのような処理でオブジェクトの重心点が求められることが分かりました。
Copyright © ITmedia, Inc. All Rights Reserved.