質問するログイン新規登録

回答編集履歴

5

微修正

2025/10/03 03:09

投稿

fana
fana

スコア12299

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

文字重複を修正

2025/10/03 03:07

投稿

fana
fana

スコア12299

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

追記

2025/10/03 03:06

投稿

fana
fana

スコア12299

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)が逆だったのを修正

2025/09/29 02:10

投稿

fana
fana

スコア12299

answer CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  というのが
4
4
 
5
+ (1) 中心に一番近い「エッジの端」
5
- (1) 「中心に一番近いエッジ」の端
6
+ (2) 「中心に一番近いエッジ」の端
6
- (2) 中心に一番近い「エッジの端」
7
7
 
8
8
  のどちらなのか? 次第でやることが変わり得る気もします.
9
9
 

1

誤記修正

2025/09/29 02:09

投稿

fana
fana

スコア12299

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