2017-03-06 10 views
0

私はこのイメージの点(この場合は赤色)に最も近い点を見つけようとしています。この画像では、この出力は、右imagemagickで最も近い点を見つけますか?

から最初の行のポイントを見つける方法私ができるこの

enter image description here

出力

enter image description here

は私を助けてくださいます。

+1

赤い点の座標を知っていますか?あなたは "背景"と "ライン"の色を正確に知っていますか? –

+0

はい私は赤い点の座標を知っています – victorhernandezzero

+0

私は線の色を知っています – victorhernandezzero

答えて

1

これは楽しいですね!のは、ImageMagickのを使用してテキストに画像をダンプしてみましょう:

convert image.png txt: 

# ImageMagick pixel enumeration: 337,218,65535,srgb 
0,0: (65535,65535,65535) #FFFFFF white 
1,0: (65535,65535,65535) #FFFFFF white 
2,0: (65535,65535,65535) #FFFFFF white 
3,0: (65535,65535,65535) #FFFFFF white 
4,0: (65535,65535,65535) #FFFFFF white 
... 
... 
221,79: (0,0,0) #000000 black 
221,80: (0,0,0) #000000 black 
221,81: (0,0,0) #000000 black 
221,82: (0,0,0) #000000 black 
... 
... 

[OK]を、今のは、すべての黒画素を見つけるためにawkを使用し、彼らの(x、y)を印刷してみましょう座標:

convert image.png txt: | awk -F'[,:]' '/black/{x=$1;y=$2;print x,y}' 

221 79 
221 80 
221 81 
221 82 
221 83 
221 84 
... 
... 

[OK]を、今してみましょうawkここで、赤のピクセルは、rx(赤いx座標)とry(赤いy座標)を渡すことです。次に、赤から各黒のピクセルまでのx距離とy距離の二乗和を計算します。これまでに見られたものよりも少ない(すなわち、より近い)場合は、場所を保存します。最寄りの場所を最後に印刷します。

convert image.png txt: | awk -F'[,:]' -v rx=318 -v ry=127 ' 
    BEGIN{m=999999} 
    /black/{ 
      x=$1; y=$2; d2=(rx-x)*(rx-x)+(ry-y)*(ry-y) 
      if(d2<m){m=d2;xm=x;ym=y} 
    } 
    END{print xm,ym}' 

277 127 

これは答えです...(277,127)。さんがシアンの円を描画して、それを確認してみましょう:オン

convert image.png -fill cyan -draw "circle 277,127 277,132" check.png 

enter image description here


再読み込み質問を、私は私の解決策は、上記のために食料調達するのに対し、あなたは実際には水平に最も近い点が欲しいことに注意してください任意の方向の一般的な場合。あなただけの水平オフセットしたい、とあなたは水平線がy座標127であることがわかっている場合、あなただけの画像から、その特定の行を抽出することができますし、このようなもの簡素化:あなたはawkが気に入らない場合

convert image.png -crop x1+0+127 txt: | awk -F'[,:]' -v rx=318 ' 
    BEGIN{m=999999} /black/{x=$1;d=(rx-x)*(rx-x);if(d<m){m=d;xm=x}} END{print xm}' 
277 

を、あなただけの眼球でそれを行う...

convert image.png -crop x1+0+127 txt: | grep -E "black|red" 

221,0: (0,0,0) #000000 black 
277,0: (0,0,0) #000000 black   <--- nearest black to red 
314,0: (65535,0,0) #FF0000 red 
315,0: (65535,0,0) #FF0000 red 
316,0: (65535,0,0) #FF0000 red 
317,0: (65535,0,0) #FF0000 red 
318,0: (65535,0,0) #FF0000 red 
319,0: (65535,0,0) #FF0000 red 
320,0: (65535,0,0) #FF0000 red 

どのように私は、赤色画素の座標を見つけたことができますか?

compare -metric rmse -subimage-search -dissimilarity-threshold 1 image.png \(-size 1x1 xc:red \) null: 

0 (0) @ 317,121 

注意:私はむしろ平方根より二乗の和を使用

私はこのような赤色画素を探しのImageMagickのサブ画像の検索に使用しましたa> bの場合にはa * a> b * bとなるので、演算速度が速く、結果も同じであるため、四角形の合計のうち、a * b> bとなる。

OPは彼が座標を持っており、サブ画像検索で見つかったものがかなり大きい赤いブロブの正確な中心を見つけられないので、サブ画像検索によって生成されたものから若干異なるrxryを使用しました。代わりに赤い小滴の左上端が表示されます。

関連する問題