問題タブ [corner-detection]
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.
matlab - 領域マスクで表されるポリゴンのコーナーを見つけます
BW = poly2mask(x, y, m, n)
ベクトルxおよびyで表されるROIポリゴンからバイナリ関心領域(ROI)マスクBWを計算します。BWのサイズはm-x-nです。
poly2mask
ポリゴン(X、Y)の内側にあるBWのピクセルを1に設定し、ポリゴンの外側のピクセルを0に設定します。
問題:凸四角形の
そのようなバイナリマスクBW
を考えると、四隅を決定するための最も効率的な方法は何でしょうか?
例えば、
これまでの最善の解決策:境界線を見つけるために
使用edge
し、ハフ変換を使用してエッジ画像内の4本の線を見つけ、次にそれらの4本の線の交点を見つけるか、エッジ画像上でコーナー検出器を使用します。複雑なようで、もっと簡単な解決策があると感じずにはいられません。
ところで、convhull
常に4ポイントを返すわけではありません(おそらく誰かがqhull
それを防ぐためのオプションを提案することができます):エッジに沿っていくつかのポイントも返します。
編集:
アムロの答えは非常にエレガントで効率的なようです。ただし、ピークは一意ではないため、実際の各コーナーに複数の「コーナー」が存在する可能性があります。θに基づいてそれらをクラスター化し、実際の角の周りの「コーナー」を平均化することもできますが、主な問題はの使用ですorder(1:10)
。
すべてのコーナーを説明するのに十分です10
か、それとも実際のコーナーの「コーナー」を除外しますか?
algorithm - ハリスコーナー検出器の実装
私は教育目的でハリスコーナー検出器を実装していますが、ハリス応答部分で立ち往生しています。基本的に、私がしていることは次のとおりです。
- x方向とy方向の画像強度勾配を計算します
- (1)のぼかし出力
- (2)の出力に対するハリス応答を計算します
- 3x3近傍およびしきい値出力で(3)の出力の非最大値を抑制します
1と2は正常に機能しているようです。ただし、ハリスの応答として非常に小さい値を取得し、しきい値に達するポイントはありません。入力は標準的な屋外写真です。
サンプル画像の場合、最大値は6.4163e-018になり、低すぎるように見えます。
image-processing - RANSACアルゴリズム
RANSAC アルゴリズムを使用して、特定の部分が重複している 2 つの画像の共通の特徴点を選択する方法を教えてください。問題は、機能ベースの画像スティッチングから発生しました。
detection - Harris&Stephensコーナー検出アルゴリズム:行列式は常に0(ゼロ)
学士論文の一部として、HarrisandStephensアルゴリズムを使用してコーナー検出器を実装しようとしています。コーナー検出器 とエッジ検出器を組み合わせたものです。
私は計算します:
- ソーベルフィルター(3x3)を使用したxおよびy偏差
システムマトリックスMを計算します
M = [AC; CB]
つまり、私が大丈夫なら:
- A = sobel_xの2乗の応答:Ix * Ix(特定のピクセルで)
- B = sobel_yの2乗の応答:Iy * Iy(特定のピクセルで)
- C = sobel_xの応答にsobel_yの応答を掛けたもの:Ix * Iy(特定のピクセルで)
今、私はtrace(M)を計算し、特に懸念しているのはdeterminant(M)です。
そこの論文では、固有値の高価な計算を回避するため、行列式について次の近似を提案しています。
det(M)= A * B-C ^ 2
これは常にゼロで終了する必要があります!
式det(M)= A * B --C ^ 2は、次のように書き直すことができます。(ポイント2の知識を使用)
det(M)= A * B-C * C
det(M)= Ix * Ix * Iy * Iy-Ix * Iy * Ix * Iy
det(M)= Ix * Ix * Iy * Iy-Ix * Ix * Iy * Iy
det(M)= 0
では、なぜ行列式を計算する必要があるのでしょうか。私が見る限り、トレースを計算するだけで十分です!(または、どこかで大きな間違いを犯しましたか?)
algorithm - 一連の点から四角形の頂点を見つける
ポイントのセットから四角形のコーナーポイントを取得しようとしています。
- ポイントのセットは順序付けられ、アウトラインを記述します
- アウトラインにノイズがある場合があります (2 枚目の画像を参照)。
- 検索されたコーナー ポイントは、指定されたポイント セットから外れたポイントである必要はありません (左下の 3 番目の画像を参照)。
- 検索されたコーナー ポイントは凸状の四角形を表しますが、必ずしも四角形である必要はありません
2 番目の写真は少し極端ですが、私の一連のポイントの「品質」は最初の写真と 2 番目の写真の間にありました。
最初に、1 ~ 360° と長さからヒストグラムを作成することを考えました。以下の 2 点について説明します。4 つの最高峰は、各線の長さを表します。しかし、それでは注文ポイントを失います。次数と長さ、または線について知っているだけで、線がどの位置に属しているかはわかりません。
次に、2 つの次の行が多かれ少なかれ同じ次数である場合はマージすることを考えましたが、ここでノイズを処理する方法やコーナーを予測する方法がわかりません。
この問題または同様の問題を処理するアルゴリズムを知っている人はいますか?
python-2.7 - Python用OpenCVでCornerHarrisメソッドでマークされたコーナーの座標を見つけます
HarrisCorner メソッドが画像にマークしたすべての形状の座標を見つけようとしています。
正しいコーナーをマークし、正しい結果を表示するように設定しましたが、結局のところ座標を見つける場所がわかりません。このアルゴリズムによってマークされたすべての角のリストが必要なので、それらの面積、重心、形状、およびサイズを見つけることができます。これとは別に、各形状に含まれるすべてのピクセルのリストがあるので、座標を対応する形状と簡単に一致させることができます。これが緑の質問である場合は申し訳ありません。私は見つけることができるすべてを読んでいます。OpenCV のプロに感謝します。
python - Python を使用した OpenCV でのハリス コーナーの検出とローカリゼーション
次のコードを使用して、線を「測定」するためにポリラインのコーナーを検出しようとしています。コードはSOのどこかで見つけたスニペットに基づいており、 cv2.cornerHarris()に基づいています。
元のコードでは角の位置に白い斑点が生じ、そのレベルは「角」の指標のようです。スニペット (cv2 を使用するように更新) は、結果の画像を反復処理し、何らかの理由で 10e-06 よりも大きい値をスキャンします。これを、画像の明るさであると思われるものの比較に置き換えました。
ただし、これらの位置に描かれた円は、正規化されたハリスの出力で見つかった実際のホットスポットにはほど遠いものです。
私は何を間違っていますか?
あるいは、cv2.goodFeaturesToTrack()を設定して Harris (useHarrisDetector=True) を使用することもできますが、それを使用しようとしても、cornerHarris が適切に検出しているようには見えません。
cv2.cornerHarris() への同等の関数呼び出しは何でしょうか?