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

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

ただいまの
回答率

91.04%

  • C

    2964questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

色相を考慮したカラー画像の勾配の計算法

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 109

kinrevo

score 1

前提・実現したいこと

カラー画像の勾配を計算したいのですが、良い方法が思いつきません。
単純に、グレースケールに変換した後にSobelフィルタを用いれば簡単な勾配を求めることはできますが、カラー画像ではあきらかに色の境目があるものでもグレースケールでは境界が潰れてしまうことがあります。

例えば下の画像では、真ん中上のトマトと服の間に明確な境界があるように見えますが、グレースケールでは目立った境目は見えず、Sobel計算でも勾配は殆ど検出されていないように見えます。

色相や彩度も考慮した勾配の計算方法はないのでしょうか?
勾配方向も計算できれば有り難いですが、勾配強度だけでも計算できれば助かります。

説明不足かもしれませんが、よろしくお願い致します。

元画像
グレースケール
Sobelフィルタ

考えたこと

ピクセルごとにHSV三つの要素を持っていると考え五次元空間で勾配を計算すればどうか、と考えましたが具体的な実現法までは頭が追いつきませんでした。

補足情報(言語/FW/ツール等のバージョンなど)

C言語

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

自分で考えるよりよっぽどまともな手法があるだろうということで、まず先例を調べたところ、
RGBそれぞれでエッジを検出し、最大値または合計値を使ってエッジを検出するというのが多く引っかかりました。
例えば色情報と大津の閾値判別法を用いたエッジ検出

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/15 11:48

    ご回答ありがとうございます!
    自分でも検索は十分したつもりでしたが、そのページは知りませんでした。
    簡単に見たところ、求めていた手法のようです。

    キャンセル

+1

RGBそれぞれでSobelかけて足し合わせるとか...思い付きですが。
輪郭を浮き出させたいならCanny変換でしょうけど。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/15 07:13 編集

    ご回答ありがとうございます!
    sobelを掛けたあとに平均を取る、ということですね。
    (R*s + G*s + B*s)/3 = (R+G+B)/3 * s #s=sobel
    と考えると、実質グレースケール化した(平均を取った)あとにSobelをかけたものと同じ結果になってしまうのではないでしょうか? 間違っていたらすみません。
    (R:255 ,G:0 ,B:0) と(R:0 ,G:255 ,B:0) のような、平均化すると同じ明度となってしまうものでも輪郭を浮き出るようにしたい、と考えています。

    キャンセル

  • 2018/01/15 09:43

    > Sobelをかけたものと同じ結果になってしまうのではないでしょうか?
    なんで?

    キャンセル

  • 2018/01/15 11:09 編集

    上の等式が成り立つとすれば、sobelと平均化はどちらから行っても同じではないかと考えました。
    一応、適当の値で計算してみたところ下のようになりました。
    ____1 2 3______4 5 6______7 8 9______-1 0 1
    R=( 4 5 6 ),G=( 1 2 3 ),B=( 4 5 6 ),s=( -2 0 2 ),
    ____7 8 9______7 8 9______1 2 3______-1 0 1

    (R*s + G*s + B*s)/3 = (8+8+8)/3 =8

    _______________4 5 6
    (R+G+B)/3*s = ( 3 4 5 ) =8
    _______________5 6 7

    キャンセル

  • 2018/01/15 11:02

    sobel変換はその等式が成り立つ?

    キャンセル

  • 2018/01/15 11:12

    畳み込み演算なので成り立つのではないか、と考えました。
    一応適当な計算では一致しましたが……成り立たないのでしょうか。

    キャンセル

  • 2018/01/15 11:22

    画像処理でのsobel変換は変化量の大きいとこほど白くなる。「変化量が+でも-でも」。
    ならばそれは単なる畳み込みの加算とはならんでしょ。

    キャンセル

  • 2018/01/15 11:30

    あ、絶対値をとる前に合計するということですか。強度を取った後に合計するものだと思いこんでしまっていました……すみません。
    それだとなにかしら異なる結果が得られそうですね。考えてみます。

    キャンセル

  • 2018/01/15 11:33

    sobel変換で縦横両方のエッジ検出する場合
    縦/横エッジ検出する畳み込みの結果の二乗和平方根を取るので
    S(x+y) = S(x)+S(y) は一般に成り立たないはずです

    キャンセル

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

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    アクセス解析ツールについて

    現在、サイトにgoogleアナリティクスを設定していますが、 クライアントから追加でYahoo!アクセス解析を設定してほしいと言われました。 私は今までgoogleアナリテ

  • 解決済

    Scene BuilderでCSSファイルと画像ファイルを読み込んだが、NetBeans上で反映され...

    Scene BuilderでCSSファイル読み込んで、ボタンが平面的になるボタンを作成し、 画像をファイルから読み込んで挿入し、Scene Builderでプレビューすると↓のよ

  • 解決済

    UIScrollViewのStoryboards上でのY座標がおかしい

    UIScrollViewの設定値が、どうしても最上部がマイナス値になってしまいます。 contentOffsetの値を、実行中に y:-56 とかにするとうまく表示されるので

  • 解決済

    ACCESS クエリでの一部重複?の除外方法について

    前提・実現したいこと こんにちは、質問タイトルが適格でないかもしれませんが宜しくお願いいたします。 通販事業をしており、商品の仕入から販売までのデータベースをACCESSの

  • 解決済

    macをクリーンインストールした後vimのシンタックスハイライトがつかない

    macbookproをクリーンインストールして、.vimrcの設定を追加したのですが、シンタックスハイライトとカラースキーマが反映されません。 行番号は表示されているので全く読み

  • 解決済

    Monacaでtimepickerの実装

    前提・実現したいこと MonacaでiOS/Andriod両方に対応しているアプリケーションを開発していて、アラーム機能を実装しようと思い、Monacaでtimepickerのよ

  • 解決済

    atom自動補完やり方

    これのプログラミング版になります 今いろいろ調べているのですが、atom自動補完ができません。宜しくお願い致します。 リンク内容 autocomplete-p

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

同じタグがついた質問を見る

  • C

    2964questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。