我在Processing工作,我想比较2个不同图像的像素的颜色。
假设我们比较位置10的像素
color c1 = image1.pixels [10]; color c2 = image2.pixels [10];
if(c1 == c2){// so something}
首先我正在玩brightnsess
如果(亮度(C1)==亮度(C2))
一般来说它工作但不完全像我想要的那样,因为像素有点相似但颜色不完全相同。
答案 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)或角,边缘。