web-dev-qa-db-ja.com

HSLはHSIおよびHSV色空間よりも優れていますか?

HSLは人間の知覚を考慮に入れているため、HSIやHSVよりも優れていますか?一部の画像処理アルゴリズムでは、これらの色空間のいずれかを使用できると言われていますが、どちらを選択すればよいかわかりません。つまり、アルゴリズムは、色相と彩度チャネルを提供するだけで、使用する色空間を選択できます。

23
user1509260

どちらが最適かは、使用目的によって異なります。しかし、私の経験では、HSL(HLS)は明るさと彩度の間に不幸な相互作用があります。

画像の明るさを2つ下げる例を次に示します。左端の画像は元の画像です。次に、RGB、HLS、およびHSVを使用した結果を示します。

RGB, HLS, HSV comparison

HLSの蝶の端の周りの過度に明るく飽和したスポット、特に下部の赤いスポットに注意してください。これは私が言及していた飽和問題です。

この例は、変換に colorsysモジュール を使用してPythonで作成されました。

28
Mark Ransom

まだ受け入れられている答えがなく、これを完全に理解するためにさらに調査する必要があったので、2セントを追加します。

他の人が言っているように、HSLとHSVのどちらが優れているかについての答えは、モデル化して操作しようとしているものによって異なります。

tl; dr-HSVは「より良い」だけです より マシンビジョン用のHSL(注意事項あり、以下をお読みください)。 「ラボ」やその他の正式なカラーモデルははるかに正確であり(ただし計算コストが高くなります)、より深刻な作業に実際に使用する必要があります。 HSLは、「ペイント」アプリケーションや、色の値を「設定」、「入力」、またはその他の方法で理解/理解するために人間が必要なその他のアプリケーションに最適です。

詳細については、以下をお読みください。




色がどのように生成されるかをモデル化しようとしている場合、最も直感的なモデルはHSLです。これは、ペイントを混合して色を作成する方法にほぼ直接マッピングされるためです。たとえば、「暗い」黄色を作成するには、ベースの黄色のペイントを少し黒と混ぜます。明るい黄色の色合いを作成するのに対して、少し白を混ぜます。

HSLの「L」スペクトルの50から0までの値は、どのくらいの「黒」を混合する必要があるかを示します(Lが50から0に減少すると、黒は0から100%に増加します)。

50から100までの値は、どのくらいの「白」を混ぜる必要があるかを示します(Lが50から100%に増加すると、白は0から100%まで変化します)。

50%の「L」は、白や黒からの「汚染」のない「最も純粋な」色を提供します。


以下のリンクからの洞察:
1。 http://forums.getpaint.net/index.php?/topic/22745-hsl-instead-of-hsv/ 最後の投稿。
2。 http://en.wikipedia.org/wiki/HSL_and_HSV HSLの色空間シリンダーを調べます-これは、私が話した分布の種類について非常に明確なアイデアを提供します。

さらに、いずれかの時点で塗料を扱ったことがある場合は、上記の説明が(うまくいけば)理にかなっています。 :)


したがって、HSLは、色を「生成」する方法を理解するための非常に直感的な方法です。したがって、ペイントアプリケーション、または「シェード」で考えることに慣れているオーディエンスを対象とするその他のアプリケーションに最適なモデルです。色の「トーン」用語。




次に、HSVに移ります。

私たちがHSVを理解するために私が公式化した理論に基づいて宇宙に入り、他の情報源によって検証または裏付けられていないため、これは現在危険な領域です。

私の見解では、HSVの「V」は、光がゼロの場合、オブジェクトは完全に暗く、100%の光の場合、すべて白になると仮定して、オブジェクトに投じられる光の量にマッピングされます。

したがって、Appleの this 画像では、光源に直接面しているポイントはすべて白であり、100%に「V」がある可能性が高いのに対し、下部のポイントは完全に影があり、光の影響を受けていない場合、値は「0」です。 (私はこれらの値をチェックしていません。説明に役立つと思っただけです)。

したがって、HSVは、HSLよりも優れたオブジェクトの照明方法をモデル化しているようです(したがって、マシンビジョンアプリケーションで鏡面ハイライトまたはシャドウに対して実行する必要のある補正を考慮に入れます)。




