回答編集履歴
5
微修正
answer
CHANGED
@@ -26,12 +26,12 @@
|
|
26
26
|
(端点ならば,近傍に線を構成する画素は1つしかなく,端点でないならば2つある)であろう
|
27
27
|
|
28
28
|
……というものですが, OpenCV の Canny の結果は必ずしも「幅1pixel」ではないため,そんな単純な話にならない.
|
29
|
-
Canny の結果を「細線化」なりできれば可能
|
29
|
+
Canny の結果を「細線化」なりできれば可能かもしれないが,おそらくその「細線化」のほうが厄介.
|
30
30
|
|
31
31
|
↓
|
32
32
|
よって,簡単な方法論を考えるとしても,「幅1pixel」を期待せずに,
|
33
33
|
着目画素を中心とする局所範囲内に存在する 線を構成する画素群 の分布から判断するような方向が良いのでないかと思う.
|
34
34
|
↓
|
35
|
-
[マルチポスト先のSO](https://ja.stackoverflow.com/questions/102223) では,そういう方向の話として「線を構成する画素群の重心位置(座標の平均)と,着目画素の位置との差分を見る」という話を書いた.
|
35
|
+
[マルチポスト先のSO](https://ja.stackoverflow.com/questions/102223) では,そういう方向の話として「該「線を構成する画素群」の重心位置(座標の平均)と,着目画素の位置との差分を見る」という話を書いた.
|
36
36
|
こんな話だと端点でない場所(:線の途中で曲率が大きい場所みたいな)でもその差分値は大きくなるであろう点に注意が必要であろうが,本件の画像例のような「線が不連続に折れ曲がった場所が無さそうな絵」が処理対象なのであれば使えなくもないかと思う.
|
37
37
|
(これが「径が1pixelとかのヘアピンカーブみたいな場所があり得る」という話ならば,こんなのでは全然ダメだろう)
|
4
文字重複を修正
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
「連結数~」なる話の内容は要するに
|
24
24
|
|
25
|
-
「(理想的な)幅1pixelの線」について考えれば,その線上の着目画素の8近傍を見てやれば,その着目画素が端
|
25
|
+
「(理想的な)幅1pixelの線」について考えれば,その線上の着目画素の8近傍を見てやれば,その着目画素が端点なのか否かがわかる
|
26
26
|
(端点ならば,近傍に線を構成する画素は1つしかなく,端点でないならば2つある)であろう
|
27
27
|
|
28
28
|
……というものですが, OpenCV の Canny の結果は必ずしも「幅1pixel」ではないため,そんな単純な話にならない.
|
3
追記
answer
CHANGED
@@ -13,3 +13,25 @@
|
|
13
13
|
|
14
14
|
* OpenCV に連結数を得る関数があるのかは知りませんが,無くても自前で画像走査すれば良いかと.
|
15
15
|
* ラベリングについては「OpenCV ラベリング」とかでググると一応は関数の候補は見つかると思います.(ただこっちも,使いにくそうなら自前で組むという選択肢もあり得るかな?)
|
16
|
+
|
17
|
+
---
|
18
|
+
|
19
|
+
## 追記
|
20
|
+
|
21
|
+
上記の「連結数」という話は, OpenCV の Canny の結果に直接用いることは難しい様子です:
|
22
|
+
|
23
|
+
「連結数~」なる話の内容は要するに
|
24
|
+
|
25
|
+
「(理想的な)幅1pixelの線」について考えれば,その線上の着目画素の8近傍を見てやれば,その着目画素が端端点なのか否かがわかる
|
26
|
+
(端点ならば,近傍に線を構成する画素は1つしかなく,端点でないならば2つある)であろう
|
27
|
+
|
28
|
+
……というものですが, OpenCV の Canny の結果は必ずしも「幅1pixel」ではないため,そんな単純な話にならない.
|
29
|
+
Canny の結果を「細線化」なりできれば可能化もしれないが,おそらくその「細線化」のほうが厄介.
|
30
|
+
|
31
|
+
↓
|
32
|
+
よって,簡単な方法論を考えるとしても,「幅1pixel」を期待せずに,
|
33
|
+
着目画素を中心とする局所範囲内に存在する 線を構成する画素群 の分布から判断するような方向が良いのでないかと思う.
|
34
|
+
↓
|
35
|
+
[マルチポスト先のSO](https://ja.stackoverflow.com/questions/102223) では,そういう方向の話として「線を構成する画素群の重心位置(座標の平均)と,着目画素の位置との差分を見る」という話を書いた.
|
36
|
+
こんな話だと端点でない場所(:線の途中で曲率が大きい場所みたいな)でもその差分値は大きくなるであろう点に注意が必要であろうが,本件の画像例のような「線が不連続に折れ曲がった場所が無さそうな絵」が処理対象なのであれば使えなくもないかと思う.
|
37
|
+
(これが「径が1pixelとかのヘアピンカーブみたいな場所があり得る」という話ならば,こんなのでは全然ダメだろう)
|
2
(1)と(2)が逆だったのを修正
answer
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
というのが
|
4
4
|
|
5
|
+
(1) 中心に一番近い「エッジの端」
|
5
|
-
(
|
6
|
+
(2) 「中心に一番近いエッジ」の端
|
6
|
-
(2) 中心に一番近い「エッジの端」
|
7
7
|
|
8
8
|
のどちらなのか? 次第でやることが変わり得る気もします.
|
9
9
|
|
1
誤記修正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
のどちらなのか? 次第でやることが変わり得る気もします.
|
9
9
|
|
10
|
-
( dilate は「見やすくする」という可視化目的でしょうから,実処理には含めないとして)Canny の結果から出発することを考えるなら,各エッジ点に関して連結数(隣にエッジ点がいくつ
|
10
|
+
( dilate は「見やすくする」という可視化目的でしょうから,実処理には含めないとして)Canny の結果から出発することを考えるなら,各エッジ点に関して連結数(隣にエッジ点がいくつあるのか)を調べることを考えてみてはどうでしょうか.
|
11
11
|
話が上記(1)側であれば,うまくいけばそれで済むかもしれません.
|
12
12
|
話が上記(2)側であれば,先にラベリング的な処理が必要かもしれません.
|
13
13
|
|