機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

【画像処理】画像を点列にする案

はじめに

やりたいことは画像を入力として、複数の点列を出力することです。
点列さえ手に入れば、後はこっちのもんです。(何が?)
イメージは以下です。点列は色を変えて表現しています。

基本的には二値化→細線化したのち、それを辿る(辿るのは自前で実装)といった感じになります。
細線化と辿るの以外は OpenCV を用いた実装となります。
OpenCV を使うのは簡単なので、アルゴリズム紹介にとどめます。
細線化までアルゴリズムを以下に3つ用意しました。
細線化された点群から複数の点列を作成するアルゴリズムは、また別の機会に別記事に書く予定です。
(実装済みで動いているのですが自信があるわけではないので現在非公開)

アルゴリズム1: Canny Edge


Canny Edge は勾配を使って輪郭を抽出するので二値化前の画像を渡してください。
Canny Edge は二値化した画像を出力するので、それを最後に細線化(Thinning) します。

アルゴリズム2: Contours


二値化後に cv::FindContours を使います。
最後に細線化(Thinning) します。
Canny Edge 以外の輪郭抽出もあったほうがいいかなって思って用意したアルゴリズムです。

アルゴリズム3: Thinning


二値化後にいきなり細線化します。
これは細線化したい場合にのみ選択する手法です。
文字や線をそのまま抜き出したいって時に使えそうです。

細線化のアルゴリズムOpenCVにない!!

OpenCVで細線化するにはOpenCV-contrib の導入が必要が必要です。
導入が面倒だったのでググったら、動くコードがあったので紹介します。
2値画像の細線化にコードと説明があります。そのまま動きます。
アルゴリズム自体単純なので、興味のある人は調べてみてください。

最後に

適応的2値化や白黒反転の機能はあったほうがいいかなってメモを残しておきます。

目次へ戻る