連載
» 2017年04月28日 11時30分 UPDATE

レファレンスモデルからFPGA用サブシステムの作成まで:モデルベースデザイン手法を使ったProgrammable SoCの協調設計【実践編I】 (2/7)

[松本充史(MathWorks Japan),EDN Japan]

MATLABでコンポーネントの機能検討

 まずは、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© 2017 ITmedia, Inc. All Rights Reserved.

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © 2005 - 2017 ITmedia Inc. All rights reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.