質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1280閲覧

ほぼ楕円の形の中に円を敷き詰める

HoriGucchon

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/10 21:18

編集2022/01/12 10:55

前提・実現したいこと

pythonで取得した画像(動画の1フレーム)からほぼ楕円の形を抽出し、
その図形内に指定したサイズの円を重ならない用に任意の数敷き詰める
ということをしたいと考えてます。

イメージとしては、クッキー作りの時に広げた生地からクッキー最大何個型抜きできるか
と言った感じです。

四角形や円などのきれいな図形であれば、座標指定なり、円の方程式から領域を簡単に指定できるで、できたのですが、
歪な形の場合その領域を同定義すればよいかいいアイデアあれば教えてください。

試したこと

・任意の形の抽出
OpenCVにて、輪郭抽出をおこない、cv2.approxPolyDPにて輪郭の近似を行い、その座標を取得
・円の敷き詰め
円中心の座標をランダムで取得し、2つの円の半径以上になるような位置に円を配置し、置けなくなるまで繰り返す。

※歪というと様々な形を想像するので、タイトルを変更しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/06/11 01:53 編集

> 図形内に任意のサイズの円を重ならない用に任意の数敷き詰める 当然,サイズや個数の指定次第では不可能な場合もあり得るわけですが,どうするんでしょうか? 実装する処理次第では 「(実際には解が存在するのだけれども)解を見つけることができなかった」という結果を生じ得るでしょうけども,それは許容されるのでしょうか? また,そのような場合,処理が「無理でした」という結果を返してきたときに,「本当に解が無い」のか「たまたま(?)発見できなかっただけ」か? を区別できずとも問題はないのでしょうか?
yuki23

2021/06/11 01:23

approxPolyDP でそれなりに領域の抽出はできると思いますが、何が不満なんでしょうか。 もう少し具体的な質問をお願いします。
fana

2021/06/11 01:55

> 何が不満なんでしょうか。 「領域の抽出」の部分には不満はないのでは? その後の,「その領域の中に円を詰め込む」話が課題点と見えます.
HoriGucchon

2021/06/11 23:29 編集

>fanaさん 回答ありがとうございます。円のサイズは指定して、1つずつ入れて行って、それ以上入らなければおわり、結果を図示する形で処理してます。なので、ご質問の懸念点は生じないと考えています。 欲しい数取得できなかった場合は型でくり抜いて余った生地をまたこね直して、繰り返す形になります。 >yuki23さん ありがとうございます。fanaさんがフォローしていただいた通り、領域を抽出できたのですが、その領域内を指定するアイデアが浮かばなく、困っております。approxPolyDPのx,y座標群のMax,Minをとると指定領域は四角形になってしまうので、いい方法はないか考えてます。
HoriGucchon

2021/06/11 23:32

>quickquip まだ全部みきれてませんが、ページの後半にあるoutputイメージです!(そこまで歪である必要はないですが)円サイズを同じにして埋められるような感じです。
guest

回答1

0

(処理速度とかの面でどうかはわからんけども)
distanceTransform を用いれば

円中心の座標をランダムで取得し

という作業を行う際の助けになるでしょう.
初期位置から円の位置を「動かす」ような処理を考える際にも,移動先の候補を挙げるのに役立つかもしれません.


で,方法論としては,とりあえずそこそこの位置(これは例えば上記のようなものを用いて決める)に円群を配置した後で,
円群の中心位置を最適化パラメータとた最適化処理を行う,という方向でどうでしょう?

  • 円が領域からはみ出す場合,はみだし具合が多いほど大きくなるような Penalty を課す
  • 他の円との距離としては「円同士が接するほどよい」的な評価(下図のような)

みたいな要素が複合した目的関数を適当に用意してやれば,そこそこ調整されませんかね?

イメージ説明

投稿2021/06/11 02:24

編集2021/06/11 02:26
fana

総合スコア11632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問