問題タブ [convex-hull]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1041 参照

python - PythonでXY座標を読み取る凸包

X 、 Y 座標の束を読み取り、画像の輪郭を描く凸包アルゴリズムを考え出す必要があります..私はPythonでコーディングしています 何かアイデアはありますか?

0 投票する
2 に答える
1118 参照

graphics - グラフィックスの凸包-Mathematica

ComputationalGeometryパッケージのPlanarGraphPlotを使用して凸包をプロットしようとすると、グラフィックスで使用すると機能しません。

グラフィックを使用して凸包をプロットする方法についてのアイデアはありますか?

0 投票する
2 に答える
12342 参照

c++ - 凸性の欠陥C++OpenCv

この問題について私を助けていただければ幸いです:)

この質問に関連して、OpenCV 2.X / C ++のcvConvexityDefects?、 私も同じ問題を抱えてる。OpenCV C ++ラッパーには、Cバージョンに表示される関数cvConvexityDefectsがないため、独自のバージョンを作成しようとしました。

コードの一部は次のとおりです(countourとhullの両方がvector <Point>であり、別々に計算されることに注意してください:

出力はConvex hull must represented as a sequence of indices or sequence of pointers in function cvConvexityDefectsです。本当に正しい方法で変換を行う方法がわかりません。Webで検索して、コードの一部を適応/コピー/理解しようとしましたが、常にC構文を使用しています。

はっきりしていたと思います。前もって感謝します!

0 投票する
2 に答える
2002 参照

algorithm - 3 次元曲面の凸包アルゴリズム z = f(x, y)

トリプル (x_i、y_i、z_i) のセットとして与えられた 3D サーフェスがあります。ここで、x_i と y_i はおおよそグリッド上にあり、各 (x_i、y_i) には関連付けられた単一の z_i 値があります。一般的なグリッドは 20x20 です

与えられた許容範囲内で、サーフェスの凸包に属するポイントを見つける必要があります。計算を実行するための効率的なアルゴリズムを探しています (私の顧客は、400 ポイントのデータセットで ~10 秒かかる O(n³) バージョンを提供しています...)

0 投票する
1 に答える
175 参照

wolfram-mathematica - Computationnal Geometry Package & Mathematica の「Nontensor object generated」

ポイントのセットの ConvexHullArea を計算するたびに、次のようになります。

出力は正しいようです

正常ですか?

この問題を解決する方法はありますか? 永久にミュートするには?

ありがとうございました

0 投票する
1 に答える
801 参照

java - ギフトラッピングアルゴリズムが正しく機能しない

私はVB6でJavaで行われたこのギフトラッピングアルゴリズム(yoshihitoyagi!)を実装しようとしています。これを適切に行ったと確信していますが、何らかの理由で機能しません。返された配列には 1 つの要素しかありません。誰かが(新しい目で)見て、あからさまに何かを見逃しているかどうかを知らせてくれることを望んでいました.

これが私のコードです:

すべての配列は 1 から始まります。したがって、1 と 0 の間に違いがある場合は、それが理由です。

これがたくさんあることは理解していますが、どんな助けでも大歓迎です。

ありがとう!!!!

0 投票する
2 に答える
2246 参照

c++ - 凸状欠陥を見つける?MS Visual Studio2010 を使用した OpenCV 2.3、c++

私は現在、OpenCV 2.3 と c++ を使用して手 (緑色の手袋を着用) を検出し、さまざまな手のジェスチャーを区別しようとしています。

まさにこの瞬間、私の次のステップは、手の特定の特徴 (凸欠陥) を取得することです。

これまでのところ、プロセスでこれらの関数を使用しました。

これらは見事に機能findContours()し、を使用して出力することができましたdrawContours()

次のステップは、これが私がいる場所でconvexHull()、OpenCV 2.3 でも動作する を使用することです。convexHull()ただし、ベクトルの結果が実際にどのように見えるか (どの機能が含まれているか)はまだわかりません。

しかし、これがトリッキーな部分です。

古いバージョンの OpenCV ( を使用する c を使用) には、凸包に一連の欠陥を与えることができるIplImage、きちんとした小さな関数が呼び出されることがわかりました。cvConvexityDefects()これらは私が必要としているものですが、OpenCV 2.3 にはそのような関数がないようで、古い構文を使用してこれらの結果を取得する方法がわかりません。

上のOpen CV ドキュメントへのリンクをcvConvextDefects次に示します。

私が求めているのは、同様の OpenCV 2.3 関数、またはこれらの欠陥を見つけるための自己記述のコードまたはアルゴリズムです。または、ベクトルの結果などに古い 2.1 構文を使用する方法。

(他の特徴、長方形の境界ボックス、近似円を使用できることはわかっています。しかし、凸状の欠陥が最も特徴的な特徴を生み出すと確信しています。)

解決策 -この投稿のC++ ラッパーを使用する ことになりました。

次のステップは、これらの欠陥から使用可能なデータを取得することです。(一見すると、データは凸包または輪郭上の単一の点、またはこれらの数のように見えます。最初は、2 つの点のセット、または単一の点と長さを期待していましたが、そうではないようです。 . これで「レンガの壁」にぶつかったら、別の投稿をします)

0 投票する
1 に答える
1636 参照

c++ - OpenCV プロジェクトの C/C++ での CvSeq またはその他のタイプの動的メモリ ストレージへの追加

質問に回答しました。質問の最後にある解決策を参照してください。その他のコメント/回答は引き続き歓迎します。

だから私はすべての要素を1つのメモリストアに入れるのに苦労しています。

私は主に Java プログラマーなので、おそらく C の同等の用語の代わりにいくつかの Java 用語を使用し、C オブジェクトを参照するときに間違った型について言及する可能性があるので、事前にこれを承認します (そして、ポインターから始めないでください)。 )。

