画像解析のためのライン認識と2値化

このQ&Aのポイント
  • 画像からトイレットペーパーやキッチンペーパーの芯のライン情報を抽出するアルゴリズムを考案しています。
  • カメラや照明の制度が悪く濃淡が激しい画像や余白とライン要素の交点部分での区別が困難な状態です。
  • VC++6.0を使用して画像の数値データをCSVに保存するまでの処理が完了しています。
回答を見る
  • ベストアンサー

画像解析 ライン認識 2値化 2値化

開発言語は、アルゴリズムができてから最善のものを使いたいと思ってますが、現状はVisualC++です。 トイレットペーパーの芯や、キッチンペーパーの芯を平べったく伸ばした感じの紙媒体を、デジタルカメラで撮影した画像から、その芯のラインの本数、ライン1本毎の幅、ラインのエッジ出力、ライン以外の黒い要素(ゴミやノイズになる部分)・・・などを求めれるアルゴリズムを考案しています。 この際に、ラインを認識することが第1条件で、2値化したときにゴミとなる点の集合と、ライン要素になる点の集合を区別し、ラベリング処理でライン番号を付けれたら・・・っと考えてます。 ただ、困ったことにカメラや照明の制度が悪く、濃淡が激しい画像になってます。あと、左右に大きな余白(実際には黒色)ができたり、余白とライン要素の交点部分「余白(ト)ライン」みたいな箇所で、余白なのかラインなのか区別ができない状態です。 また、2値化した際に、 □□□□□■■■□□□□□□□□□ □□□□□□■■■□□□□□□□□ □□□□□□□■■■■■■□□□□ □□□□□□□□■■■□□■■□□ □□□□□□□□■■■□□□■■□ □□□□□□□□□■■■□□□□□ このようなゴミがくっついている場合や、ラインの途中が薄い部分が白と認識され、上のように分裂してしまったり・・・。 VC++6.0で、読み込んだビットマップの数値データをCSVに保存するところまで、できている状態です。(0~255の数字が出力されてます)

