画像処理の高精度な輪郭検出について

このQ&Aのポイント
  • 画像処理の高精度な輪郭検出について研究しています。
  • 現在使用している差分計算やOpenCV関数の他に、フィルタや特徴点抽出の手法を検討中です。
  • フリーソフトの輪郭検出器では満足いく結果が得られず、他の手法を教えていただきたいです。
回答を見る
  • 締切済み

画像処理(高精度な輪郭検出)について

今年新卒で入社し、医療機器関連のエンジニアとしてスタートしたものです。素人ながら質問させていただきたいと思います。 現在、Visual Studio 2010(言語はC#)とOpenCVを用いて、画像中の輪郭、物体をできるだけ高精度に検出するアルゴリズムの研究を行っています。 基本である差分計算やOpenCVの関数を用いたラプラシアンフィルタやCannyアルゴリズム、輪郭線抽出、RGBからHSV,Lab色空間(Labについては現在も調査中です。)へ変換し、閾値を変えてみるなど試してみました。また、PhotoShopを用いて、コントラストや明るさ、色調変換をかけて、同様に試してみたりもしました。 しかし、画像によっては満足いく輪郭、物体の検出ができない状態です(フリーソフトの輪郭検出器2.10を使ってみても同じでした)。勿論、明るさやレンズの特質等の影響もあるとは思いますが・・・。 そこでお聞きしたいのですが、上記の他にもできるだけ高精度に輪郭や特徴点を検出する手法がありましたら、教えていただける範囲で教えていただけないしょうか。 漠然とした質問で申し訳ありません。どうぞよろしくお願い申し上げます。 今のところ検討中なのは、対象画像に何らかのフィルタをかけて、それから差分や大津の2値化閾値判定を使う、特徴点抽出には、OpenCVのコーナー検出アルゴリズム(Harris等)やSURF等を使うことを考えています。 勿論、上記の事項に応用的に工夫を加える独自のアルゴリズムも検討中です。

noname#230358
noname#230358
  • 開発
  • 回答数5
  • ありがとう数6

みんなの回答

noname#230359
noname#230359
回答No.5

昔、工場で使う簡易的な画像処理装置の開発に従事しました。 (私は、ソフトと開発全体の統括を担当。) さらにその前には、2年程ですが、 丸に十字マークの放射線機器メーカーの販売代理店で、 社内システムのプログラマ 兼 フィールドサービスを担当していました。 (MRIが市場に出始めた頃です。) この質問には、とても興味があります。 医療機器で画像処理ですから、自ずと装置が絞られますが、 まぁ、おかしな詮索は止めにしておきます。 輪郭抽出のアルゴリズムは、御存知の通りです。 コペルニクス的転回の、魔法の様な手法は、これ以上ありません。 では、どうするか? 処理前の元画像を、出来るだけ高コントラストにするのです。 > PhotoShopを用いて、コントラストや明るさ、色調変換をかけて、 フォトショ頼りではなく、画像処理でコントラストを改善するのです。 アンギオのDSAでやっているでしょ? (↑の専門用語も、医療機器屋さんなら分かる筈。) 現在は画像処理に使えるDSPも、種類があり安価になりました。 (昔、NECのImPPを使い、CP/M-86 上でソフトを書きました。) (そんな時代とは、雲泥の差が有ります。) 頑張りましょう。 > 画像によっては満足いく輪郭、物体の検出ができない状態です 画像処理は、条件が多岐に渡り、しかも、それが安定していない事が多く、 満足のいく結果が得られる様な元画像そのものを、得るのが困難です。 他の回答者と同様、あらゆるパラメータの設定に、 或る程度の知見をもつ必要があります。 技術者一個人では、なかなか困難です。 職場で上司と相談し、多くの人材を集めて進める手も模索しましょう。

noname#230358
質問者

お礼

ご回答誠に有難うございました。 輪郭抽出においては、本に載っているような基礎事項はほぼ試してみましたが、やはり基本事項の組み合わせ(フィルタリングをかけてから閾値調整等)ではまだまだのようです。おっしゃる通りなかなか困難な状況です。 画像処理でコントラストを上げることも現在検討しております。これに関しては画素数に数学的、統計的関数を施して、画像上の色変化を調整することを考えています。 上司や先輩社員と打ち合わせを行いつつ、検討を重ねておりますが、それでもなかなか難しいのが現状です。

noname#230359
noname#230359
回答No.4

回答(3)さんに賛成です。 画像処理単体での処理ではブレイクスルーは困難ですね。 30万画素程度ですと 照明のスペクトルをフィールドシーケンシャルで変える(場合によっては赤外線撮像や紫外線照射による蛍光なども利用する) 照明の方向を切り替えたりパターン照射して3D認識も併用する 時間方向の微分解析や統計的解析を併用して輪郭を認識する。 などの入力インターフェースの工夫がカギではないでしょうか。

noname#230358
質問者

お礼

ご回答誠に有難うございます。 やはり単体での処理は限界があるのでしょうか。 照明の明るさは撮影条件に大きく左右されますが、どの条件でも対応できるように処理できなければならないのが現状なので、厳しいところです。 おっしゃる通り、統計的解析も現在検討中で、画像中の輪郭の色の変化を数学的に調整する(シグモイド関数等)ことも検討しております。

noname#230359
noname#230359
回答No.3

具体的には人の顔?内臓的なもの? もう少し具体的にわかるとアドバイスが増えるかも。 とりあえず、ざっくりと 産業関連の画像検査からノウハウ的なものを。。。 画像を取り込むところにも手を加えられるなら、 欲しい輪郭が一番現れる照明の当て方、色を工夫する。 (この部分はこの条件、この部分はこの条件と変えて あとから合成できればもっと安定する?) 輪郭抽出についても、ここの輪郭をとるときはこの画像処理 (フィルタ条件(膨張、収縮、2値化、差分強調、、、)、背景カット、など) と変えて判定を合成する。 あと、反射光で外乱になるなら、ハード面で偏光フィルタをつけるとか。 的外れかな?

noname#230358
質問者

お礼

ご回答誠にありがとうございました。 画像の対象物の内容に関しては細かくはお話することはできないのですが、おっしゃる通り、照明の照らし方や対象物により画像の明るさや色も大きく異なるため正直難しいところなのです。恐らく、風景画等と異なり、画像中の特徴点がつかみにくいからだと思います。 確かに画像の部位ごとに処理手法を変えて、やってみるのも手だとは思います。 偏光フィルタも検討してみたいと思います。

noname#230359
noname#230359
回答No.2

似た分野では、約20年前に浜松ホトニクスさんと色々な開発をしました。 (特に、基準点の設定方法と比較手法) また最近では、精密プレス品の出荷判別検査で使用しましたが、カメラや照明が高性能になって いて、しかもカメラに照明が内臓しているタイプもあり、ハード面の進歩を実感しました。 さて、機械屋なのでハード面で、SONYさん等のカメラを使用し、レンズは***で、照明は ***で、周囲部品は艶消しの黒色塗装/メッキで、では無理でしょうか? 無理なら、何処かと提携して進める事にした方がよいでしょうね。 御免なさいね。具体的なメーカー名や手法を記述しなくて。 それと、機械屋さんなので??ですが、今でも世界の映像王はSONYさんなんでしょうか? 後、データ処理過程は見る事ができませんでしたが、レントゲン写真みたいな画像でしたし、 影を気にしていたので、照明をカメラ内臓を含めて沢山設置しました。 使わなくなった照明もありますが。 ですから、処理前の元画像を、出来るだけ高コントラストにするのですは、正解なんでしょうね。

noname#230358
質問者

お礼

ご回答誠に有難うございました。 撮影には弊社の医療用カメラを使用しています。30万画素の画像での対応を試みています。ハード面も大きく影響すると思います。 確かに、何処かと提携して進める必要も出てくるかもしれません。

noname#230358
質問者

補足

返答が遅れ申し訳ありません。 映像に関しては、SONYさんはおっしゃる通り、映像王だと思います。 あとはキーエンスさんやオムロンさん、東芝さん、大学の研究室等もネットで調べると色々面白い文献があるみたいですね。

noname#230359
noname#230359
回答No.1

この分野は,特許や学術研究であればまだしも,ブラックボックス化させて手法を公開しない事例も多いのかな。 ``検出''にだけ反応すると,データベースをもっておく,という手法も使えそうです。OpenCVを使用しているのであればおわかりでしょうけれども,顔検出はそれですよね。

noname#230358
質問者

お礼

早速のご回答誠に有難うございます。 確かに調べてみますと、特許等ではあるみたいですが、公開されてない部分が多く、大変難しいです。 おっしゃる通り顔検出用データベースを持っていく手法も考えましたが、扱っている分野が少々マイナーなため、それも難しい状況です。 他にもガンマ補正などのフィルタをかけたりもしましたが、まだまだのようです。他のフィルタリング等も調べてみたいと思います。

関連するQ&A

  • OpenCVを使用してある物体だけの輪郭を抽出したいです。

    OpenCVを使用してある物体だけの輪郭を抽出したいです。 下の画像だと赤い円を抽出したいのに、線も含めた輪郭が抽出されます。 なにか良い方法はありまあせんか?

  • 画像に対する輪郭線

    色々とネットで調べたのですが思うように行かなくて フォトショップ、ペインター、フォトフィルター、ピクトベアー 輪郭抽出のソフトなど試してみましたが期待通りの結果が出せませんでした 元画像は、金属片の拡大画像で約2500倍に拡大しています 白黒でカラーではないのと、輪郭があまりはっきりしないのともあって 画像を濃淡で表示させ輪郭を抽出しようとしましたが濃淡も薄くて輪郭が抽出されない部分があり困っています 輪郭抽出方法やソフトの情報ありましたらお願いします

  • Canny法に用いる閾値の決定法について

    とあるプログラムをしている者です。 Canny法を用いてエッジ抽出を試みているのですが、 ヒステリシス閾値で用いる高い閾値と低い閾値の適切な決定法がわかりません。 最終的には抽出の対象となる画像ごとに適切な閾値を設定し 処理をかけたいと考えています。 しかし、対象とする画像の背景と抽出したいオブジェクトの色の濃度が 画像によって大きく変化するため、従来の決定法では対応しきれていない現状です。 そこで、Canny法に用いる適切な閾値の決定法がありましたら ぜひご教授頂きたいと思います よろしくお願いします

  • レントゲン画像の…

    レントゲン画像やCT画像のように輪郭がぼやけてはっきりしない画像があります この画像の輪郭線(エッジ)を上手く抽出する方法は無いでしょうか Jtrm、Fhotofiltre、Mgv、等のフィルターにある輪郭抽出は試してみましたが、上手くいきませんでした カスタムフィルターの使用方法(内部処理)がよくわからず にいます 元画像を良くすれば一番簡単なのですが使用機器の内部構成的に無理らしいので教えて下さい

  • 移動物体検出

    連続撮影した画像から、移動物体を検出するプログラミングを教えてください。 例えば、走る車を連続撮影し、背景を引き算(差分)して、移動物体(車)だけを取り出したいです。 使用しているソフトはvisual studio 2008です。 よろしくお願いします。

  • メディアフィルタのアルゴリズムと基本処理の原理

    カラー画像のメディアフィルタ基本処理の原理とアルゴリズムについて教えてください。それと先鋭化処理とエッジ抽出など原理とアルゴリズムについても知っていたぜひ教えてください。

  • findContoursの格納データ(点ベクトル?

    こんにちは スキルが無いので資料見ながら苦労しています。 まずやりたいことは, キネクト等で取得した物体断面画像(長方形物体,傾き有り)の最大長さと幅を取得することです。 opencvのサンプルプログラム (1)「Square」の”findContours”で輪郭抽出を, (2)「minarea」の”minAreaRect”で輪郭点群を内包する長方形取得 と考えたのですが, 格納変数が (1)はvector<vector<Point>> (2)はvector<Point> ということでそのままはつかえません。(・・・よね?・・・) (2)は単純にXYの座標データですが, (1)は2次元配列で「 検出された輪郭.各輪郭は,点のベクトルとして格納されます.」 とOpenCV 2.2 C++ リファレンスにはありました。 点ベクトルで格納されていると言うことが今ひとつ理解できずにいます。2次元配列の ・1番目の要素は何か? ・2番目の要素は何か? ・格納されているx,yは何か? わかりやすく解説して頂けると助かります。 併せて, ・上記を実現するためにvector<vector<Point>>をvector<Point>にうまく変換する方法 ・他に良い方法があるよ とかありましたらお願いします。

  • 画像一致判定のアルゴリズム

    【やりたいこと】 2枚のデジカメなどで撮った画像を自動で合成したいのです。 その2枚は少し(数十ピクセル)左右上下にずれた画像で、最終的にはその2枚を平均化するなどして合成したい。 問題は、その2枚の画像がどの方向に何ピクセルずれているかを求めなければならないのです。 とりあえず1ピクセルずらしながら、差分を合計しその差分が最小となるずれを見つけるようにプログラムしましたが実用的な速度になりません。 【質問したいこと】 2枚の画像のずれを高速に求めるアルゴリズムはありませんでしょうか。 精度はあまり良くなくても構いません。ある程度絞り込めればその付近を1ピクセル調べる方法をとります。

  • 画像のエッジ抽出について

    画像のエッジ抽出について 画像処理を学び始めたばかりのものです。 細菌や細胞などのエッジを、 C言語を使って抽出しようと思っているのですが ・Sobelフィルタ ・FFTによる低周波カット ・ラプラシアンフィルタなど の代表的なフィルターを組み合わせて使っても、綺麗にエッジが出ません。 二値化してエッジになるのには遠い状態です。 自分の撮った画像が悪かったのか・・と思いましたが、 フリーソフトのimageJで、エッジ抽出という処理をすると 綺麗に最近の形状が出ます。 これはどのようなアルゴリズムを使っているのでしょうか・・・ 教科書やネットを調べていても、上の3つ以外にフィルタがなさそうなので 途方に暮れています。。 お恥ずかしいですが、よろしくお願いいたします。。

  • OpenCVで寸法測定

    カメラで撮影した画像から、精度よく物体の寸法を出すアプリケーションを作ろうと思います。 調べたところ、OpenCVというライブラリを使うと可能そうです。 しかし、OpenCVについては、全く初心者です。 OpenCVに詳しい方に質問ですが、たとえば、ドアの画像から、高さサイズを計算したり出来ますか? 出来るのであれば、方法や関数など、簡単に教えて頂きたいです。参考になるHPがあればありがたいです。 また、OpenCV以外でも、良い方法があれば教えでください。よろしくです。