しかし、私がリンクしたウィキペディアの記事の「短所」セクションの例から非常に明白にわかるように、これらの方法はどちらも完璧ではありません。 「ラボ」やその他のより正式な(そして計算コストの高い)カラーモデルは、はるかに優れた仕事をします。

追伸:これが誰かに役立つことを願っています。

20
Dev Kanchen

利点があり、人間の知覚を考慮に入れる唯一の色空間は、ユークリッド距離が人間の色の微分と相関しているという意味で、 [〜#〜] lab [〜#〜] です。

ウィキペディアから直接取得:

RGBおよびCMYKカラーモデルとは異なり、ラボカラーは人間の視覚に近いように設計されています。それは知覚の均一性を目指しており、そのL成分は人間の明るさの知覚と密接に一致しています

これが、多くのコンピュータービジョンアルゴリズムがLABスペースを利用している理由です。

HSVHSB、およびHSIにはこのプロパティがありません。したがって、答えはノーです。人間の知覚という意味では、HSLHSIおよびHSVよりも「優れている」わけではありません。

人間の知覚に近づきたい場合は、LAB色空間を試してください。

9

あるものが別のものよりも優れているわけではなく、それぞれが別のものを数学的に変換したものにすぎません。表現が異なると、希望する効果を得るための画像の操作が少し簡単になります。それぞれの人は画像を少し異なって認識し、HSIまたはHSVを使用すると出力画像にわずかな違いが生じる可能性があります。

システムに対して(つまり、ピクセル配列を使用して)考慮した場合のRGBでさえ、人間の知覚を考慮に入れます。イメージャ(バイエルオーバーレイ付き)が写真を撮るとき、1つの赤と青のピクセルごとに2つの緑のピクセルがあります。モニターは引き続きRGBで出力します(ただし、ほとんどの場合、赤と青ごとに1つの緑のピクセルしかありません)。シャープ製の新しいテレビモニターは、黄色の出力ピクセルを備えています。彼らがこれを行った理由は、実際の周波数スペクトルに黄色の帯があるためです。そのため、色をより正確に表すために、黄色の帯(またはピクセル)を追加しました。

これらはすべて、スペクトル内の他のどの色よりも緑に対する感度が高い人間の目に基づいています。

使用するスケールに関係なく、画像はRGBに変換され、画面に表示されます。

http://hyperphysics.phy-astr.gsu.edu/hbase/vision/colcon.html

http://www.physicsclassroom.com/class/light/u12l2b.cfm

要するに、私はどれかが他よりも優れているとは思いません。ただ異なる表現です。

http://en.wikipedia.org/wiki/Color

7
trumpetlicks

実際、HSVでは、彩度は色の純度であり、値はその色の強度であり、全体的な明るさではないことを理解している限り、HSVは人間の視覚をよりよく説明していると主張する必要があります。たとえば、この画像を見てください...
Spectrum

これは、HSL飽和(左)とHSL輝度(右)のマッピングです。
HSL saturationenter image description here
突然落ちる最上部の白に当たるまで、飽和度は100%であることに注意してください。このマッピングは、元の画像を見たときに認識されません。輝度マッピングについても同じことが言えます。グラデーションはより明確ですが、視覚的には漠然と一致するだけです。以下のHSV飽和(左)とHSV値(右)と比較してください...
HSV Saturationenter image description here
ここでは、色が白くなるにつれて彩度マッピングが低下しているのがわかります。同様に、値のマッピングは元の画像で非常にはっきりと見ることができます。これは、元の画像の個々のカラーチャネルのマ​​ッピングを見ると、より明確になります(黒以外の領域は値のマッピングとほぼ完全に一致しますが、輝度のマッピングにはほど遠いです)。
Red ChannelGreen ChannelBlue Channel
この情報を見ると、HSVは実際の画像(特に写真)の操作に適しているのに対し、HSLはカラーピッカーで色を選択する場合にのみ適している可能性があります。

ちなみに、HSVの値は、CMYKの黒の逆数です。

HSLよりもHSVを使用することについての別の議論は、HSLがその上部コーンに対してその解像度の約半分を失うため、HSVは同じ色になる可能性のある異なる値の組み合わせがはるかに少ないということです。コンポーネントを表すためにバイトを使用したとしましょう。これにより、各コンポーネントに256の一意のレベルが与えられます。これによりHSLで生成される一意のRGB出力の最大数は、4,372,984色(使用可能なRGB色域の26%)です。 HSVでは、これは最大9,830,041(RGB色域の59%)になります... 2倍以上になります。また、色相に0〜359の範囲を許可すると、HSVでは11,780,015になりますが、HSLでは5,518,160になります。

6
dynamichael

Immaは、プログラマーであり、ソフトウェアエンジニアリングのキャリアに進む前に、美術学校で色彩理論を学んだ男でもある私の2セントをここに投入します。

HSL/HSVは、大量のEdgeケースを処理せずに、色を処理するプログラム機能を簡単に作成するのに最適です。彼らは人間の色の知覚を正確に再現するのにひどいです。

CMYKは、プリンターが依存する顔料に近いため、印刷物のレンダリングに最適です。また、人間の色の知覚を正確に再現することもひどいです(それ自体が悪いからではなく、コンピューターが画面に表示するのが本当に苦手だからです。これについては後ほど詳しく説明します)

RGBは、人間の視覚を効果的に正確に反映する、テクノロジーで表現されている唯一のカラーユーティリティです。 LABは基本的に、内部でRGBに解決しているだけです。また、画面上のリテラルピクセルはRGBの表現であると考えることも価値があります。つまり、実際に表示されるときに、操作する他の色空間はすべてRGBに解析されます。本当に、仲介者を切り取って、ほとんどすべての場合にそれを使用するのが最善です。

プログラミングの意味でのRGBの問題は、表現が本質的に立方体であるのに対し、HSL/HSVは両方とも半径で解決されるため、プログラムで「カラーホイール」を作成するのがはるかに簡単になることです。 RGBは、データ表現の観点から3次的に解決されるため、処理するコードの膨大な山を書かずにこれを行うことは非常に困難です。ただし、RGBは人間の視覚を非常によく反映しており、モニターを構成する実際のハードウェアの基本でもあります。

TLDR;色を使いたくて余分な作業を気にしない場合は、常にRGBを使用してください。 「十分に良い」カラーユーティリティを使い果たして、後で実際には何もできないバグチケットを修正したい場合は、HSL/HSVを使用してください。印刷を行う場合は、CMYKを使用します。これは、CMYKが優れているからではなく、使用しないとプリンターが詰まってしまうためです。


余談ですが、プログラマーではなくアーティストのように色彩理論にアプローチする場合、色に関する技術仕様が実際に与えるものとは非常に異なる認識を見つけることになります。あなたが作成したカラーユーティリティを使用する人は、少なくとも色彩理論の確かな基礎教育を受けている場合は、基本的にこれらの方針に沿って考えることになることを覚えておいてください。基本的に、アーティストが色の概念にアプローチする方法は次のとおりです。

芸術的な観点からの色は、基本的に5つの平面のスケールで表されます。

  • 顔料(または色相)。これは、実際に求めている基本的な色です。
  • 純粋な白と混合された顔料である色合い。
  • 純粋な黒と混合された顔料であるシェード。
  • トーン(または「トゥルートーン」)。これは、さまざまな程度のグレーと混合された顔料です。
  • 補色と混合された顔料であるリッチトーン(または「アースカラー」)。リッチトーンは本質的に反対の組み合わせであるため、カラーホイールには表示されません。また、物理メディアのわずかな不一致により、マシンで効果的に複製できないため、視覚的に「トゥルートーン」とはわずかに異なります。

このパラダイムをプログラムで表現する際の典型的な問題は、豊かなトーンを表現するための良い方法が実際にはないということです。ブラシストロークの微妙な不一致により、補数間の根本的な差異が構成に反映されるため、マテリアルアーティストは基本的にペイントでこれを行うのに問題はありません。同様に、デジタル写真とビデオはどちらもこれを拾うのが苦手ですが、実際のアナログフィルムはそれほど苦手ではありません。カメラのビューポート内のすべてのテクスチャがその一部を取得するため、コンピュータグラフィックスよりも写真やビデオに反映されますが、実際に同じものを表示するよりもかなり少ないです(そのため、実際に撮影することはできません)たとえば、文字通りの外観をハックするための大量のポストプロダクションがない日没の良い写真)。ただし、コンピュータはこれらの不一致を再現するのが得意ではありません。色は基本的に、視覚的にフラットな通常のトーンのように見えるRGBピクセルマッピングの一貫したマトリックスに解決されるためです。豊かな色調を正確に反映する計算色空間はありません。これは、色を空間上で拡散した非反復のランダムな方法でわずかに変化させ、単一の一意の識別子を保持する計算方法がないためです。一意の識別子のないデータとして保存します。