最終的に私がやろうとしているのは、画像内のすべての Convexity Defects を取得し、それらを 1 つの連続したスペースに格納してから、JNI 経由で Java に戻すことです。ストアのタイプは重要ではありません。この段階では、それが機能する必要があり、先に進めば最適化に取り組むことができますが、スタック、キュー、リスト、ベクターなどでうまくいくと思います。現在、CvSeq オブジェクトのグループを 1 つの大きな CvSeq に追加するループ ラウンドを試みています。コードを投稿して、投稿後に説明します。

そのため、スキャナーを作成し、輪郭を見つけながらそれを行い、それが特定のしきい値よりも大きいことを確認します。それを想定して、その周りに船体を作成し、船体と船体の間の欠陥を見つけます。これは、ループするたびにallDefectsに追加したい複数のオブジェクトを欠陥に含めることができることを意味しますが、それを実現する唯一の方法は、allDefectsを欠陥と等しくすることです。つまり、ループごとに上書きされます。スタックのようにプッシュしようとすると、コメント付きのコードが少し表示されますが、これは次のエラーでクラッシュします。

アサーションに失敗しました: sizeof(((defects))->first[0]) == sizeof(CvSeqBlock) && ((defects))->elem_size == sizeof(CvSeq)、ファイル vtoolsModified.cpp、行 1407

ドキュメント「cvConvexityDefects() ルーチンは、CvConvexityDefect 構造のシーケンスを返します」に従って、CvConvexityDefectでいっぱいのCvSeqになります。それが助けになる場合の cvConvexityDefects の署名は次のとおりです。

つまり、私がやろうとしていることを要約すると、輪郭を見つけ、その船体を見つけ、それらの間の欠陥を見つけ、これらすべての欠陥を 1 つの大きなストアに追加し、輪郭がなくなるまで繰り返し、すべての欠陥を含む大きなストアを Java に返します。 . 私が助けを求めているのは太字の部分です。

できるソースの方向に私を助けたり、指摘したりできる人はいますか? (私はこの特定の問題に約2週間取り組んできたので、多くのリソースにアクセスしました。はい、自分で効果的に単純なループであるべきものを理解できなかったのは本当に馬鹿げていると感じています。)

ありがとう

編集 - コメントの結果として詳細が追加されました。

EDIT 2 - 質問に回答しました。結果の固定コードは以下のとおりです

私の C の理解不足が根本的な問題だったようです。CvConvexityDefect を使用すべき場所で CvSeq を使用する必要があると想定していました。修正されたコードは次のとおりです。

また、返される欠陥が 100 未満であること (システムを壊すのは数百万の場合もあります) を確認CV_GET_SEQ_ELEMし、null を返さないことも確認しています (nullを返すことができるかどうかはわかりませんが、念のためチェック。

0 投票する
2 に答える
3864 参照

opencv - C++-ObjC OpenCV 制約付き Delaunay

OpenCV 2.3.1 で輪郭の Delaunay 三角形分割をうまく実装しました。

cvPointPolygonTest を使用すると、凸包内のすべての三角形を取得できます。次に、三角形の重心に対して別の cvPointPolygonTest を実行して、それらが主な輪郭にあるかどうかを確認しようとしたため、輪郭の三角形分割を制限できます。

しかし、一部の三角形は (たとえば、2 本の足を離して歩いている人では)穴の上にあるため、うまく機能しません。

制約付き三角形分割を実行する方法を知っている人はいますか? 私は凸性欠陥について考えましたが、これから始める方法を理解することができません。

前もって感謝します !

ベン


実際、これは凸包欠陥の問題ではなく、三角測量の問題です。この画像はあなたの問題を示します:

特に三角形分割されたハルの下部では、OpenCV が凸包を三角形分割しているため、三角形分割が輪郭の内側と外側にあることがわかります。輪郭自体を三角測量する方法を見つけたいと思います。

輪郭自体に Steiner Points を追加することについていくつかのアイデアを見つけましたが、OpenCV をどこから始めればよいかわかりません。

私の考えは次のとおりでした:

  • 三角形が輪郭の内側と外側にあるかどうかをテストします。
  • true の場合: 交点を取得します。
  • cvSubdiv2D に追加します。

私はこれで正しいですか?

あなたの忍耐とあなたの答えに感謝します!