Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@crinoid

Matlab 円の認識

More than 1 year has passed since last update.

matlabを使うことにより、多くの画像処理を簡単にすることができる。
その中で今回の記事は円の認識の方法についてまとめていきたいと思う。
1. 画像(ペイント)から読み取る
2. 画像ファイルを読み取って認識
3. リアルタイムで画像処理
この3段階で進めていく。(まず、1だけ投稿。2,3は時間に余裕があったら投稿していきたいです)
参考記事 Acquisition Using the Image Acquisition Tool(英語版)

使用環境

  • matlab 2019a
  • windows 10

1. 画像(ペイント)から読み取る

下の画像内の円を認識していく。楕円も含んでいるため、どこまでが円と認識されるかのテストも含めてやってみる。(fig1.png)

1.1画像を読み込む(+前処理)

matlab
 rgb=imread(fig1.png);

本来はこの段階で、カラー画像からグレースケールへの変換➀やグレースケールから2値化のバイナリイメージを生成➁して、画像処理を進めていく方が計算量は少なくなるが、今回は変換は省略する。(変換する関数は以下の通りである)

matlab
gray=rgb2gray(rgb) % ➀ カラー→グレー
BW=imbinarize(gray) % ➁ グレー→2値化

1.2円の探索

ハフ変換を用いる方法でimfindcircles関数を使う
参考記事 imfindcircles関数
使用例は以下の通り

matlab
 [centers, radii] = imfindcircles(A, [Rmin Rmax])

(入力引数)
(1) A <-探索したい画像(イメージ)を入力
(2)[Rmin Rmax] <- 探索する円の半径の範囲: 閉区間[Rmin,Rmax]を表し,Rmin<=r<=Rmaxに当てはまる半径rの円を探す
注意)あまり範囲を広くとりすぎると精度が落ちるので
 ・Rmax < 3×Rmin
 ・(Rmax - Rmin)<100
に収まるように範囲設定すること。(ただし本記事ではソースコードの簡略化のため、分割せずに書いている)

もし、難しいようであれば。以下のように範囲を分割した方がよい。

matlab
    [CENTERS1, RADII1, METRIC1] = IMFINDCIRCLES(A, [20 60]);
    [CENTERS2, RADII2, METRIC2] = IMFINDCIRCLES(A, [61 100]);

(出力引数)
(1) centers <- 円の中心の座標
(2) radii<- 推定半径

1.3 円の作成

viscircles関数を使って、上記で特定した円を書いていく。

matlab
 viscircles(centers, radii,'Color','g')

オプションとして、'Color'を加えると、円の色を変更することができ(設定しなければ赤色)、bで青色、gで緑色というように指定できる。

1.4 まとめ

全体のコードをまとめると以下のようになり、下の図のように緑色の囲われた3つの円を認識することができた。

matlab
%コードまとめ
 %画像を読み込む
 rgb=imread(fig1.png);
 [centers, radii] = imfindcircles(rgb, [10 100])
 imshow(rgb);
 hold on;
 viscircles(centers, radii,'Color','g')


上図のように、緑色の囲われた円3つを認識できた!

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
crinoid
情報系の大学生。東海人工知能研究会(TAIR)運営。最近は機械学習の勉強をメインに取り組んでいます!(Kaggleにも参戦中)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?