<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />画像 .jpeg 上で非常に似た色 (たとえばグレー) を持つピクセル グループを識別するにはどうすればよいでしょうか?
これに対しては、いくつかの異なるアプローチが考えられると思います。 1 つの質問は、特定の色 (グレーなど) を探しているのか、それとも特定のピクセルの色が周囲のピクセルと (厳密に) 一致するかどうかを確認したいのかということです。 あなたは、1 つの「ターゲット」色を探すという最初のシナリオについて質問していると思います。 もう 1 つの質問は、常にグレーを探しているのか、それともターゲットの色が変わるのかということです。 なぜそう尋ねるかというと、色は赤、緑、青の 3 つの要素で構成されているからです。 ただし、rgb をグレースケール イメージに変換すると、コンポーネントは 1 つだけになり、コードが単純になります。 カラー画像を扱っていて、灰色ではない色を探していると仮定します。 そうでない場合は、コードを簡素化できます。
ここでは、あなたにとってうまく機能すると思われるアプローチを 1 つ紹介します。 ソース画像を読み取り、探しているターゲットカラーであるターゲット画像を作成し、一方から他方を減算します。 次に、結果を調べて、「同じ」の許容範囲内にあるピクセルを探します。
まず、画像を読み込み、ピクセル値を 3 つのマトリックス (赤、緑、青) として取得します。
imgSource = NewImage("$Sample_Images\クロサイの足跡.jpg");
{ rSource, gSource, bSource } = imgSource << getPixels("rgb");
win = newWindow("ソース画像", imgSource);
次に、一致させたいターゲットカラーを定義します。 この例では灰色を作成しますが、任意の値 (0.0 ~ 1.0) を指定できます。
r値 = 0.5;
g値 = 0.5;
b値 = 0.5;
次に、ターゲットのカラー イメージを表す新しい行列を作成しましょう。 これらのマトリックスは、ターゲット カラーを値として、ソース イメージと同じサイズにする必要があります。
{ wd, ht } = imgSource << getSize();
rTarget = J(ht, wd, rValue);
gTarget = J(ht, wd, gValue);
bTarget = J(ht, wd, bValue);
次に、(色成分ごとに)一方からもう一方を減算してみましょう。
rDiff = abs(rSource - rTarget);
gDiff = abs(gソース - gターゲット);
bDiff = abs(bソース - bターゲット);
ここで、許容範囲を定義します。 これは、私たちがどれだけ「同じ」であるとみなすかです。 2% 以内が同じに十分近いとしましょう。
公差 = 0.02;
これで、差分行列をループして、どの値が許容値よりも小さいかを探すことができます。 これを行うには 2 つの方法があります。 1 つは、r、g、b を調べて、3 つの値がすべて許容値より小さいかどうかを確認することです。 もう 1 つの方法は、3 つの差分マトリックスを 1 つの強度 (グレースケール) マトリックスに結合し、ピクセルごとに 1 つの強度値を調べることです。 個人的にはそのアプローチの方が好きです。 そこで、まずグレースケール行列に変換します。
強度 = 0.30*rDiff + 0.59*gDiff + 0.11*bDiff;
次に、強度マトリックスをループして、各値を許容値と比較します。
for (y = 1、y <= ht、y++、
for (x = 1、x < wd、x++、
if (inten[y,x] < 許容誤差、
// 「同じ」ピクセルが見つかったので、元のピクセルを「赤」にして表示します。
rソース[y,x] = 1.0;
gソース[y,x] = 0.0;
bソース[y,x] = 0.0;
);
);
);
ここで、新しい値を元の画像に戻して、見つかったピクセルを確認できるようにします。
imgSource << setpixels("rgb", {rSource, gSource, bSource});
必要なのはこれだけです。:)
繰り返しになりますが、グレースケール イメージを操作してグレー値を検索する場合、ソースとターゲットの両方で 3 つの行列ではなく 1 つの行列を操作するだけで済むため、作業がより簡単になります。
私がファイル交換に置いた画像サンプルのいくつかを見てみるのもいいかもしれません。 ファイル、 ImageExamples.jslそしてImageDiff.jsl最も役に立つかもしれません。 また、画像の色分析の実行について説明したブログ投稿もいくつかあります。ゾウの足の画像解析。
これがお役に立てば幸いです!
ジョン