【发布时间】:2011-03-19 15:34:41
【问题描述】:
这个问题在某种程度上与语言无关,但我选择的工具恰好是一个 numpy 数组。
我正在做的是通过 PIL 获取两个图像的差异:
img = ImageChops.difference(img1, img2)
我想找到包含从一张图片到另一张图片变化的矩形区域。当然有内置的.getbbox() 方法,但是如果有两个区域发生变化,它将从一个区域返回一个框到另一个区域,如果每个角落只有1个像素变化,它将返回整个图像。
例如,考虑以下情况,其中o 是一个非零像素:
______________________
|o ooo |
| oooo ooo |
| o |
| o o |
| |
| oo o |
| o o ooo |
| oo ooooo |
| ooo |
| o |
|____________________|
我想获得 4x4 元组,其中包含每个非零区域的边界框。对于
的边缘情况oooo
o
o o
结构,我并不十分担心如何处理 - 将两个部分分开或放在一起,因为倒 L 形的边界将完全与单个像素的边界重叠。
我从未在图像处理方面做过如此先进的事情,所以我想在真正写任何东西之前获得一些输入(如果我已经在使用的模块中有预先存在的方法,我欢迎他们!)。
我的伪代码版本是这样的:
for line in image:
started = False
for pixel in line:
if pixel and not started:
started = True
save start coords
elif started and not pixel:
started = False
save end coords (x - 1 of course)
这应该给我一个坐标列表,但是我必须确定这些区域是否是连续的。我可以通过图形类型的搜索来做到这一点吗? (上学期我们在算法中做了很多 DFS 和 BFS)当然我想我可以代替/结合我以前的循环来做?
我不会在“大”图像上执行此操作 - 它们是从网络摄像头中提取的,而我目前拥有的最好的图像是 640x480。最多我会做 720p 或 1080p,但这对于未来来说已经足够远了,这不是一个真正的问题。
所以我的问题是:我是走在正确的道路上,还是偏离了方向?更重要的是,是否有任何内置功能阻止我重新发明轮子?最后,是否有任何我应该查看的好资源(教程、论文等)对这里有所帮助?
谢谢!
【问题讨论】:
标签: python language-agnostic image-processing numpy python-imaging-library