あなたがツールやOSを指定していないとして、私はほとんどのLinuxディストリビューションにインストールされ、OSXとWindowsで利用可能ですされてImageMagickのを選択します。私はここでコマンドラインで使っていますが、C、C++、Python、Perl、PHP、Ruby、Java、および.Netバインディングが利用できます。
は、私はこのような「接続コンポーネントの解析」か「ブロブ解析」を使用します。
convert image.png -negate \
-define connected-components:area-threshold=1200 \
-define connected-components:verbose=true \
-connected-components 8 -auto-level result.png
私は-negate
であなたのイメージを反転しているモルフォロジー演算では、フォアグラウンドではなく、通常は白であるため、黒よりも。あなたのサークルの半径が2220ピクセルで、1520ピクセルの領域(Pi * 22^2)になるように見えるので、1200ピクセルより小さいブロブを除外しました。
7つの塊を意味し、この出力、与え - 1行に1つずつ - それぞれのバウンディングボックスと面積とを:
Objects (id: bounding-box centroid area mean-color):
0: 1358x1032+0+0 640.8,517.0 1296947 gray(0)
3: 341x350+1017+287 1206.5,468.9 90143 gray(255)
106: 64x424+848+608 892.2,829.3 6854 gray(255)
95: 38x101+44+565 61.5,619.1 2619 gray(255)
49: 17x145+1341+379 1350.3,446.7 2063 gray(0)
64: 43x43+843+443 864.2,464.1 1451 gray(255)
86: 225x11+358+546 484.7,551.9 1379 gray(255)
あなたのサークルが42x42ピクセルであるとして、あなたはブロブを探しているであろう、という注意をそれは正方形で、そのサイズに近いので、私は最後の2行目を見ています。あなたがサークルを探しているとして、あなたは面積がpi * r^2
や周りの1500ピクセルであることを期待することに注意し、また
convert image.png -fill none -stroke red -draw "rectangle 843,443 886,486" result.png
:私はこのようにあなたの元の画像に赤でそれをで描くことができます出力の最後から二番目の欄でそれを確認することができます。
これは、合理的な仕様のiMacで0.4秒で実行されます。画像を4に分割し、各四半期を並列に実行すると、処理が高速化されることに注意してください。あなたが次のようなことをすれば、
#!/bin/bash
# Split image into 4 (maybe should allow 23 pixels overlap)
convert image.png -crop [email protected] tile-%02d.mpc
# Do Blob Analysis on 4 strips in parallel
for f in tile-*mpc; do
convert $f -negate \
-define connected-components:area-threshold=1200 \
-define connected-components:verbose=true \
-connected-components 8 info: &
done
# Wait for all 4 to finish
wait
約0.14秒で実行されます。
マークが特定の位置にあるかどうかを確認してください。さらに、それが特定のサイズを有する場合には、任意のサイズを有することができる。また、マークがその写真の上にあるものを完全に上書きする場合もあります。 –
円ハフ変換のようなアルゴリズムを使用しようとしましたか?それはあなたのaproachをより速くするiterestのあなたの領域を制限する可能性があります。 –
私はあなたがアートテンプレートマッチングの状態について何かお読みください。それはあなたがやっているものに似ていますが、かなり速いです。 – Piglet