提问者:小点点

处理中的不同像素相同


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

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

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

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

首先我和Brightnsess一起玩

if(亮度(c 1)==亮度(c 2))

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


共2个答案

匿名用户

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

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)

匿名用户

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