使用ccv进行图像背景/前景检测

时间:2012-05-11 11:14:40

标签: image image-processing canvas computer-vision

我需要以编程方式确定在图像上叠加文本的最佳位置。换句话说,我需要从背景中告诉前景。我尝试过imagemagick:http://www.imagemagick.org/Usage/scripts/bg_removal。不幸的是,这还不够好。图像可以是几乎任何东西的照片,但通常背景模糊。

我现在想试试liuliu的CCV。代码:https://github.com/liuliu/ccv,演示:http://liuliu.me/ccv/js/nss/

该演示使用看起来像json haar级联来检测面部:https://github.com/liuliu/ccv/blob/unstable/js/face.js

我如何: 1.转换xml haar级联文件以便能够与CCV一起使用 2.为我的目标生成最佳级联(图像上的文本放置) 3.查找CCV的任何文档

最后,还有更好的方法来解决这个问题吗?

编辑:我在这里问过边界问题:https://stackoverflow.com/questions/10559262/programmatically-place-text-in-an-image

1 个答案:

答案 0 :(得分:0)

  
      
  1. 转换xml haar级联文件以便能够与CCV一起使用
  2.   
  3. 为我的目标生成最佳级联(图像上的文字放置)
  4.   
  5. 查找CCV的任何文档
  6.   

我不知道1) (无论如何,哪些XML文件?我猜一些来自opencv?) 或3), 但这是我的看法2)

要制作hara级联láviola& jones,您需要一系列小型训练图像,其中只包含 您想要的对象,例如面部。

每个图像一个对象,背景尽可能小,全部在相同的方向和大小,标准化,因此它们都具有相同的平均亮度和亮度变化。你需要很多训练图像。

您还需要一系列负面训练图像,与正面示例相同的大小/亮度等,仅包含背景。

但是,我怀疑这种方法对你有用:

Haar滤镜的工作原理是识别所有前景物体中常见的矩形亮/暗结构。 所以你想要的前景图像需要有一个共同的结构。

一个haar过滤器级联示例就像这样(非常简化):

  • 是x1处的矩形区域,y1比x2处的区域暗,y2?如果没有 - >不是面孔,如果是 - >继续
  • 是x3处的区域,y3比x4处的区域暗,y4?如果没有 - >不是一张脸 - >如果是,请继续
  • 依旧......

(要在较大的图像中找到面部的位置,可以在图像中为每个可能的位置执行此过滤器。过滤级联非常快速拒绝非面孔,所以这是可行的。)

因此,您的前景对象需要在它们之间具有共同的模式。 对于面部,眼部区域比脸颊区域更暗,嘴巴比下巴更暗,等等。

如果只是旋转面,相同的面滤镜将停止工作。 你不能为树和面构建一个好的过滤器,你绝对不能为一般前景对象构建一个。它们之间没有这种共同的结构。对于每种可能的对象类型,您都需要一个单独的过滤器,因此,除非您的图片仅显示非常有限的类型,否则无法使用