質問: ### 前提・実現したいこと pythonで取得した画像(動画の1フレーム)からほぼ楕円の形を抽出し、 その図形内に指定したサイズの円を重ならない用に任意の数敷き詰める ということをしたいと考えてます。 イメージとしては、クッキー作りの時に広げた生地からクッキー最大何個型抜きできるか と言った感じです。 四角形や円などのきれいな図形であれば、座標指定なり、円の方程式から領域を簡単に指定できるで、できたのですが、 歪な形の場合その領域を同定義すればよいかいいアイデアあれば教えてください。 ### 試したこと ・任意の形の抽出 OpenCVにて、輪郭抽出をおこない、cv2.approxPolyDPにて輪郭の近似を行い、その座標を取得 ・円の敷き詰め 円中心の座標をランダムで取得し、2つの円の半径以上になるような位置に円を配置し、置けなくなるまで繰り返す。 ※歪というと様々な形を想像するので、タイトルを変更しました。
回答: (処理速度とかの面でどうかはわからんけども) `distanceTransform` を用いれば > > 円中心の座標をランダムで取得し > > > という作業を行う際の助けになるでしょう. 初期位置から円の位置を「動かす」ような処理を考える際にも,移動先の候補を挙げるのに役立つかもしれません. で,方法論としては,とりあえずそこそこの位置(これは例えば上記のようなものを用いて決める)に円群を配置した後で, 円群の中心位置を最適化パラメータとた最適化処理を行う,という方向でどうでしょう? * 円が領域からはみ出す場合,はみだし具合が多いほど大きくなるような Penalty を課す * 他の円との距離としては「円同士が接するほどよい」的な評価(下図のような) みたいな要素が複合した目的関数を適当に用意してやれば,そこそこ調整されませんかね? !イメージ説明