image - 仅保留图像的红/绿/蓝部分

标签 image image-processing language-agnostic

我做了一个非常基本的算法,它只提取图像的红色/绿色/蓝色像素并显示它们。然而,它在某些图像上效果很好,并在某些图像上产生意想不到的结果。就像当我只想保留绿色时,它也保留绿松石色。

绿松石是一种绿色阴影,但它不是我想要显示的颜色。我只想要“视觉上”绿色的东西。

这是一个示例输出,显示出了什么问题:
enter image description here
该算法选取了狗所坐的花盆的绿松石色。 The original image is here

我的算法如下(绿色算法)。所有算法都彼此相似。

void keepGreen() {
  for (int i = 0;  // iterate over the pixels of the image
  i < img.pixels.length;
  i++) {
    float inputRed = red(img.pixels[i]); // extract red
    float inputGreen = green(img.pixels[i]); // extract green
    float inputBlue = blue(img.pixels[i]); // extract blue

    int pixel = -1;

    float outputRed = -1;
    float outputGreen = -1;
    float outputBlue = -1;

    if(inputRed <= inputGreen*0.9 && inputBlue <= inputGreen*0.9){ // check if the pixel is visually green
      outputRed = inputRed; // yes, let it stay
      outputGreen = inputGreen;
      outputBlue = inputBlue;
    }else{ // no, make it gray
      int mostProminent =(int) max(inputRed, inputGreen, inputBlue);
      int leastProminent =(int) min(inputRed, inputGreen, inputBlue);
      int avg = (int) ((mostProminent + leastProminent) / 2);
      outputRed = avg;
      outputGreen = avg;
      outputBlue = avg;
      pixel = color(avg, avg, avg);
    }
    img.pixels[i] = color(outputRed, outputGreen, outputBlue); // set the pixel to the new value
  }
  img.updatePixels(); // update the image
  image(img, WIDTH/2, HEIGHT/2, calculatedWidth, calculatedHeight); // display
}

如何避免这些错误?

最佳答案

尝试分别提高红色和蓝色阈值,即 inputGreen * 0.8 而不是 inputGreen * 0.9 使用类似 Instant Eyedropper 的工具或Pixel Picker验证您不需要的颜色中的 RGB 值,并将其用作反馈来设置消除您不需要的颜色的阈值。

您可能还想在计算中考虑亮度级别。花盆上拾取的像素比花盆上的其他像素更暗

关于image - 仅保留图像的红/绿/蓝部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731858/

相关文章:

java - 缩放和加载非常大的 TIFF 文件

algorithm - 计算一组点的哈希码的最佳方法是什么?

css - 放置在 "div"元素中时不显示 Img

matlab padarray函数

matlab - 如何使用缩减后的数据——主成分分析的输出

java - Swing PixelGrabber - 数据排序

language-agnostic - 一个函数应该只有一个 return 语句吗?

algorithm - 绘制地形图

Android:如何以原始大小显示图像

c# - 在C#中保存图像文件