【问题标题】:Same come different Pixels in Processing处理中的相同像素不同
【发布时间】:2013-10-31 23:02:22
【问题描述】:

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

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

颜色 c1= image1.pixels[10];颜色 c2= image2.pixels[10];

if(c1==c2) { //所以 }

首先我在玩brightnessess

如果(亮度(c1)==亮度(c2))

通常它可以工作,但并不完全符合我的要求,因为像素有点相似但颜色不完全相同。

【问题讨论】:

  • 看看 Examples > video > Capture > FrameDifferencing 示例。而不是像示例中那样比较当前图像和上一个图像,在您的情况下,您将使用两个图像,并且您可以使用非黑色的像素数来“计算”差异。这只是一种基本方法
  • 所以你建议分别取R,G,B值并比较差异,对吧?
  • 是的,但请记住,这是看像素有多么不同,而不是图像在感知上对我们人类有多大不同 :)

标签: colors processing pixels


【解决方案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)

【讨论】:

  • 感谢佩特罗斯。这正是我一直在寻找的。我使用了分别使用 R、G、B 的那个,因为我在亮度方面遇到了一些问题。例如。一些像素可能具有相同的亮度但颜色不同。假设我们有一个鲜红色和另一个鲜蓝色。两者的亮度相同,但不相同..
【解决方案2】:

扩展 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) 或角、边。

【讨论】:

    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 2016-10-03
    • 2021-09-04
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    相关资源
    最近更新 更多