この投稿のマルチメディアは削除されているためご覧いただけません。
  • mofy
  • お礼率25% (1/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

Hough変換はご存じでしょうか? Hough変換で直線成分を抽出して,長ければライン,短ければゴミ,ある程度長くて,同じ延長線上にあるなら同一のラインとして扱う,等すると良いのでは. 試すだけならC(C++)&OpenCVが楽です. ・OpenCV -Hough変換- http://opencv.jp/sample/special_transforms.html ・OpenCV チュートリアル http://chihara.naist.jp/opencv/?FrontPage > ただ、困ったことにカメラや照明の制度が悪く、濃淡が激しい画像になってます。 > あと、左右に大きな余白(実際には黒色)ができたり、余白とライン要素の交点部分「余白(ト)ライン」みたいな箇所で、余白なのかラインなのか区別ができない状態です。 この辺はまた別問題の様な気がします. まずは,機材の変更・環境の変更・撮影方法の変更・手動の前処理を入れる,などで解決すべきところではないでしょうか. > 余白の黒色 古典的手法で,ブルーバックにしてみるとか? まあ,大学の画像処理研究なのか,実際の既存工場のラインで使用するのとでは,このあたり違ってきてしまうとは思います. (アルゴリズムの研究なら,本筋でない要素は事前排除すべきでしょうし,お仕事の実用ソフトならそうも言ってられないでしょうし...)

mofy
質問者

お礼

kirinoma様、ご回答ありがとうございます。 早速、WEBページを拝見して、理解してみようと思います。 >まあ,大学の画像処理研究なのか,実際の既存工場のラインで使用するのとでは・・・ どちらかと言えば後者の方で、もしかすると必要となるかもしれないので、早い段階で勉強だけしておこうと思ってやってます。 >この辺はまた別問題の様な気がします. >まずは,機材の変更・環境の変更・撮影方法の変更・手動の前処理を入れる,などで解決すべきところではないでしょうか. これを言ったら、「ソフトに不可能はない」と言い返されました・・・。ボタンを押したら結果が出る。 早い話、機械(撮影するカメラ等)が最低限の機能で動いても何とかなるソフトウェアを開発しなければいけないのが現状です。 ただ、ライン検知の前に、何か前処理はしてやる必要はありそうですね。。。微分ヒストグラムとか使うべきなんでしょうかね?

関連するQ&A

  • 画像認識によるライントレース

    画像認識によるライントレースをしようと考えているのですが、いいアルゴリズムが思いつきません。 画像を二値化してみたのですが、その後どのように判断するのでしょうか? アイデアやヒント、又は参考サイトがあれば是非教えてください。

  • ある2値化画像に対して,一定の連結より小さければ,

    ある2値化画像に対して,一定の連結より小さければ, その部分を削除し,ある画像に出力するというものを作りたいです. VC++でOpenCVを使っています. ラベリングをしようと思い,井村さんのラベリングクラス http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/products/labeling を見つけました. labeling.Exec(dst_buf, dst_buf, 1920, 1080, true, 10); の関数を使い,2番目のdst_bu2の部分が出力バッファというのも わかるのですが,それを画像に出力する方法がわかりません. よろしくおねがいします.

  • 画像を画像に認識する方法?

     前にデジタルカメラで撮った画像をワードに貼り付けて保存して いました。その画像を年賀状のソフトで作る年賀状に貼り付けたいの ですが、文章の1部と認識されているのか挿入から探しても認識してくれず、ワードの画像をコピーしてソフトのはがきの部分に貼り付ける のですが、貼りつきません。なんとかワードに貼り付けた画像を年賀状 ソフトに貼り付ける方法はありませんでしょうか?よろしくお願いします。

  • 画像解析プログラムのアイディアありませんか?

    諸々の事情で星の画像を解析することになりました。 内容としてはbmp形式の星空の画像(夜空に星が2,3個ぐらいある)の中で各星の光量を測らなければなりません(星の区別もつける)。 私の考えでは 1、画像のバイナリを読み込んで画像の端からザーっと読んでいく。 2、星を表す画素(FFFFFF(RGBで白)←星を白と想定して)にヒットする。 3、そこから、その画素を中心に星の画像が十分入るように100*100画素ぐ  らいサンプリングしてそのサンプリングした画像の中の白の部分をカウントす  る。 4、例えばカウント数が100回だとしたらそこから星の光量に変換する といった感じなんですが、どうも処理が遅いようです。もっと効率の良いプログラムのアイディアがありましたらお願いします。 またその星空の画像を時間ごとにカメラで撮っていくのですがその場合、星の位置が動きます。例えば1枚目の画像に星Aがあったとして10分後に撮った2枚目の画像の中の星Aは動いているのでこの二つの星は同じものなんだということをプログラムで認識させるのにも悩んでいます。 もし良ければこちらの方もお願いしたいです。

  • 【画像処理】円を角張らせる

    お世話になります。 入力画像(2値)には○が描かれているとします。○については、多少いびつな形状のものを想定しています。 この○を角張らせるように修正した画像を出力したいと考えています。 具体的には、すでにちょっと角張っているような部位を求め、それを強めるといったイメージです。 ○部分のエッジ(のようなもの)を求めて、それを処理すればいいのでしょうか。 どのようなアルゴリズムになるのか、どなたかご教授お願いします。

  • 「○○は××の全てではない」は肯定的?否定的?

    一度、質問をさせていただいたのですが わかりにくい部分等ありましたので画像をつけて再質問させていただきます。 「○○は××の全てではない」や「××が○○だとは言い切れない」 という論調をよく目にします。 これってどういう意味合いなのでしょうか? ある集合Pの一要素Aについて 「要素Aは集合Pの全てではない」という表現をした場合 皆様のイメージは添付画像のパターンA~Dのどれに近いでしょうか? パターンA…「要素Aは集合Pの全てではない」       なぜなら、要素Aが集合Pの大部分を占めているが       その他の部分もあるからだ。 パターンB…「要素Aは集合Pの全てではない」       なぜなら、要素Aは集合Pの中の重要な要素であるが       他にも重要な要素があるからだ。 パターンC…「要素Aは集合Pの全てではない」       なぜなら、要素Aは集合Pの要素ではあるが       重要な要素ではないからだ。 パターンD…「要素Aは集合Pの全てではない」       なぜなら、要素Aは集合Pの要素ではないからだ。

  • 取り込んだ画像の等倍印刷

    エプソンのGTX800を使っています。 このスキャナで画像を取り込んで、そのままのサイズで印刷をする事と いうのは出来るのでしょうか? エプソンスキャンを立ち上げ、ホームモードでプリンタ出力の等倍出力サイズで設定してます。 この設定で、例えばCDジャケットを取り込む時そのままA4枠のままでやると、 そのまま余白の部分も全て取り込んだ形になり、A4サイズの紙に プリンタの出力サイズをA4にすればそのまま余白含めて印刷されます。(ようするにA4コピーみたいな感じです) それではなく、スキャナする時に余白をカットし、そのCDジャケット だけを取り込んで、印刷する時にそのままのサイズで印刷をする方法は あるのでしょうか? イメージの位置を自動検出というのを使うと、取り込み枠というのが 余白を除いたジャケットだけを取り込む様に指定出来て、それだけを スキャナすることは出来るのですが、そうしますといざ取り込んだ画像を 印刷する時にはとても大きなサイズで印刷されてしまいます。 すみませんが、よろしくお願いいたします。

  • デジカメ画像の部分アップを印刷したいのですが。。。

    すみませんが、教えてください。 デジタルカメラで撮影した画像の一部分を切り取って アップにして、普通の写真サイズにして印刷すること ってできるのでしょうか??? たとえば、集合写真から、ある人の顔の部分だけを 切り取って大きくして印刷するといったことですが。 よろしくお願いいたします。

  • 切抜画像のみをIllustrator に配置したい

    http://support.adobe.co.jp/faq/faq/qadoc.sv?224871+002を参考にして、画像の切抜を行いました。 その切抜画像をIllustrator CS2に配置して使用したいのですが、結局余白?の部分が認識されてしまい、その切抜画像の背面(画像のすぐ真横など)に文字を敷いたりということが出来ません。 このやり方ではメイン画像の背景が消えるだけで結局【長方形の画像】として認識されてしまうのでしょうか。 上手く伝わっていなかったらすみません・・ Photoshop、Illustratorともに初心者です。 お手数ですが、対処方法を教えてください。

  • Linuxでの画像処理

    今Linuxで画像処理を行ってみたいと考えています。 そこで画像処理について色々調べてみたところ、画像処理ボードというのが必要だと知りました。 ネットで検索してみると画像処理ボードは実にたくさんあって、どれを選んでいいのか全く分かりません。 画像処理ボードとカメラの選定基準について教えていただけないでしょうか。 使用目的は、カメラを使ってディスプレイに映像を出力し、映っている範囲内にある物体を2次元的に形を認識する。という事に使いたいと考えております。

専門家に質問してみよう