从图像列表中选择两个最相似的图像

时间:2016-02-19 09:30:40

标签: c# bitmap compare tile

我正在制作一个程序,将常规图像转换为旧计算机(如Commodore C64)可以显示的基于图块的图像。 抖动和平铺调色板选择代码已经完成,使用LAB颜色和自定义位图对象(表示双精度RGB值)。 但是,生成的图像由1000个8x8像素的图块组成,这些图块无法存储到C64的图块RAM中(只能存储256个唯一的图块)。

我有一个位图列表,其中包含构成图像的1000个图块。我想结合两个看起来相似并重复的图像,直到我最终只得到256。但是,我不知道如何比较两个图像,更糟糕的是,如何在列表中选择两个相似的图像?

老实说,我在回答问题时遇到了问题,因为我甚至不知道应该如何问我的问题,或者更确切地说,我特别面临的问题。但既然我已经说明了我的目标,我希望能够理解我的问题。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我首先要限制颜色的数量。

接下来编写一个测量两个图块之间差异的函数,例如:通过累加颜色通道的差异。

现在从阈值开始并浏览您的图块列表1,构建要使用的图块编号列表2。 list1中的第一个tile索引将始终添加到list2,仅当它与list2中的所有tile比阈值更不同时才是第二个。

依此类推,直到你在list2中超过了256个tile的限制或者已经处理了list1中的所有tile。

使用更小或更大的阈值重复,直到最终在list2中略少于256个tile。

您在搜索期间构建的list2不需要包含位图,而是包含原始列表中的整数索引。当搜索结束时,将list3建立为List,并将新的2d数组建立为list3!

这需要一些时间!

最后,当它原则上工作时,你可以优化测量功能,可能使用不安全的代码或锁定位;还要考虑再次增加颜色数量。这将需要一些实验。

听起来很有趣,一切都很好!!