从图像阵列中提取像素值以进行比较

时间:2018-01-04 16:53:26

标签: arrays image-processing processing rgb image-comparison

我在处理脚本(.pde)中有五十个航拍图像存储在一个数组中。

我想计算绿色'绿色'在每个图像的每个像素中,基于RGB颜色空间,与单独的目标图像进行比较。目的是找出阵列中的五十个图像中的哪一个与目标图像最相似(它们是城市和乡村环境的航拍图像)。我将这个比较基于每个像素的绿色RGB值。

到目前为止,我编写的代码加载了目标和比较图片 - 使用PImage - 并计算了绿色'绿色'在每个图像的每个像素中,使用green方法。 draw中的输出只是让我可视化过程,因为我正在通过它:

//declare variables for outputting images 
PImage p,p1;

//declare test image array
PImage [] q;

//declare naming convention for images
String pre = "Image_";





void setup(){

  size(850,800);
  p = loadImage("LDN.jpg");
  p.resize(width/2, height/2);

  p1 = green(p);

  //load array of comparison images
  q = new PImage[51];
  for(int i = 1; i<q.length; i++)
  {
    q[i]=loadImage(pre+(i) + ".jpg");
  }

  //calculate green value of every pixel in every comparison image in the the array
  for(int j=1; j<q.length; j++)
  {
    q[j].resize(width/2, height/2);
    q[j] = green(q[j]);
  }



}





void draw(){
  image(p,0,0);
  image(p1,0,height/2);
  image(q[13],width/2,0);
  image(q[37],width/2,height/2);
}





PImage green(PImage pin)
{
    pin.loadPixels();

    PImage pout = createImage(pin.width, pin.height, RGB);

    pout.loadPixels();
    for(int i = 0; i<pout.pixels.length; i++)
    {
        pout.pixels[i] = color(0, green(pin.pixels[i]),0);
    }
    pout.updatePixels();

    return pout;    
}

我在处理帮助页面或更广泛的话语中没有找到任何建议用于存储这些值以进行比较的方法。理想情况下,我希望稍后使用Manhattanchamfer距离比较器(如果我使用边缘检测)对它们进行比较。

1 个答案:

答案 0 :(得分:0)

我可以告诉你要做的最好的事情是break your problem down into smaller pieces并将这些作品一次一张。

例如,不要使用20张图像,而是专注于为单张图像创作效果。在考虑在代码中实现这些步骤之前,请用英语写下您要遵循的步骤列表。

有很多不同的方法可以解决这个问题,但我如何处理它的方法如下:

  • 对于图像,循环其像素。
  • 对于每个像素,获取其绿色值。
  • 将该绿色值添加到2D数组中。
  • 也许然后取这个2D数组的总和,或者平均值?

然后你可以开始考虑代码。要循环像素,我会使用get()函数,它接受X和Y参数。或者您可以使用pixels数组。

编写一个带有PImage参数的函数,并返回绿色值的数据结构:2D数组,1D数组或ArrayList,无论如何。这部分实际上取决于您希望以后想要对数据做什么。

在考虑多个图像之前,让它与单个图像完美配合。祝你好运。