目標:以下のような円柱から表面の模様(輪郭)を読み取り、上面の楕円形の曲線と同じ形のの輪郭を見つけ出し、そのY座標を求める。
汚い画像で申し訳ないですが、赤で囲った範囲が求めたい曲線、矢印でつながっている先が、円柱の上面にあたる楕円形です。
これは斜め上から円柱を見下ろしたイメージです。
白い線は円柱表面の模様の輪郭線で、赤で囲った曲線以外は不要になります。
上面の楕円形の形は把握できています。
まず、解決法として思いついたのは、np.count_nonzeroでY座標の0からimg.shape[0]まで順に、横に並んだ白ピクセル数をカウントしていき、一定数以上の値を持ったY座標ものを選ぶといったものです。
ですが、この方法だと湾曲の大きい曲線だと上手く検知することができません。
もう一つの方法は、求めたい曲線の式を2次関数で求め、その式から横1列の(x,y)座標を求め、その座標を上から下にずらしていき、上と同じようにnp.count_nonzeroで座標の白ピクセルをカウントしていくといった方法です。
例えば、曲線の式が y = ax**2 + bx + c だとすると、画像[height]の1列においてx(0~width)を代入することで、曲線の点群が求まります。
その各点から白ピクセルの数を数えるといったものです。
その後、点群にy+-=1して上下にずらすことで、それぞれの高さのピクセル数も求まります。
しかし、どちらも良い方法には思えないので、何か良い解決法がありましたらご教授いただけると幸いです。
宜しくお願いいたします。
