電子書籍の厳選無料作品が豊富!

開発言語は、アルゴリズムができてから最善のものを使いたいと思ってますが、現状はVisualC++です。

トイレットペーパーの芯や、キッチンペーパーの芯を平べったく伸ばした感じの紙媒体を、デジタルカメラで撮影した画像から、その芯のラインの本数、ライン1本毎の幅、ラインのエッジ出力、ライン以外の黒い要素(ゴミやノイズになる部分)・・・などを求めれるアルゴリズムを考案しています。

この際に、ラインを認識することが第1条件で、2値化したときにゴミとなる点の集合と、ライン要素になる点の集合を区別し、ラベリング処理でライン番号を付けれたら・・・っと考えてます。

ただ、困ったことにカメラや照明の制度が悪く、濃淡が激しい画像になってます。あと、左右に大きな余白(実際には黒色)ができたり、余白とライン要素の交点部分「余白(ト)ライン」みたいな箇所で、余白なのかラインなのか区別ができない状態です。

また、2値化した際に、
□□□□□■■■□□□□□□□□□
□□□□□□■■■□□□□□□□□
□□□□□□□■■■■■■□□□□
□□□□□□□□■■■□□■■□□
□□□□□□□□■■■□□□■■□
□□□□□□□□□■■■□□□□□
このようなゴミがくっついている場合や、ラインの途中が薄い部分が白と認識され、上のように分裂してしまったり・・・。

VC++6.0で、読み込んだビットマップの数値データをCSVに保存するところまで、できている状態です。(0~255の数字が出力されてます)

※添付画像が削除されました。

A 回答 (1件)

Hough変換はご存じでしょうか?


Hough変換で直線成分を抽出して,長ければライン,短ければゴミ,ある程度長くて,同じ延長線上にあるなら同一のラインとして扱う,等すると良いのでは.
試すだけならC(C++)&OpenCVが楽です.
・OpenCV -Hough変換-
http://opencv.jp/sample/special_transforms.html
・OpenCV チュートリアル
http://chihara.naist.jp/opencv/?FrontPage

> ただ、困ったことにカメラや照明の制度が悪く、濃淡が激しい画像になってます。
> あと、左右に大きな余白(実際には黒色)ができたり、余白とライン要素の交点部分「余白(ト)ライン」みたいな箇所で、余白なのかラインなのか区別ができない状態です。

この辺はまた別問題の様な気がします.
まずは,機材の変更・環境の変更・撮影方法の変更・手動の前処理を入れる,などで解決すべきところではないでしょうか.
> 余白の黒色
古典的手法で,ブルーバックにしてみるとか?

まあ,大学の画像処理研究なのか,実際の既存工場のラインで使用するのとでは,このあたり違ってきてしまうとは思います.
(アルゴリズムの研究なら,本筋でない要素は事前排除すべきでしょうし,お仕事の実用ソフトならそうも言ってられないでしょうし...)
    • good
    • 0
この回答へのお礼

kirinoma様、ご回答ありがとうございます。
早速、WEBページを拝見して、理解してみようと思います。

>まあ,大学の画像処理研究なのか,実際の既存工場のラインで使用するのとでは・・・

どちらかと言えば後者の方で、もしかすると必要となるかもしれないので、早い段階で勉強だけしておこうと思ってやってます。

>この辺はまた別問題の様な気がします.
>まずは,機材の変更・環境の変更・撮影方法の変更・手動の前処理を入れる,などで解決すべきところではないでしょうか.

これを言ったら、「ソフトに不可能はない」と言い返されました・・・。ボタンを押したら結果が出る。
早い話、機械(撮影するカメラ等)が最低限の機能で動いても何とかなるソフトウェアを開発しなければいけないのが現状です。
ただ、ライン検知の前に、何か前処理はしてやる必要はありそうですね。。。微分ヒストグラムとか使うべきなんでしょうかね?

お礼日時:2009/06/19 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!