防犯カメラ導入記~その後~

https://kerokero.org/wp/archives/2257で書いた防犯カメラ。

去る9月29日に防水加工が全て終わって屋外に試験設置して、
今日で2週間・・・ですが、

家族曰く、週中に、警察が来たらしい((((;゚Д゚)))

【続きを読む】

縦線ノイズ検知アルゴリズム考えてみた

前提:
・スキャン対象はコミックなどモノクロのもの
・それをカラーで読み取る。
・本が退色はあまりしてない前提。
・ベタ部分の縦線ノイズの検知

という前提の元で、色々とプログラムを組んでみて、
昨日の記事では、ここまでできたわけだ:

昨日の記事よりも分かりやすくするために、
右側は、オリジナルの画像を赤で表示されるようにして、その上に検知したポイントを水色表示するようにしてみた。

ところで、昨日の記事で

外郭局所的輪郭線特徴のアイディアを流用すれば出来そうな気がする。

とも書いたわけだけど、早速試して、色々調整してみた結果がこちら:

あともう少し?いや、十分実用に耐えそうな気がしないでもない。

やっていることは、以下のような処理。
1,各ピクセルをHSV色空間に変換。
2,評価するピクセルと、その周辺のピクセルのVの平均から、その部分がベタかどうかを判断。
3,ベタならば、評価するピクセルのSを見て、色が付いているピクセルかどうかの判断し、色が付いているならば、マークをする。
4,一度、1~3までの処理を画像全体に適用。
5,3でマークしたピクセルを中心に、3×3の窓を開く。
6,左上、右上、左下、右下の2×2のマークの状態を確認。これが縦ならば1、斜めならば0.5、横ならば0。評価不可(=4ピクセル全てがマークされているとか)とする。
7,この2×2の4つの特徴値の平均をだして、対象ピクセルが縦線に近いのかを判断する。

C#で、double精度で計算しているので、ちょっと時間がかかるのでその点では実用的では無い。
整数演算になるように式を変えるなり、SIMDをがりがり書いて最適化したいところだな。

ちなみに、上記処理で2のべた塗りかどうかの判断を抜かすと、
白地の部分での縦線ノイズが見つかるように思えるかも知れないけど、実際にはこうなる:

見ての通り、吹き出しの縦線とかがノイズとして検知されてしまいます。ぬぅ。

縦線ノイズの自動検知ソフトって無いかね?

過去に「自炊ノイズの自動検知方法って何かないかね?」って記事を書いているわけですが、
やっぱり、縦線ノイズに悩まされるのでちょっとコンセプトモデルを書いてみた。

で結果はこう:

左側が元画像。右側の白い部分が縦線として検知した部分。

縦線ノイズじゃ無い部分も結構引っかかっているなぁ。

ちなみにある手法で縦線ノイズの可能性のあるピクセルを抽出後、
縦N pixel、その特徴が連続していたら、縦線ノイズと見なしているけど、
このNを40にしてやっとこんな感じ。

縦50pixelにすれば、ほぼ縦線ノイズだけの検知になるけど、
逆に言うと縦50pixel以上の長さが無いと検知できないと言うことにもなる。

もう少し、少ないドット数で検知できて欲しいところ。難しいなぁ。

コンセプトとしては、上記検知部分の局所的特徴を5×5マスで特徴抽出(*)して、
ベクトルの平均が縦に近いかどうかの判断をするとか、もう一ひねりのアイディアはあるけど、
面倒だし、上記画像の計算だけで重いんだよね。C++で書き直そうかしら・・・

(*)外郭局所的輪郭線特徴のアイディアを流用すれば出来そうな気がする。

|