興味のあることをごちゃ混ぜで書いているので、.カテゴリー別に閲覧することをオススメしますこの広告は、90日以上更新していないブログに表示しています。13日目の記事として書かれました。qiita.comある時ふと7セグメントのLCDを読み取る必要があるかもしれない。それは、デジタル電流計かもしれないし、分解してはいけないファンヒーターの温度計かもしれない。単純に考えれば、Webカメラを固定し、光源を用意し、座標を指定してOCRすればよいと考える。そのような手間はきっとソフトウェアで対処することができる物体検出カメラや物体の位置がずれてもカメラの中に映っていれば、認識してほしいと思う。ような大きいデータはできるだけその画像の特徴を表したベクトルに変換すると良い。変換することを特徴点抽出といい、SIFTやSURFなどはそれらを抽出するためのアルゴリズムである。特徴点は多ければ良いというものではなく、後述するマッチングを行う際に特徴点に比例して計算量が増えるため、画像自体を少ない数で画像の特徴を表す特徴点を取るアルゴリズムが良い。今回はSIFT,SURFが特許の関係があるため、A-KAZE特徴量を想定する。Blur耐性、スピードどれも精度がよく、またSIFTやSURFは特許の問題があるため代用としてAKAZEがよく使われています。SIFT,SURF,ORBなど他のアルゴリズムと精度を比較した記事があります。特徴点マッチングWebカメラを固定せずに7セグメントを読み取るためには画像の中に物体がどこにあるかを判定する必要がある。物体の写真を撮って、Webカメラから送られてくる画像と特徴点マッチングを行うと、物体がどこに映っているのかを見つけることができる。二つの画像の特徴点をそれぞれどの点なのか対を生成する(マッチング)ことにより、画像のスケール、傾き、反転などに影響されることなく物体を検出することができる。マッチングを終えたあとは、ホモグラフィ変換(射影変換)により対象とする物体が画像のどこにあるかを変換する。画像は変換したあと、物体があると認識されている部分を矩形で表示している。物体の位置がわかったため、物体の中のLCDの位置を矩形検出する。LCDはほぼ長方形の形をしていることが多いため、findContours()で輪郭を検出することでLCDの場所を見つけることができる。ヒストグラム平坦化ここまでで、LCDの位置や傾きなどの問題に対処することができたが、輝度の問題が解消できない。光源が変わってもある程度読み取るためには光源が変わっても輝度値が大きく変化しないようにすることが重要である。二値化LCDで背景の部分と数字が表示されている部分をくっきりと分けるほどOCRの精度が上がる。背景を白、文字を黒と二つの色だけに分けるのを二値化と呼ぶ。二値化するときに問題なのは、単純な閾値だけで分ける場合閾値を指定しなければいけない、光源によって全体的にグラデーションのかかった画像はうまく二値化することができない。二値化だけではセグメントの周囲にごま塩ノイズができるため、これがOCRの認識の邪魔をしていた。処理後モルフォロジー変換SSOCRLCD部分を適応閾値により二値化し、OCRで数字を認識する。Recognition)がオススメである。)はてなブログをはじめよう!ugwisさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。