問題タブ [cielab]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
214 参照

rgb - データの色空間 (RGB) プロファイルを確認するにはどうすればよいですか?

私は標準的な jpeg 画像を持っています。これは、商用ソフトウェア内で他のデータに色を付けるために使用します (画像の色をデータにマッピングすることによって)。次に、このソフトウェアからカラー データを XYRGB ASCII ファイルにエクスポートします。つまり、各行の最初の 2 列にデータ情報を保存し、最後の 3 列に 3 つの RGB カラーを保存します。

色を CIELab または CIELuv に変換する必要があるため、RGB 値がどの色空間 (RGB、sRGB、ガンマ、ホワイトポイントなど) に含まれているかを正確に知る必要があるようです。 ? それとも、特定のプロファイルが適切な近似値であると想定できますか?

(注:私が使用した商用ソフトウェアの会社は、詳細を教えてくれませんでした...)

0 投票する
1 に答える
248 参照

colors - Delta CMC アルゴリズム (色差の計算用) が対称ではないのはなぜですか?

hereおよびhere で説明されているように、Delta CMC アルゴリズム (CIELAB 空間での色差) を実装しています。

最初の色の色相は計算されているのに、2 番目の色の色相は計算されていないことに驚きました。これにより、アルゴリズムが非対称になる可能性が高くなります。これは正しいですか?

2 色の色相を平均して、代わりに使用する方がよいでしょうか?

0 投票する
1 に答える
2490 参照

c++ - マルチチャンネル OpenCV Mat の要素へのアクセス

これは、stackoverflow に関する私の最初の投稿です。すべてを正しく行うことを願っています。そうでない場合は申し訳ありません。

単一の RGB 値を CIE L*a*b* 色空間に変換する関数のコードを書いています。この関数は、3 つの float 配列 ([0-255] の値を持つ RGB チャネル) を取り、L*a*b* 値を持つ 3 つの float 配列を出力に与えることになっています。そのために、cvtColorOpenCV で利用可能な関数を使用しています。

openCV Web サイトで提案されているように、コンストラクターによって Mat 構造 ( で必要cvtColor) を作成しています。

私の問題は、コードが正しく実行され、変換が実行されると思いますが、Mat 構造に含まれる値を取得できないことです。

これが私のコードです:

ご覧のとおり、at関数によって Mat 構造からすべてのチャネルを抽出し、ベクトルから個別にアクセスしています。これは多くの場所で解決策として提案されています (そのうちの 1 つ)。

しかし、このコードを実行すると (入力ベクトルは {123,10,200} でした) cout、Mat 構造の出力が正しく取得されます (そこからアルゴリズムが正しく変換されます) が、抽出された値が間違っていることがわかります。

誰が私が間違っているのか考えていますか?

ご協力ありがとうございました!

0 投票する
2 に答える
265 参照

image-processing - 順序付きディザリングの CIE-L*a*b* 色空間でどの色が「低い」および/または「高い」かを識別する方法は?

sRGB をCIE-L*a*b*色空間に変換する関数をいくつか実装しました。

さて、それをディザリングに使用したいと思いますが、どの色が「低い」色で、どの色が「高い」色であるかを正確に識別する方法がわかりません。

1 次元の色空間 (グレー スケール) でディザリングする場合は簡単です。誤差拡散ディザリングを使用する場合、使用するディザリング マトリックスの種類 (Floyd-Steinberg など) に応じて、パレットから最も近いグレー スケール値を計算し、周囲のピクセルに誤差を追加します。これは 1 次元なので、非常に簡単です。値は 1 つだけです。しかし、これで 3 次元の色空間がで​​きました。各座標に個別に誤差を追加するだけでよいでしょうか?
(現時点では、これが私にとって意味のある唯一の方法です。)

