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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1558閲覧

Python OpenCV での角丸四角形の測長について

elen2357

総合スコア2

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/05/20 00:28

初めての投稿で恐れ入ります。
今年からpython及びOpenCV等を利用して画像処理を始めたものです。

現在下記に示すような角丸(角が曲線)の四角形から長さ情報を抽出したいと考えており、
A:角の曲率の大きな部分を含まない短い部分の長さ
B:縦方向の最長径
の2つをパラメータとして抜き出したいと考えております。

イメージ説明

Bは長径や基本的な計測パラメータですので、特に問題はないのですが
Aの長さを抽出する方法に頭を抱えております。

A部分も直線ではなく、ゆるい曲線になっている場合がほとんどです。
図形としてはもっと円に近いものや、長方形に近い形もあり、
いずれの図形にも対応できるプログラムが最適です。
pythonとopenCVを使用しておりますが、別のソフトでできる場合はその方法でも構いません。

何か少しでも案がございましたらどなたか手助け頂けると幸いです。
何卒よろしくお願い致します。

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

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

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

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

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

fana

2022/05/20 01:30 編集

曖昧さをどうするのか?という点を定める必要がある,すなわち,あなた自身がAの範囲等を具体的に(数式に落とせるレベルの話として)定義できない限りは無理ではないでしょうか. というのは…仮に何らかの計測結果をなんとなく返すプログラムなり方法論なりが出てきたとして,その結果の「正しさ/良し悪し」を評価できないですよね. 例示された絵でもAが何故その範囲なのかが私には「?」な感じです. 左側の辺と右側の辺とでカーブ具合が異なっていますが,個別に求めるのでしょうか? それとも両者からの何かしらの総合的な単一の範囲というのがその図の「A」なのでしょうか? (右側の辺のみに関するAなのだとしても何故もっと下側まで取らないのか…? とか)
fana

2022/05/20 01:24 編集

おそらく,AとBは方向が揃っていないとならないのだと思いますが,例えば, 【Aとは「図形に内接する矩形のうち,Bと方向が揃っていて最大のやつ」の軸の長さだ】とか何とか,そんな感じで何かしらの定義を定められないのでしょうか? (この文言だと「最大」って何がだよ? ってのも謎ですが.面積?)
fana

2022/05/20 01:27

> 曲率の大きな部分を含まない …と言うならば,まずは外周上の全箇所について実際に曲率を求めて可視化なりしてみてはいかがでしょうか. 幾つかの図形での結果を並べてみて,そこから方法論を考えることをスタートすべきでしょう.
guest

回答1

0

ベストアンサー

とりあえず,すぐに思いつくようなしょぼい話を書いておきます.

(「回答」というよりは,「それだと●●な点でダメだ」と何とかいう,問題がより具体的に定義される方向に向かうような話のとっかかりにでもなれば,と.)


イメージ説明

緑の縦線(:Bと平行な線)を何本か引いてみました.
とりあえず図形の右側の辺だけを相手にして考えると,右側の辺の範囲(A)を定めるということは,「どの線よりも右側を範囲(A)とするか?」を決めることだ,と考えることができるのではないでしょうか.

ある場所に線を引いたとき,それよりも右側に存在する外周点群の「直線っぽさ」を評価すればどうでしょう?
単に線と垂直な方向に関する分散なりを見れば済むのか,もうちょっと何かしら頑張った評価値(?)を用いないとならないのか,そこらへんはよくはわかりませんが,
とにかくその評価値がある閾値となる(あるいは,もっとも閾値に近くなる,十分に閾値に近くなる)線の位置を見つければ,右側の辺の範囲を見つけたことになるのではないでしょうか.

投稿2022/05/20 01:56

fana

総合スコア11658

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

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

fana

2022/05/20 02:03 編集

…っていうような話だと,ガチの角丸矩形(辺が直線のやつ)に対して,ちょっと残念な(丸まった分をいくらか含んだ形の)結果が得られることになるだろう,というのはすぐに想像がつくよね. そしたら,「閾値」を形状に応じて何かしら Adaptive に変えられるような話が何か必要そうに思えるけど,いい手があるのかどうかはわからんです.(「B」が得られるなら,同様な横方向バージョンの値も得られるだろうから,それに比例させるような方向になるか…? とか思うが…)
elen2357

2022/05/23 23:23

丁寧なご回答ありがとうござます。 ご指摘のとおり、実際にはどのような評価方法で以って曲線分を区切るのか その妥当性は何か?という議論がまず初めになされるべきかと存じております。 実際にはもっと円形に近いものやもっと長方形に近いものもあり、 角の部分の判別も難しくなります。 ご提案頂いた、直線を引いて交わった2交点での区切り方は大変参考になります。 まだ画像処理も駆け出しの身ではございますが、 頂いたアドバイスを元に解析手法をを見直すところも含めて熟考したいと思います。 ご回答まことにありがとうございました。
fana

2022/05/24 01:03

今さらですが,このような処理の話をする際には,(可能であれば,ですが)「前提の話:実際にやってること(Aを求めることの目的,Aの用途)」みたいなのを説明すると良いかと思います. それ次第で取り得る方法や必要な求められる結果が異なり得る場合,そこらへんに関する共通認識が無い状態では,質問→回答 というやりとりはなかなかうまく行かないでしょうから. (あるいは,「そういう話であればAを求めずとも…」みたいな話もあり得るかもしれませんし)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問