コンピューターでこれを行うための最良の近似は、ある色が別の色と重なるある種の拡散を作成することです。これは、単一のデータベース列で16進コードなどとして表すことができる単一の値に解決されません。それでも、コンピューターは本質的に均一なパターンを反映します。実際の豊かなトーンは、ランダム性と繰り返しのないテクスチャーと分散に依存します。これは、かなりの労力なしではマシンでは実行できません。カラーポップを実際に作成するすべてのアートワークはこの原則に依存しており、それをエミュレートするための大量のサイドワークがないと、基本的に計算表現にアクセスできません(これが、PhotoshopとCorel Painterを使用している理由です。これらは、これらを非常にうまくエミュレートできるためです。少し手間がかかりますが、実行時に効率的ではない多くのフィルタリングを実行するという犠牲が伴います)。

RGBは、芸術的な観点から、他の4つの特性のかなり良い近似です。豊かなトーンをカバーすることはできず、デザインユーティリティを分解してその部分を手作業でマッシュアップする必要があることはほぼわかっています。ただし、RGBでのプログラミングの根本的な問題は、3次元空間に解決したい(立方体であるため)ことであり、2次元ディスプレイに表示しようとしているため、合理的なUIを作成することが非常に困難です。エンドユーザーが直感的に使用できるように、コンピューターのモニターで3番目の軸の深さを効果的に表現する能力が不足しているため、直感的です。


