色空間の個人的な理解

色空間は、その名前が示すように、色で構成された空間です。色空間に関する私の個人的な基本的な見解をここに書き留めます。

私が初めて色空間に触れたのは、女神Pを美しくするためのPSの独学時代でした~その後、顔をさらに美しくするためにブラシを使ったときに、またこんなものを見つけましたPS

いつもの

ショック!たくさんの色の中から希望のTATを選択するにはどうすればよいですか


希望の色を正確に見つけるにはどうすればよいでしょうか? 人々はさまざまな色をさまざまな方法で組み合わせて、さまざまな色空間を形成します。各色は、色空間内で固定のアナログおよびデジタル表現を持つことができます。異なる色空間は異なる方法で定義されます。

色をどうやって表現するのか?たとえば、上に示した RGB カラーです。赤(Red、R)、緑(Green、G)、青(Blue、B)で構成されます。赤、緑、青は光の三原色であり、この三色を座標系のX軸、Y軸、Z軸とみなしてRGB表現の色空間を構成します。このほか、色相、彩度、明度から構成されるHSB色空間や、印刷用のCMYK色空間などがあります。いくつかの一般的な色空間の解釈を以下に示します。


1. RGB 色空間
中学校の理科では、光の三原色は赤、緑、青であると習います。RGB が使用するのは加法混色であり、光の割合を記述することによって色を定義します。srgb、Adobe rgb などの一般的な色空間は、これに基づいて開発されています。そしてRGBAはRGBをベースにアルファ透明度チャンネルを追加したものです。


2. CYMK 色空間は
、一連の印刷製品デザイン ソフトウェアで比較的一般的で、RGB と同様の混色方法を採用していますが、インクの混色に使用される点が異なります。その 4 つの原色はシアン、マゼンタ、イエロー、ブラックです。印刷物は反射光を利用して色を反射するため、RGBとは異なる減法混色が使用されます。その比較表は次のとおりです
ここに画像の説明を書きます
ここに画像の説明を書きます


3. HSV 色空間
HSV 空間は原色のエイリアシングという手法を使わず、独自の定義で色を表現します。色相、彩度、明度を通じて色情報を記録し、その色空間は次のようになります。
ここに画像の説明を書きます
ここに画像の説明を書きます


4. HSL 色空間
HSV と同様に、明度を明度に置き換えますが、HSL では純色の明度が白色の明度に等しいのに対し、HSV では純色の明度がグレーの明度に相当します。具体的な違いは以下の図からわかります。
ここに画像の説明を書きます


最後に、特に色域の概念について説明しましょう。コンピューターを購入するウェブサイトで、このような写真をよく見かけます。
ここに画像の説明を書きます
(果物工場から撮影)
色域は、カラーモデルと色空間の間の対応関係であり、コーディング方法であり、色も反映しています。表示デバイスは合計を生成できます。さまざまな工場から提供される写真は、その色域が「どれだけ広いか」を証明するものにすぎません。色域は、さまざまなカラーコーディング方式の色域に対応して、次の図に示すように、出力デバイスの色空間と色の範囲を示します。
ここに画像の説明を書きます

各デバイスには独自の色解釈システムと表示範囲があるため、画像の転送時に視覚的な色が異常になる場合があり、その際には色補正が必要になります。


要約すると、異なる色空間は色に異なるコードを与え、各色空間は相互に変換できます。ただし、どのような色空間を使用するかは、実際の状況に応じて調整する必要があります。各色空間にはそれぞれ長所と短所があります。たとえば、画像の彩度を取得する必要がある場合は、HSL カラーに変換する必要があります。空。さまざまなスペースを合理的に使用すると、望ましい効果が得られます。

孟信は何も知りません。初めて投稿します。間違いがあれば修正してください。スプレーしないでください~


参考資料:
色域百度百科事典
Mac 色域テスト
HSL および HSV Wiki
カラーについて - Adob​​e


OpenCV の Mat クラスに関連する知識を少し追加する必要があります。
Mat クラスは、OpenCV に画像情報を保存するためによく使用されます。Mat の本質はマトリックスであり、画像情報を格納する場合、Mat はデータ ヘッダーとデータ ブロックの 2 つの部分に分割されます。
マトリックス ヘッダーには、ピクチャの長さ、幅、チャネル、データ タイプ、その他の情報が記録されます。
マトリクスのデータブロックには画像の情報が記録されており、各画素のデータは数値で表されます。
Mat タイプを新たに初期化する手順の 1 つは次のとおりです。

Mat image(rows,cols,type);

rows: 行 cols: 列 type: データ型
私の知る限り、CV_8UC1、CV_8UC2、および CV_8UC3 にはいくつかの基本的なタイプがあります。末尾の数字はそれぞれチャンネル数を表します。このため、場合によっては、初期化の後に Scalar 属性を使用して各チャネルのデータを初期化することができます。
OpenCV では、 cvtColor 関数を使用して色空間を変換できます。

cvtColor(src,dst,type);

src: 画像入力 Mat
dst: ターゲット Mat
タイプ: 変換方法 COLOR_BGR2GRAY はグレースケール画像を変換します。 COLOR_BGR2HSV は HSV 形式に変換します。 COLOR_BGR2Lab は Lab 形式に変換します。
変換後の出力には imwrite を使用します。
Mat での Scalar 属性へのアクセス順序は R\G\B ではなく B\G\R であることに注意してください。つまり、Scalar(0,255,0) は純粋な緑色のグラフィックスを出力します。
では、Mat の各チャネルの値にアクセスするにはどうすればよいでしょうか? at メソッドを使用できます。

 //image.at<Vec3b>(rows,cols)[tunnel]
 image.at<Vec3b>(1,2)[0] //访问image中(1,2)像素在0通道的B分量

Vec3b は RGB の表現です。つまり、入力画像が RGB タイプであることを意味します (疑わしい?)


おすすめ

転載: blog.csdn.net/weixin_43192572/article/details/82684088