順序付けされたディザマトリックスでディザリングする場合、事態はさらに複雑になります。順序付けられたディザ マトリックスは、しきい値を定義します。このためには、ディザリングしようとしている現在のピクセルに関して、パレットの「低い」ピクセル値と「高い」ピクセル値を知る必要があります。ここで、両方のピクセルまでの距離を計算します。ディザ マトリックスからのしきい値によって、隣接するピクセルとの間のどの値を決定した後、ピクセルはより低いピクセルまたはより高いピクセルにディザリングされます。
(もちろん、実際の実装は、パレットのグレースケールカラー値の量に対して適切に選択されたマトリックスを使用することにより、それを計算するよりも最適です。また、等間隔のカラー値を持つパレットを選択するなど)
これも、1 次元の色空間では非常に簡単です。しかし、CIE-L*a*b* では、「より高い」または「より低い」値自体はありません。

輝度だけを使用してしきい値マトリックスを適用するのはかなり間違っているようです。パレットに同じ輝度の 2 つの色があるかもしれません。

0 投票する
0 に答える
331 参照

java - Android 画像比較

私は2つの画像を比較する操作を行う必要があるAndroidアプリケーションに取り組んでいます.比較する前に、RGBからCIELABへの画像変換を行い、各画像から得られた値を比較する必要があります.値が同じ場合->画像画像が同じでない場合は同じです。ヒントを教えていただけますか?(ビットマップ画像を CIELAB などに変換する方法)

0 投票する
0 に答える
92 参照

rgb - 密度分布を反転するには?

私は RGB キューブを使用して、非常に異なる色の最大パレットを作成しようとしています。そこで、黒と白の頂点の間の対角線に垂直な RGB 立方体のスライスを取り、CIELab 色距離式を適用します。最も彩度の高い色、つまり最も興味深い色があるエッジではうまく機能しますが、あまり興味のない色である中心に近づくにつれて、密度は本来のように減少するのではなく劇的に増加します. 中央で濃度を0にしたい。

中心が最大密度ではなく最小密度になるように、密度分布を反転することからどこから始めればよいかわかりませんか? 私の唯一の考えは、独自の確率フィールドを作成し、モンテカルロ法を使用することです。私はそれを1Dで行う方法を知っていますが、2Dでは知りません。

0 投票する
1 に答える
42 参照

colors - 指定された色と距離で同じピクセルを検出できません

2 つのポイント p0 と p1 がユークリッド距離 d1 にあり、指定された 2 つのピクセル/ボクセルの Lab カラー値が (L0,a0,b0) と (L1,a1,b1) であるとします。与えられた 2 つのポイントを含む剛体オブジェクトの位置を変更すると、それらのポイントを同じ距離 (mm) で同じ Lab カラー値で検出することはできません。私は pcl を使用して、3D オブジェクト認識のコンピューター ビジョン タスクを実行しています。ここで、距離 d1 で以前に検出された 2 点とその色を見つけようとすると、指定された 2 点からオブジェクトの位置と向きを変更しても検出されず、ここのボクセルが分析されました。私が使用しているkinectカメラには同じ2点が見えないというオブジェクトの向きがありません。

上記は、私の C++ プログラムの主要部分です。ここで、このステップは現在のオブジェクトを、その座標を a,b,c ベクトルで、色値を ac,bc,cc ベクトルで分析します。ここで、arri、arr1.. は、前のオブジェクトからのポイントのインデックスを含むマップです。ここでは、指定されたポイント パターン p0、p1、p2、p3、p4 が検出されるたびに、ループから出てきます。これを実行すると、期待どおりに正しく動作しません。オブジェクトの位置と向きが変更されると、指定された 4 ボクセルの a、b カラー値も (ラボ カラーから) 変更され、その (指定された 2/3/n ボクセル) 距離も以前と同じままではないことに疑いがあります。物理学の測定問題と同じように保存されます。ここでの私の主な混乱は、ピクセル/ボクセルの位置が変更されたときに a と b の値が変化することですか? 明るさの値は環境によって変化する可能性があるため、L 値は使用していません。