8

趣味のプロジェクトとして、画像ビットマップを指定するとクロスステッチ パターンを PDF として作成するプログラムを作成します。Mac で Cocoa/Objective C を使用します。

ソース ビットマップは通常 24bpp 画像ですが、数百万色の利用可能な色のうち、クロスステッチ スレッドとして存在するのはごくわずかです。スレッドにはさまざまな種類があります。DMC は最も広く利用されており、さまざまな Web サイトから RGB 値としてほぼすべての範囲を利用できます。たとえば、これが1 つです。

DMC#  Name               R   G   B
----- ------------------ --- --- ---
blanc White              255 255 255
208   Lavender - vy dk   148  91 128
209   Lavender - dk      206 148 186
210   Lavender - md      236 207 225
211   Lavender - lt      243 218 228
      ...etc...

私の最初の問題は、画像内のピクセルからの RGB の開始点から、DMC セットから利用可能な最も近い色を選択することです。最も近い DMC 色を数学的に見つけ、それが色としてもぴったり合うことを確認する最良の方法は何ですか?

私は Cocoa を使用しますが、投稿するコードには疑似コード (または Java も!) を自由に使用してください。

4

6 に答える 6

10

LAB色空間を使用して、ユークリッド距離が最も近い色を見つけます。RGB色空間でこれを行うと、直感に反する結果が得られます。(またはHSLカラースペースを使用します。)

したがって、各ピクセルを繰り返し処理して、選択した色空間内で最も近い距離の色を見つけます。一部の色空間(たとえば、色相を使用する色空間)では、距離を円形に計算する必要があることに注意してください。

(ほとんどの色の量子化は実際にパレットを選択することを中心に展開しますが、それはあなたのケースではすでに処理されているので、より一般的な量子化手法を使用することはできません。)

また、この質問をチェックしてください。

CocoaでHSBの色相を見つけるには、NSColor.hで宣言されているgetHueメソッドを使用できるようです。

ただし、この手法を使用して画像をクロスステッチのデザインに変換するだけでは、実際に画像をステッチするのは非常に困難になります。それは、クロスステッチの目的をやや損なう、単一ピクセルのカラーフィールドでいっぱいになります。

于 2009-03-07T22:07:28.167 に答える
3

これは色の量子化と呼ばれ、多くのアルゴリズムが利用可能です。

非常に基本的なことの1つは、RGB色を空間内の点として扱い、色間の単純な古いユークリッド距離を使用して、それらがどれだけ「近い」かを把握することです。人間の目はこの空間のさまざまな場所でさまざまな感度を持っているため、これには欠点があります。そのため、このような距離は、人間が色を認識する方法にうまく対応しません。さまざまな重み付けスキームを使用して、その状況を改善できます。

于 2009-03-07T22:03:06.147 に答える
1

ユーティリティppmquantのセットからアプリケーションのソースを取得しますnetpbm

于 2009-03-07T22:17:22.057 に答える
1

他の人は、色の量子化のためのさまざまな手法を指摘しています。Markov Random Fields などの手法を使用して、隣接するピクセル位置でスレッドの色を切り替えるシステムにペナルティを課すことができます。Boykov.

これらのいずれかを使用するには、データ要素は入力色、ラベルは一連の糸の色、データ項は bzlm によって提案された LAB 空間のユークリッド距離のようなもの、近傍項は切り替えのペナルティとなります。糸の色。

于 2009-03-07T22:37:16.067 に答える
-1

色操作の正確さの関連性に応じて、色空間を考慮することを忘れないでください。これについては多少勉強しましたが、写真が趣味なので、まだすべてについて少し混乱しています。

ただし、前述のように、可能な限り LAB を使用します。これは、(afaik) 色空間に依存しないためです。他のすべての方法 (RGB/HSL/CMYK) は、定義された色空間がなければ (理論的には) 何の意味もありません。

たとえば、RGB は 3 つのパーセンテージ値 (0 ~ 255 => 0 ~ 100%、8 ビットの色深度) です。したがって、RGB トリプレットが (0,255,0) の場合、「緑のみ、可能な限り多く」に変換されます。それで、質問は「赤はどのくらい赤ですか?」です。これは、色空間が答える質問です。sRGB 100%-緑は、 AdobeRGB 100%-緑ほど緑ではありません。それは同じ色合いでさえありません!

これがオフトピック側に行った場合は申し訳ありません

于 2009-03-07T22:36:32.590 に答える