与えられた画像からポイントを抽出したい。画像を以下に示します。
私が欲しいポイントは、緑の上のポイントと赤いポイントです。ピクセルごとの比較を試しましたが、遅すぎます。より良いアルゴリズムが必要です。あなたの提案は何ですか?
与えられた画像からポイントを抽出したい。画像を以下に示します。
私が欲しいポイントは、緑の上のポイントと赤いポイントです。ピクセルごとの比較を試しましたが、遅すぎます。より良いアルゴリズムが必要です。あなたの提案は何ですか?
ポイントが常に中心から既知の半径にある場合は、円周上にあるポイントを確認するだけです。
ピクセルごとの比較に勝るものはありません。分割統治法を使用すると、緑色の線での検索速度を大幅に向上させることができます。
画像の幅がx
で高さがの場合、 にあるすべてのピクセルで緑色のピクセルをy
検索します。x={0...x},y={y/4,3*y/4}
何も見つからない場合は、 に沿ってすべてのピクセルを検索しますx={x/4,3*x/4},y={0...y}
。p
座標で緑色のピクセルを見つけたらすぐpx,py
に、画像の中心から離れたそのピクセルの 2 ピクセルの近傍を検索します (つまり、が右上にある{px,py+1},{px+1,py}
場合、左下にある場合、上にある場合)。左, またはが右下の象限にある場合.最初に見つかった緑の隣人になるように更新します. 緑の隣人がなくなるまで繰り返します. 最悪の場合、このアルゴリズムは です.p
{px,py-1},{px-1,py}
p
{px,py+1},{px-1,py}
p
{px,py-1},{px+1,py}
p
p
p
~O(2*(x+y)+(1/2)*max(x,y)) ~= O(2.5*max(x,y)) ~= O(x)
O(x*y)
{x,y}
すべてのペアの色の値を確認するだけです。
ただし、赤い点を見つけるにはO(x*y)
コストがかかりますが、単一の赤いピクセルを検索するコストを改善する唯一の方法は、画像をサブサンプリングし ( O(x*y)
)、次に画像全体 (現在O(sqrt(x*y))
) を検索することです。赤いピクセル。
私はパーのアイデアが好きですが、2 つの点が画像の中心から常に同じ距離にある場合は、その半径の円周に沿ったピクセルを検索するだけで済みます!