运动检测的颜色相似性
Color resemblance for motion detection
给定 2 个连续帧,如何搜索发生变化的像素?
我尝试了以下方法:
if (old != null)
{
for (int i = 0; i < b.Width; i++)
{
for (int j = 0; j < b.Height; j++)
{
if (!b.GetPixel(i, j).Equals(old.GetPixel(i, j)))
s.SetPixel(i, j, b.GetPixel(i, j));
else
s.SetPixel(i, j, Color.White);
}
}
}
其中"old"是前一帧,"s"是新帧。该代码基本上将没有变化的像素绘制成白色。
但是由于网络摄像头产生的帧质量非常低,几乎所有像素都发生了变化。
我怎样才能消除没有改变的像素"greatly"?
一种非常基本的方法是将您的颜色像素转换为基于 0 - 255 的灰度值。
所以你可以将你的像素作为一个整数进行比较,并产生一些增量误差差异。
考虑这种将颜色转换为整数灰度值的方法
private static int GreyScaleRange(Color originalColor)
{
return (int)((originalColor.R * .3) + (originalColor.G * .59)
+ (originalColor.B * .11));
}
所以你应该做
而不是做 equal function
int deltadifference = 5 ;
if (Math.abs((GreyScaleRange(b.GetPixel(i, j)) - (GreyScaleRange(old.GetPixel(i, j)) > deltadifference)
s.SetPixel(i, j, b.GetPixel(i, j));
else
s.SetPixel(i, j, Color.White);
给定 2 个连续帧,如何搜索发生变化的像素? 我尝试了以下方法:
if (old != null)
{
for (int i = 0; i < b.Width; i++)
{
for (int j = 0; j < b.Height; j++)
{
if (!b.GetPixel(i, j).Equals(old.GetPixel(i, j)))
s.SetPixel(i, j, b.GetPixel(i, j));
else
s.SetPixel(i, j, Color.White);
}
}
}
其中"old"是前一帧,"s"是新帧。该代码基本上将没有变化的像素绘制成白色。 但是由于网络摄像头产生的帧质量非常低,几乎所有像素都发生了变化。 我怎样才能消除没有改变的像素"greatly"?
一种非常基本的方法是将您的颜色像素转换为基于 0 - 255 的灰度值。 所以你可以将你的像素作为一个整数进行比较,并产生一些增量误差差异。
考虑这种将颜色转换为整数灰度值的方法
private static int GreyScaleRange(Color originalColor)
{
return (int)((originalColor.R * .3) + (originalColor.G * .59)
+ (originalColor.B * .11));
}
所以你应该做
而不是做 equal function int deltadifference = 5 ;
if (Math.abs((GreyScaleRange(b.GetPixel(i, j)) - (GreyScaleRange(old.GetPixel(i, j)) > deltadifference)
s.SetPixel(i, j, b.GetPixel(i, j));
else
s.SetPixel(i, j, Color.White);