我从位图图像中获取RGB颜色列表.现在我想分开最大’近似’相同的数字.
即
245,230,230和235,230,230应视为相同(最大差异为5).
我成功地提取了相同的数字,显然也知道如何找到一个数字中找到最大值,但无法弄清楚如何告诉算法将10-30的差异视为相同的数字.
这是我的代码:
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
if (y < bmp.Height && y > 0)
{
c = bmp.GetPixel(x, y);
if (db.Contains(c.R.ToString() + " " + c.G.ToString() + " " + c.B.ToString()) == false)
{
if (i == 0)
{
db.Add(c.R.ToString() + " " + c.G.ToString() + " " + c.B.ToString());
}
}
else
i++;
}
}
}
foreach (string dbs in db)
richTextBox1.Text = richTextBox1.Text + dbs+Environment.NewLine;
//same amount of numbers not written above are:
richTextBox1.Text = richTextBox1.Text + i.ToString()+ Environment.NewLine;
最佳答案 看来你需要一些这样的伪代码公式:
bSameColors(pixel a, pixel b, uint threshold) =
(Max(Abs(a.R - b.R), Max(Abs(a.G - b.G), Abs(a.B - b.B))) < threshold)
但是,如果要进行一些颜色聚类,请考虑与聚类的平均颜色值进行比较