C++ 基于OpenCV的红外图像分割

C++ 基于OpenCV的红外图像分割,c++,opencv,image-processing,computer-vision,infrared,C++,Opencv,Image Processing,Computer Vision,Infrared,假设我有一系列红外图像,任务是将人体与图像中的其他物体隔离开来。问题是其他相对热的物体(如灯及其“热”色调)发出的噪音 简单的阈值方法,如二进制和/或大津,在困难(嘈杂)的图片上效果不好,所以我决定手动进行 结果并不可怕,但我认为可以改进。在这里,我通过HSV的色调值简单地选择像素。或多或少,热像素位于该区域:色调300。我主要关心的是这些粉色像素,它们有时是灯光发出的噪音,但有时是人体的一部分,因此我不能简单地丢弃它们而不对结果造成重大损害:例如,在左图上,这将“破坏”左手的一半,以此类推。

假设我有一系列红外图像,任务是将人体与图像中的其他物体隔离开来。问题是其他相对热的物体(如灯及其“热”色调)发出的噪音

简单的阈值方法,如二进制和/或大津,在困难(嘈杂)的图片上效果不好,所以我决定手动进行

结果并不可怕,但我认为可以改进。在这里,我通过HSV的色调值简单地选择像素。或多或少,热像素位于该区域:色调<50,色调>300。我主要关心的是这些粉色像素,它们有时是灯光发出的噪音,但有时是人体的一部分,因此我不能简单地丢弃它们而不对结果造成重大损害:例如,在左图上,这将“破坏”左手的一半,以此类推。 作为最后的手段,我可以使用一些强大的过滤和侵蚀,但我仍然相信有一种方法可以告诉OpenCV:嘿,我不需要这些粉红色区域,除非它们是一个大的热点集群的一部分。
有什么想法,关键词,技巧,好文章吗?提前感谢

FIR数据可能与温度成单调比例(如果不是线性的话),这将产生灰度图像。
您的示例使用颜色贴图进行着色-颜色仅传达单个通道的实际信息。最好是直接处理灰度图像(可能会将图像重新映射到灰度)


然后,查看是否可以将图像线性化为实际温度刻度,以便像素值表示温度。一旦你这样做了,你应该能够将你的图像钳制到你期望一个人出现的温度范围。查看相机/成像仪的数据表,了解转换公式。

谢谢你的回答,我也有类似的想法。但不管怎样,假设我有一张灰度图像,它仍然可能有与人体的一部分以及其他部分强度相同的区域,除非一个人完全赤裸。我错了吗?所以我会尽量消除灰色的噪音而不是粉色的。因此,我想尝试解决一个更普遍的问题——如何区分作为人体一部分的区域与具有相同强度的其他区域。我想要的太多了吗?:)一旦你能缩小温度范围,你就有了很好的分割。您可以使用ML方法进行分类,使用几何线索,例如透视图等。您的示例图片看起来有一些非常清晰的边缘。你有没有试着去拿那本书?然后,您可以识别连接的组件,并确定哪些组件看起来不像人类。