Dav*_*eep 6 .net c# comparison image pixel
我目前正在做一个项目,在该项目中我需要编写软件来比较由相同区域组成的两个图像并在差异周围绘制一个框。我在几个小时内用 c# .net 编写了该程序,但很快意识到运行起来非常昂贵。这是我实现它的步骤。
创建了一个存储每个像素的 x、y 坐标的 Pixel 类和一个存储像素列表以及宽度、高度、x 和 y 属性的 PixelRectangle 类。
循环遍历每个图像的每个像素,比较每个对应像素的颜色。如果颜色不同,则我会使用该像素的 x,y 坐标创建一个新的像素对象,并将其添加到一个 pixelDifference 列表中。
接下来,我编写了一个方法,该方法递归地检查 pixelDifference 列表中的每个像素,以创建仅包含彼此直接相邻的像素的 PixelRectangle 对象。(很确定这个坏男孩造成了大部分破坏,因为它给了我一个堆栈溢出错误。)
然后,我根据存储在 PixelRectangle 对象列表中的像素计算出矩形的 x、y 坐标和尺寸,并在原始图像上绘制一个矩形以显示差异所在。
我的问题是:我是否以正确的方式解决这个问题?四叉树对这个项目有任何价值吗?如果您能给我提供有关通常如何实现此类目标的基本步骤,我将不胜感激。提前致谢。
你几乎是以正确的方式处理这件事的。如果正确实现,第 3 步不应导致 StackOverflow 异常,因此我会仔细研究该方法。
最有可能发生的情况是,您对 PixelDifference 的每个成员的递归检查正在无限运行。确保跟踪哪些像素已被检查。一旦你检查了一个像素,在检查相邻像素时就不再需要考虑它了。在检查任何相邻像素之前,请确保它本身尚未被检查。
作为跟踪已检查的像素的替代方法,您可以在检查后从 PixelDifference 中删除项目。当然,这可能需要改变实现算法的方式,因为在检查列表时从列表中删除元素可能会带来一系列全新的问题。