0

グレースケール画像に色を追加しようとしています。正確な色表現である必要はありませんが、異なるグレーの色合いに色を追加します。これは、画像内のさまざまな関心領域を識別するためのものです。たとえば、植生の領域は同様の灰色の色合いになる可能性が高く、この値の範囲に色を追加することで、どの領域が植生で、どの領域が水であるかなどを明確にする必要があります。

画像から色を取得して色オブジェクトとして保存するためのコードがありますが、これは値を変更する方法を提供していないようです。たとえば、グレー値が 85 未満の場合は赤、86 ~ 170 の場合は緑、171 ~ 255 の場合は青になります。これがどのように見えるかはわかりませんが、理論的には、結果の画像により、ユーザーはさまざまな領域を識別できるはずです。

ピクセル値を取得するための現在のコードは次のとおりです。

int total_pixels = (h * w);
Color[] colors = new Color[total_pixels];

for (int x = 0; x < w; x++)
{
  for (int y = 0; y < h; y++)
  {
    colors[i] = new Color(image.getRGB(x, y));
    i++;
  }
}
for (int i = 0; i < total_pixels; i++)
{
  Color c = colors[i];
  int r = c.getRed();
  int g = c.getGreen();
  int b = c.getBlue();
  System.out.println("Red " + r + " | Green " + g + " | Blue " + b);
}

どんな助けにも感謝します!どうもありがとう

4

2 に答える 2

2

色をグレースケール スキームから任意の色に変換する独自の方法を選択する必要があります。

あなたが与えた例では、このようなことができます。

public Color newColorFor(int pixel) {
    Color c = colors[pixel];
    int r = c.getRed();  // Since this is grey, the G and B values should be the same
    if (r < 86) {
        return new Color(r * 3, 0, 0);  // return a red
    } else if (r < 172) {
        return new Color(0, (r - 86) * 3, 0); // return a green
    } else {
        return new Color(0, 0, (r - 172) * 3); // return a blue
    }
}

最適なアルゴリズムを得るには、少し試してみる必要があるかもしれません。上記のコードを使用すると、実際には画像がかなり暗く薄汚いものになると思います。明るい色の服を着た方がいいでしょう。たとえば、上記のコードのすべての 0 を 255 に変更すると、イエロー、マゼンタ、シアンの色合いが得られます。これには多くの試行錯誤が必要です。

于 2013-11-13T23:10:33.757 に答える
0

Java2D を参照することをお勧めします。人生を豊かにするクラスがたくさんあります。それを無視すると、車輪を再発明することになるかもしれません。

以下に、できることの短いショーケースを示します。

    int width = 100;
    int height = 100;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    image.getRGB(x, y);
    Graphics2D g2d = (Graphics2D)image.getGraphics();
    g2d.setColor(Color.GREEN);
    g2d.fillRect(x, y, width, height);
于 2013-11-13T23:04:38.243 に答える