• 締切済み

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

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

みんなの回答

回答No.1

解析というのは解析者の目的ありきです。 何かしらのフィルタをかける場合に何が「適切な決定法になる」かは 機械ではなく、人間がどう決めるか(どういう結果をよしとするか)次第なので 例えば、PhotoShopのような画像処理系統のソフトを作りたい場合は 閾値等の決定は PhotoShopが実際にそうであるように その都度結果画像をプレビューしながらトラックバーや数値をアップダウンさせられるコントロールなどでユーザーが任意に行える という方法にするとよいでしょうし、かなり現実的だと思います。 (「中でもこういう感じの画像を処理するのが得意としたい目的のアプリ」という大よその方向性があれば、デフォルト値とかは実際にやってみて決めればいいのではないでしょうか) 決まった画像を読み込み独自のシェーダを使う、ゲームなどの場合であれば それはもう自分の満足のいくように実験で決めるということになるかと。(画像ごとに変えるなら閾値の情報も保存しておくようにするなど) もし、そういうことをかなりのレベルでほとんど自動化したいのであれば、自分の目的に合った「学習アルゴリズム」や「学習データ」(過去にどういう画像はどう処理されたかの履歴から、任意の統計学的手法で計算するプログラム)などを作成する必要が出てきそうです。度合い次第では、結構大変かもしれません。 実際のフローでは もしご自身で細かいとこまで書かれている場合は Canny法の流れは ガウシアン → Sobel → 細線化 → 2値化 ということで 仮にヒステリシス閾値 での2つのパラメーターだけいじればいいなら 細線化までの情報を一端持っておいて パラメータ変更時にそれにフィルタかけるだけにすれば、ほとんど無駄がないと思います。

関連するQ&A