イメージ内の円形オブジェクトの検出と測定
この例では、ThingSpeak™ および Image Processing Toolbox™ を使用して、Web サイトの URL からイメージを読み取り、イメージ内の円形オブジェクトの数をカウントする方法を説明します。計算された値は、ThingSpeak チャネルに格納されます。
メモ
この例を実行するには、Image Processing Toolbox を使用するライセンスの与えられた MathWorks アカウントにログインしていなければなりません。
URL からのイメージの読み取り
webread
(MATLAB)を使用して、公開 URL からイメージをインポートします。イメージには、硬貨を数えるために必要な情報よりも多くの情報が含まれています。処理時間を短く抑えるために、イメージのサイズを変えることができます。を使用して、イメージを元のサイズの 30% に縮小します。
rgb = webread('http://www.publicdomainpictures.net/pictures/40000/velka/british-coins.jpg');
rgb = imresize(rgb, 0.3);
imshow(rgb)
感度設定の調整と円形のカウント
検出すべき複数の円があるほかに、イメージには色の異なる硬貨が含まれており、背景とのコントラストはそれぞれ異なっています。真ちゅう色の硬貨は、この背景と強いコントラストをなしています。銀の硬貨は背景にずっと近い色です。imfindcircles
(Image Processing Toolbox)を使用して硬貨をカウントします。
既定では、
imfindcircles
は背景よりも明るい円形オブジェクトを検出します。このため、imfindcircles
でパラメーター'ObjectPolarity'
を'dark'
に設定して、暗色の円を探します。関数
imfindcircles
にはパラメーター'Sensitivity'
があり、円形オブジェクトを検出する間の内部のしきい値を制御するために使用できます。'Sensitivity'
を0.92
に設定します。このイメージに対し、[80 130] ピクセルの探索半径を指定して
imfindcircles
を呼び出します。centers
ベクトルの長さは検出された円形の数と等しくなります。
[centers, radii] = imfindcircles(rgb,[80 130],'ObjectPolarity','dark', ... 'Sensitivity',0.92); numCircles = length(centers)
numCircles = 5
ThingSpeak チャネルへの結果の保存
この例と ThingSpeak チャネルを使って、動的イメージの内容を保存し、追跡することができます。writeChannelID で指定された ThingSpeak チャネルに円の数を書き込みます。writeChannelID
を自分のチャネル ID に変更し、writeAPIKey
で自分独自のチャネルの Write API キーを指定します。
% TODO - Replace the [] with channel ID to write data to: writeChannelID = []; % TODO - Enter the Write API Key between the '' below: writeAPIKey = 'XXXXXXXXXXXXXXXX'; thingSpeakWrite(writeChannelID, numCircles, 'Writekey', writeAPIKey);
参考
| Image Processing Toolbox 入門 (Image Processing Toolbox) | imshow
(Image Processing Toolbox) | | webread
(MATLAB) | | imfindcircles
(Image Processing Toolbox)