4

2 本の線の交点の間にあるピクセル値を見つける必要があります。次の画像は、必要なポイント、つまり茶色の領域を示しています。

これらの 4 つの座標は変更される可能性があり、必ずしもコーナー ポイントではありません。

ここに画像の説明を入力

ピクセル値を取得する最速の方法は何ですか? 必要なマスクを提供できる機能はありますか。

4

3 に答える 3

6

線の上か下かに関係なく、各点について計算する必要があります。線が方程式形式Ax+By+Cで与えられている場合、ポイントごとに、この式の符号を計算するのと同じくらい簡単(x,y)です。行が他の形式で与えられている場合は、最初に上記の形式を計算する必要があります。(こちらこちらをご覧ください)

L1を最初の線より下のすべての点の集合、および2L2番目の線より下のすべての点の集合とする。次に、あなたのセットはX = Xor(L1,L2)

[ ここに画像の説明を入力 ] Xor [ ここに画像の説明を入力]

等しい:

ここに画像の説明を入力

これは、私が説明した解決策に基づいて、コーナーポイントの問題を解決するMatlabコードです。コード内の直線方程式を調整できます。

function CreateMask()
    rows = 100;
    cols = 200;
    [X,Y] = ndgrid(1:cols,1:rows);

    belowFirstLine  = X*(1/cols)  + Y*(-1/rows) + 0 < 0;
    belowSecondLine = X*(-1/cols) + Y*(-1/rows) + 1 < 0;

    figure;imshow( transpose(xor(belowSecondLine,belowFirstLine)));
end
于 2012-11-06T12:31:35.610 に答える
1

これは、解析的なソリューションではなく、幾何学的なソリューションです。

最初に、最初はすべてゼロで埋められたマスク イメージを作成する必要があります。次に、ブレゼンハムのアルゴリズムを使用して両方の線を描画する必要があります。Matlab にはデフォルトの実装はありませんが、 Matlab Centralで選択できます。線と画像の境界線の交点の座標があると思います。

その後、画像は 4 つの領域に分割され、そのうちの 2 つをbwfillを使用して塗りつぶす必要があります。そして今、あなたはマスクを持っています。

于 2012-11-06T05:58:54.467 に答える
0

x 座標と y 座標を使用して 2 つの行列を生成することから始めることができます。

 1 2 3 4 5       1 1 1 1 1 
 1 2 3 4 5   vs. 2 2 2 2 2   sized as the region
 1 2 3 4 5       3 3 3 3 3  

次に、x*a + y*b < c を 4 つのマスクに変換する 4 行の方程式が必要です
。 bot_mask;

線幅は、a と b が正規化されていると仮定して、線幅の半分の 'c' を追加することで制御できます。

于 2012-11-06T05:49:29.757 に答える