また、光として表される色と顔料として表される色の違いを考慮する必要があります。 RGBは、光として表される色の表現であり、色を表すために照明を混合するために使用される主要な値に対応し、1:1マッピングを使用します。 CMYKは色素沈着スペクトルを表します。違いは、光を同じ量で混ぜると白になり、顔料を同じ量で混ぜると黒になるということです。コンピューターを使用するユーティリティをプログラミングしている場合、ピクセルは本質的にRGB光波を放出するモニター上の単一ノードであるため、光を使用しています。私がCMYKがダメだと言った理由は、それが正確ではないからではなく、それを光として表現しようとすると正確ではないからです。これはすべてのコンピューターモニターに当てはまります。実際のペイント、マーカー、色鉛筆などを使用している場合は、問題なく機能します。ただし、画面上でCMYKを表す場合は、RGBに解決する必要があります。これは、コンピューターモニターの動作方法であるため、ディスプレイでの表示​​方法が常に少しずれているためです。


これはプログラミングフォーラムであり、プログラマーとして質問したので、巨大なサイドタンジェントで立ち去らないでください。ただし、正確さを求めている場合は、視覚的知覚に対して十分に解決するという目的を達成するために、作業がどれほど効果的であるかという点で考慮すべき明確な「技術的ではない」側面があります。ほとんどの計算色空間。結局のところ、カラーユーティリティの目標は、人間の色の知覚の観点から正しく見えるようにすることです。 HSL/HSVはどちらもその点で惨めに失敗します。それらはコーディングが簡単で、その理由だけで目立ちます。締め切りが短い場合は、受け入れ可能な回答です。本当にうまくいくものが必要な場合は、重い作業を行い、このことを検討する必要があります。これは、視聴者がツールを使用するかどうかを決定するときに検討していることです。


あなたのためのいくつかの参照点(私は意図的に技術的な参照を避けています。それらは計算の観点のみを参照しており、実際の基礎となる色の知覚を参照しておらず、おそらくすでにそれらすべてを読んでいます):

色彩理論ウィキ

色相、色合い、色調、色合いの基本的な内訳

アースカラー(または必要に応じてリッチトーン)

配色の基本

5
mopsyd