关于图像裁剪算法的困境 - 有可能吗?

时间:2008-10-18 12:41:37

标签: algorithm image-processing computer-vision

我正在使用.NET 3.5(ASP.NET,SQL Server,C#,WCF,WF等)构建Web应用程序,并且我遇到了一个主要的设计难题。这是一个单项目顺便说一句,但我发展的是100%。

我需要设计一个系统,我可以拍摄图像并自动裁剪其中的某个对象,无需用户输入。例如,在道路图片中切出汽车。我已经给了很多想法,我看不出任何可行的方法。我想这个主题是讨论实现这一目标的问题和可行性。最终,我会获得汽车的尺寸(或任何可能的尺寸),然后将其作为参数传递到3D建模应用程序(自定义)中,以渲染3D模型。最后一步更加可行。这是种植问题,这是一个问题。我想到了各种各样的想法,比如获得汽车的颜色,然后围绕那种颜色的轮廓。因此,如果汽车(示例)为黄色,则当图像中有黄色像素时,请在其周围进行跟踪。但如果照片中有两辆黄色汽车,这将失败。

理想情况下,我希望系统完全自动化。但我想我不可能拥有一切。此外,我的技能与我上面提到的(.NET 3.5,SQL Server,AJAX,网页设计)相比,而不是C ++,但我会对任何解决方案持开放态度,只是为了看到可行性。

我也找到了这个专利:US Patent 7034848 - System and method for automatically cropping graphical images

由于

8 个答案:

答案 0 :(得分:2)

这是完成DARPA Grand Challenge所需解决的问题之一。谷歌视频有一个great presentation by the project lead from the winning team,在那里他谈论他们如何解决他们的解决方案,以及其他一些团队如何处理它。相关部分在视频的19:30左右开始,但这是一个很棒的话题,整个事情值得一看。希望它为您提供解决问题的良好起点。

答案 1 :(得分:2)

您所谈论的是一个开放的研究问题,甚至是一些研究问题。解决这个问题的一种方法是通过图像分割。如果您可以安全地假设图像中有一个感兴趣的对象,则可以尝试使用图形 - 地面分割算法。有许多这样的算法,并且它们都不是完美的。它们通常输出分割掩模:二进制图像,其中图形为白色,背景为黑色。然后,您将找到该图的边界框,并使用它进行裁剪。要记住的是,现有的分割算法都不会给你100%的时间。

或者,如果您提前知道需要裁剪的特定类型的物体(汽车,人,摩托车),那么您可以尝试一种物体检测算法。再一次,有很多,也没有一个是完美的。另一方面,如果您感兴趣的对象背景非常混乱,其中一些可能比分段更好。

总而言之,如果您希望继续这样做,您将需要阅读相当数量的计算机视觉论文,并尝试相当数量的不同算法。如果您尽可能地约束问题域,您也将增加成功的机会:例如,将自己局限于少量对象类别,假设图像中只有一个感兴趣的对象,或者将自己限制为某种类型场景(自然,海洋等)。还要记住,即使是解决此类问题的最先进方法的准确性也有很大的提升空间。

顺便说一句,这个项目的语言或平台选择是迄今为止最困难的部分。

答案 2 :(得分:2)

通常用于图像中的面部检测的方法是通过使用Haar分类器级联。可以训练分类器级联以检测任何对象,而不仅仅是面部,但分类器的能力高度依赖于训练数据的质量。

本文由Viola and Jones解释了它的工作原理以及如何进行优化。

虽然它是C ++,但您可能需要查看OpenCV项目提供的图像处理库,其中包括训练和使用Haar级联的代码。您将需要一套汽车和非汽车图像来训练系统!

答案 3 :(得分:0)

我看到的一些最佳尝试是使用大型图像数据库来帮助理解您拥有的图像。这些天你有flickr,它不仅是一个巨大的图像语料库,而且还标有关于图像是什么的元信息。

这里记录了一些执行此操作的项目:

http://blogs.zdnet.com/emergingtech/?p=629

答案 4 :(得分:0)

首先自己分析图像。这样你就可以制定匹配汽车的标准。你可以定义你无法匹敌的东西。

例如,如果所有汽车具有相同的背景,则不必那么复杂。但是你的例子说明了一辆街道上的汽车。可能有停放的汽车。他们应该被承认吗?

如果您可以访问MatLab,则可以使用PRTools等专用软件测试模式识别过滤器。

当我在学习时(很久以前)我使用了Khoros Cantata,发现边缘滤镜可以大大简化图像。

但是,再次,首先在输入上定义条件。如果你不这样做,你将无法成功,因为模式识别真的很难(想想破解验证码需要多长时间)

答案 5 :(得分:0)

我确实说过照片,所以这可能是一辆黑色背景的黑色汽车。我确实想过指定对象的颜色,然后找到该颜色时,跟踪它(高级别说明)。但是,黑色背景中的黑色物体(换句话说没有任何对比),这将是一项非常困难的任务。

更好的是,我遇到过几个带有三维汽车模型的网站。我总是可以使用它,将它粘贴到一个3d模型中,然后渲染它。

3D模型更容易使用,真实世界的照片更难。它很糟糕:(

答案 6 :(得分:-1)

如果我正确读到这个......这就是AI闪耀的地方。

我认为“最简单”的解决方案是使用基于神经网络的图像识别算法。除非你知道汽车在每张照片中都会看到完全相同,否则这几乎是唯一的方法。

如果它完全相同,那么你可以只搜索像素模式,得到边界矩形,然后将图像边框设置为矩形的内边界。

答案 7 :(得分:-1)

我认为如果没有真正的用户告诉程序该怎么做,你将永远不会取得好成绩。可以这样想:当你的程序存在超过1个有趣的对象时,你应该如何决定(例如:2辆车)?如果你想要的对象实际上是背景中的山?如果图片中没有任何兴趣,那么什么都不能选择作为裁剪的对象呢?等等...

话虽如此,如果你可以做假设:只有1个对象存在,那么你就可以使用image recognition algorithms了。
现在我想起来了。我最近接受了关于机器人和机器人研究技术的人工智能的讲座。他们的研究大约是language interaction, evolution, and language recognition。但为了做到这一点,他们还需要一些简单的图像识别算法来处理感知环境。他们使用的一个技巧是制作图像的3D图,其中x和y在正常的x和y轴以及z轴是该特定点的亮度,然后他们使用相同的技术用于红绿色值,和蓝黄色。并且看到他们有一些(相对)容易的东西,他们可以用来从感知的环境中挑选出物体 (我非常抱歉,但是我找不到他们所展示的漂亮图表的链接,这些图表显示了它的运作方式。)

无论如何,关键在于他们对图像识别并不感兴趣(因此他们创造了足够好的 并且使用了不太先进的东西,因此耗费了更少的时间,因此它是可能的为这项复杂的任务创造简单的东西。

任何好的图像编辑程序都有某种魔杖,它会通过适当的调整选择您指向的感兴趣的对象,也许值得您花时间去研究那也是。

所以,它基本上意味着你:

  • 必须做出一些假设,否则会非常失败
  • 可能最适合使用AI的技术,更具体地说是图像识别
  • 可以查看paint.NET及其算法的魔杖
  • 尝试使用照片在图像中间某处感兴趣的对象这一事实

..但我不是说这是你的问题的 解决方案,也许可以使用更简单的东西。

哦,我将继续寻找这些链接,他们提供了一些关于这个主题的非常有价值的信息,但我不能保证任何事情。