C++ 如何检测鸟巢中鸟类的外观?

C++ 如何检测鸟巢中鸟类的外观?,c++,opencv,video,video-processing,C++,Opencv,Video,Video Processing,我对视频处理非常陌生,但我的朋友——生物学家提出了一个有趣的问题 任务 有一个摄像机指向一个特定的鸟巢。镜头很长(数百小时)。任务是给出特定的时间范围,当一只鸟造访鸟巢时 一些问题 特定任务 由于风的作用,图像在抖动,因此背景不是静止的 整体质量不高640x480,对比度不高 这只鸟与背景融为一体 特定于我 我的C++体验生活在未来而不是过去。 OpenCV..好吧,让我们只让它工作就像一天的工作。好的,这是因为我试图让它为Python3.5工作。没用。然后它做到了。但它没有打开一个文件。

我对视频处理非常陌生,但我的朋友——生物学家提出了一个有趣的问题

任务

有一个摄像机指向一个特定的鸟巢。镜头很长(数百小时)。任务是给出特定的时间范围,当一只鸟造访鸟巢时

一些问题
特定任务

  • 由于风的作用,图像在抖动,因此背景不是静止的
  • 整体质量不高640x480,对比度不高
  • 这只鸟与背景融为一体
特定于我

    我的C++体验生活在未来而不是过去。
  • OpenCV..好吧,让我们只让它工作就像一天的工作。好的,这是因为我试图让它为Python3.5工作。没用。然后它做到了。但它没有打开一个文件。无论如何,这就是为什么我切换到C++(更不用说代码运行X倍更快)。
  • 在可视化处理方面几乎没有经验
您可以在github上看到该项目。这里有一个输入视频的示例片段(test_kuku.avi)和
/src/main.cpp
脚本(bw_test_kuku.mp4)的结果

到目前为止我做了什么?

我已将文件转换为灰度,然后应用黑白阈值。在玩了一点之后,我达到了120(从0-255),因为它似乎消除了大部分噪音,而且鸟仍然可见

思想

  • 对数字
    b_比率=黑色像素/(黑色像素+白色像素)
    像素使用某种阈值。这将是很好的,如果它能工作的话,但是只要看输出视频我就可以知道,没有鸟的帧比有鸟的帧具有更高的
    b_比率。但这一想法可能会被部分使用,例如,仅选择b_比率较高的视频部分进行进一步分析

  • 根据相邻像素的颜色更改像素的颜色。这可能有助于进一步消除噪声(您可以在vids/bw_test_kuku.mp4中看到许多小颜色块)

  • 最后一个想法是计算特定像素如何移动的某种向量。你可以看到很多来回运动(从风中)。所以,这应该被忽略,但是当鸟到达时,它会在一个方向上产生一种流动。因此,应该注意到这一点

问题


我希望这个答案不会因为太宽泛而关闭。如果是的话,请给我指出一些方向。我的一般问题是如何解决类似的问题。也许还有具体的代码/算法等。谢谢

当你在寻找短而甜的东西时,试试以下任何一种:

  • 应用高斯滤波器

  • 能量计算-sobel等人

  • 预训练Caffe框架-深度学习框架

    此选项将真正为您提供结果,但您可能需要进行一些预处理

  • 利用您的数据培训深入学习框架


  • @谢谢,现在我真的准备好完成这项任务了!说真的,有很多书都是关于这个话题的,这不是一个容易解决的问题。对堆栈溢出来说太宽了。:)我明白,有什么想法,从哪里开始?我希望这听起来不像是我在要求stackoverflow的人帮我解决这个问题。也许我应该说得更像:“识别运动物体的算法。”虽然我不希望得到更好的响应:)不过谢谢你的笑声。我猜:1)处理视频以获得稳定的视频;我不确定这里的艺术水平,但我想在非静态背景下,这会变得很困难。2) 确定要检测运动的位置(如果获得稳定的视频,可能很容易实现)3)检测运动。如果你不想要假阳性,这可能很难做到。4) 检测它是否是一只鸟;研究水平。例如,这是谷歌关于人脸检测的论文,这需要大量的共同努力和资源。另外,考虑到数据量,请确保它是并行的。
    255 | 255 | 255         255 | 255 | 255  
    ----|-----|----         ----|-----|----
    255 |  0  |  0   ====>  255 | 255 |  0 
    ----|-----|----         ----|-----|----
     0  | 255 | 255          0  | 255 | 255