1

バイナリ イメージに破損した線分がいくつかあり、それらを修正する必要があります (線分をまっすぐにし、元の太さにします)。そのためには、セグメントの中間点を見つける必要があるため、近傍をチェックして線の太さを見つけると、ピクセルが 1 でなくなって 0 になる場所を見つけることができます。

4

3 に答える 3

2

損傷した線分が直線であると仮定すると、MATLAB で regionprops を使用して各境界ボックスの中心を見つけることができます。セグメントが直線の場合、それは常にバウンディング ボックスの対角線であるため、ボックスの中心はセグメントの中心でもあります。

于 2012-10-08T23:22:15.737 に答える
1

あいまいさを減らすために、点 A と B を A(Xa, Ya) と B(Xb, Yb) と呼びましょう。

中点を C とします。

C(Xc, Yc)
Xc = (Xa + Xb) / 2
Yc = (Ya + Yb) / 2

X 座標に 2 つ、Y 座標に 2 つの興味深い数字が 4 つあります。

Xmin = floor(Xc)
Xmax = ceil(Xc)
Ymin = floor(Yc)
Ymax = ceil(Yc)

中点の X 座標は Xmin または Xmax のいずれかであり、中点の Y 座標は Ymin または Ymax のいずれかです。

したがって、4 つの潜在的なポイントがあります(Xmin, Ymin), (Xmin, Ymax), (Xmax, Ymin), (Xmax, Ymax)

したがって、最後に、どの点が C に最も近いかを決定する必要があります。

P(Xp, Yp) から C(Xc, Yc) までの距離は次のとおりです。

sqrt(sqr(Xp - Xc) + sqr(Yp - Yc))

4 つの点から C までの 4 つの距離を計算し、最小値を選択すると、それが可能な限り最良の中間点になります。

于 2012-10-08T23:10:13.050 に答える
1

仮定する

A = [xa ya];
B = [xb yb];

それから

C = round( mean([A;B]) );

Matlabroundでは数値が最も近い整数に丸められるため、これにより、解析中心 ( mean([A;B])) から最も近いピクセルまでの (都市ブロック) 距離が最小化されます。

サブピクセル精度を維持したい場合 (これは、結果からピクセル インデックスへの明示的なマップが必要になるまで、ほとんどの計算で実際に推奨されます)、単に を削除して、roundその部分のみを使用しますmean

于 2012-10-09T04:43:23.877 に答える