同样来自处理中的不同像素

时间:2013-10-31 23:02:23

标签: colors processing pixels

我在Processing工作,我想比较2个不同图像的像素的颜色。

假设我们比较位置10的像素

  

color c1 = image1.pixels [10]; color c2 = image2.pixels [10];

     

if(c1 == c2){// so something}

首先我正在玩brightnsess

  

如果(亮度(C1)==亮度(C2))

一般来说它工作但不完全像我想要的那样,因为像素有点相似但颜色不完全相同。

2 个答案:

答案 0 :(得分:1)

如果你想比较颜色,你可能最好比较三个基本颜色而不是“颜色”的实际数字。因此,而不是

if(c1 == c2) 

你比较两个大数字,比如13314249,你可以去

if(red(c1) == red(c2) && green(c1) == green(c2) && blue(c1) == blue(c2)) 

您可以比较0到255之间的数字,可以从颜色中获得红色或绿色或蓝色的可能值。至于“有点相似”的颜色,您可以设置一个阈值,低于该阈值的任何差异将被视为可忽略不计,因此颜色是相同的。像这样:

int threshold = 5
if(abs(red(c1) red(c2)) < threshold && abs(green(c1) - green(c2)) < threshold && abs(blue(c1) == blue(c2)) < threshold)

请记住,你必须采取绝对的差异!这样,如果你降低阈值,只有非常相似的颜色被认为是相同的,而你增加它可以认为不同的颜色是相同的。该阈值数量取决于您的喜好!

这也适用于您的亮度示例......

int threshold = 5
if(abs(brightness(c1) - brightness(c2)) < threshold)

答案 1 :(得分:0)

延伸Petros的答案。通常,当我比较图像像素时,我会进行标准化,以便代码可以处理不在标准范围0-255范围内的图像。当您对图像进行许多操作时,要记住当前用于缩放目的的范围,这也很好。

MAX_PIXEL=255 //maybe range is different for some reason
MIN_PIXEL=0

pixel_difference = 10
threshold = pixel_difference/(MAX_PIXEL-MIN_PIXEL)

if ( abs( (brightness(c1)-brightness(c2))/(MAX_PIXEL-MIN_PIXEL))< threshold ) {
  //then the pixels are similar.
}

有时你可以通过转换到不同的色彩空间来获得更多的基础。

根据您手头的任务,您可以构建一个可以随时间变化的背景模型,或者比较更高级别的全局特征,例如直方图或局部特征,例如尺度不变特征变换(SIFT)或角,边缘。