【问题标题】:Faking thermal image camera with aforge or any other .net solution , emgucv, tbeta使用 aforge 或任何其他 .net 解决方案、emgucv、tbeta 伪造热像仪
【发布时间】:2011-04-02 07:00:34
【问题描述】:

我正在模拟热像仪效果。我在一个聚会上有一个网络摄像头指向墙前的人。我使用了背景减法技术并使用 Aforge blobcounter 得到了我想用渐变色填充的 blob。我的问题 = GetBlobsEdgePoints 不返回排序的点云,所以我不能将它与 GDI+ 中的 PathGradientBrush 一起使用来简单地绘制渐变。

  1. 我正在寻找简单、快速的算法来将 blob 跟踪到路径中(可能会出错)。
  2. 一种跟踪 blobcounter 接收到的 blob 的方法。
  3. 建议以其他方式模拟效果。

我快速浏览了 Emgu.CV.VideoSurveillance,但没有让它发挥作用(例如 v1.5,我使用 v2+),但我放弃了,因为人们说它在论坛上很慢。

感谢阅读。

aforge背景去除示例代码

            Bitmap bmp =(Bitmap)e.VideoFrame.Clone();
        if (backGroundFrame == null)
        {
            backGroundFrame = (Bitmap)e.VideoFrame.Clone();
            difference.OverlayImage = backGroundFrame;
        }

        difference.ApplyInPlace(bmp);
        bmp = grayscale.Apply(bmp);
        threshold.ApplyInPlace(bmp);

【问题讨论】:

    标签: c# image blob motion-detection aforge


    【解决方案1】:

    好吧,您能否发布一些 GetBlobsEdgePoints 结果的示例图像,那么如果需要图像处理算法,可能更容易理解哪些类型。

    1)你可以试试贪心算法,先随机选择一个点,将该点标记为“taken”,然后选择最近的未标记为“taken”的点等等。
    您需要找到合适的终止条件。如果可能有多个分离路径,您需要找出点需要多远才能成为分离路径的一部分的定义。

    3) 如果您有静态背景,您可以尝试在两个时移图像之间创建差异,例如相隔 200 毫秒。只需逐个像素地进行差异,并使用 abs(diff) 作为热色图中的索引。这将提供更像移动物体的边缘发光效果。

    【讨论】:

    • 1.我不确定这样的算法是否足够接近一些不错的 fps?什么是终止条件?取两点之间的每个第 n 个像素,看看那里是否有图像? 2. 我为我移除背景的方式添加了一些代码。问题是我需要用颜色图绘制边缘的人,尽管我相信你的想法会产生很好的效果:)
    • 1.速度取决于你有多少点,复杂度是 O(n^2),对于 100 点左右,对于 1000 点你可能会遇到麻烦是相当合理的。然后你可能需要一个网格,也许是 25x25 的正方形,并开始在与你最后一个点相同的网格中找到最近的点,如果最近的点离边缘太近,则在相邻的网格中查找。
    • 其实我现在正在寻找一个不同的解决方案,假设它是一个人(头部和手),我将在 blob 上绘制假径向渐变点,然后使用 getblobimage 方法对其进行掩蔽。
    【解决方案2】:

    这是我要走的方向(目前看起来最好):

    1. 按照我自己的逻辑在斑点上定义一组点(皮肤斑点的颜色应该更暖等)
    2. 在这些点周围绘制渐变

                  GraphicsPath gp=new GraphicsPath();
                  var rect = new Rectangle(CircumferencePoint.X - radius, CircumferencePoint.Y - radius, radius*2, radius*2);
                  gp.AddEllipse(rect);
                  GradientShaper = new PathGradientBrush(gp);
                  GradientShaper.CenterColor = Color.White;
                  GradientShaper.SurroundColors = surroundingColors;
                  drawBmp.FillPath(GradientShaper,gp);
      
    3. 用斑点形状掩盖那些渐变

                  blobCounter.ExtractBlobsImage(bmp,blob,true);
                  mask.OverlayImage = blob.Image;
                  mask.ApplyInPlace(rslt);
      
    4. 用颜色重新映射着色

    tnx 寻求帮助@Albin

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 2013-09-20
      • 2020-02-08
      • 1970-01-01
      相关资源
      最近更新 更多