Home > Tags > ギアの歯数を画像処理で数える

ギアの歯数を画像処理で数える

PythonとOpenCVによる画像処理プログラミングセミナー 第1回目

■はじめに
私はハードウェアグループ所属で、プログラミング業務に携わることが少なかったのですが、
画像処理プログラミングについて先輩から教わる機会を設けることができました。
ここでは、プログラミング入門者である私が、日々学んだ技術を紹介していきたいと思います。

■今回のテーマ
まずはIntel社の画像処理ライブラリOpenCVを使った画像処理プログラムについて紹介します。
OpenCVは、500以上もの関数が用意され、座標変換、特徴点抽出といった画像処理が容易に行えます。
OpenCVはC言語用のライブラリですが、今回はコンパイル不要でデバッグがスムーズに行える
スクリプト言語python、OpenCVをpythonで使用するためのctypes OpenCVモジュールを使った
画像処理について、紹介したいと思います。

■  ギヤの歯数の検出
メカトロニクスでは、ギヤは必ずと言っていいほど使われます。その一環でギヤの歯数を数えるという場面は、
しばしば遭遇します。20歯程度なら、容易に数えられるのですが、30歯、40歯…100歯と歯数が増える程、
人間の目で数えるのはとても困難になります。それを自動で数えるものがあったら、便利ではないでしょうか。
ここでは画像処理学習の題材として、ギヤの画像から歯数を自動で数える画像処理プログラムを作成してみました。

■  画像処理アルゴリズム概要
今回は以下のようなアルゴリズムで、プログラムを作成しました。第1回目は、グレースケール変換まで紹介したいと思います。

gear-chart-090721a

■  ギヤ画像の取得
まずは画像処理対象となるギヤの画像を用意します。
今回は歯数が28歯のモールドギヤをCanon IXY DIGITAL600デジタルカメラで撮影しました。

gear

画像が用意出来たら、ctypes OpenCVモジュールをインポートし、OpenCVのcvLoadImage関数で画像をロードし、
cvCreateImage関数で画像データを格納するメモリ領域を確保します。また、cvResize関数を用いて画像サイズを変換します。

from opencv import *
#画像ファイル読込 (ファイル名:sampleImage.JPG)
readImage = cvLoadImage(‘C:\\python26\\Image\\sampleImage.JPG’,
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR )

#画像サイズ変換(1152×864に変換)
sourceImage = cvCreateImage(cvSize(1152, 864), IPL_DEPTH_8U, 3)
cvResize(readImage, sourceImage, CV_INTER_CUBIC)

次に、画像変換後の画像メモリ領域を同様にcvCreateImage関数で確保します。
あらかじめsizeOfImage関数で元画像のサイズを読み込み、同サイズのものを作成します。

#変換画像メモリ領域確保
sizeOfImage = cvGetSize(sourceImage)
grayImage = cvCreateImage(sizeOfImage, IPL_DEPTH_8U, 1)   #グレースケール変換画像用
smoothImage = cvCreateImage(sizeOfImage, IPL_DEPTH_8U, 1)  #ぼかし画像用
binImage = cvCreateImage(sizeOfImage, IPL_DEPTH_8U, 1)  #2値化画像用
contImage = cvCreateImage(sizeOfImage, IPL_DEPTH_8U, 1)  #輪郭検出画像用

次にcvCvtColor関数で、元画像をグレースケールに変換します。

#グレースケール変換
cvCvtColor(sourceImage, grayImage, CV_BGR2GRAY)

画像がグレースケールに変換されたか確認するため、cvShowImage関数で変換画像を表示してみます。
cvNamedWindow関数で、あらかじめ表示用のウィンドウを作成します。

cvNamedWindow(“Image”, CV_WINDOW_AUTOSIZE)  #ウィンドウ作成
cvShowImage( “Image”, grayImage)  #画像表示
cvWaitKey(0)  #何かキーを押されたら終了

記述できたら、いざプログラムを実行してみます。

gear-gray

グレースケール画像に変換出来ました。次回は画像の2値化、ギヤ歯輪郭検出などについて紹介します。

PythonとOpenCVによる画像処理プログラミングセミナー 第2回

  • Comments (Close): 0
  • Trackbacks (Close): 0

ギアの歯を数えるPythonスクリプト実験

Pythonスクリプトで作ったギアの数を自動で数える実験のムービーです.



  • Comments (Close): 0
  • Trackbacks (Close): 0

Home > Tags > ギアの歯数を画像処理で数える

Search
Feeds
Authorized
奨学金支援制度
Meta

Return to page top