c++ - 低对比度分割深度图像

标签 c++ opencv computer-vision image-segmentation edge-detection

我正在尝试从这张深度图像中分割手:

enter image description here

我尝试了分水岭、区域增长、抓取,但都失败了,主要是因为没有明显的边缘。我也尝试过锐化图像,但也没有给我很好的效果。

最佳答案

这可能不是您所希望的答案,但它可能会帮助您向前迈进一步。由于我只提供算法提示,因此我将使用 Matlab 而不是 opencv。

由于这不是普通的强度图像,而是深度图像,因此您应该使用场景的隐含几何。此处可以帮助您的关键假设是手放在表面 上。如果您可以估计表面方程,则可以更轻松地检测到手。

[y x] = ndgrid( linspace(-1,1,size(img,1)), linspace(-1,1,size(img,2)) );
X = [reshape(x(101:140,141:180),[],1), reshape(y(101:140,141:180),[],1), ones(1600,1)];
srf=(X\reshape(img(101:140,141:180),[],1)); %// solving least-squares for the 40x40 central patch

 aimg = img - x*srf(1) - y*srf(2) - srf(3); %// subtracting the recovered surface

使用中值滤波器稍微“清理”一下,并应用一个简单的阈值

 medfilt2(aimg,[3 3]) < -1.5

产量

enter image description here

不完全是您所希望的,但我认为这是向前迈出的一步;)


附言,
您可能会找到 Alpert, Galun, Nadler and Basri Detecting faint curved edges in noisy images (ECCV2010) 的作品与您的问题相关。

关于c++ - 低对比度分割深度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832236/

相关文章:

c++ - 插装代码导致无限递归循环

python-3.x - 将图像的一部分叠加到另一幅图像上

python - OCR 的 OpenCV Python 边框去除预处理

opencv - 绘制相机轨迹

c++ - 类重定义 C++ multiple include

c++ - 默认参数提升何时发生?

c++ - 我怎样才能合并 Blob /轮廓

c++ - 将boost数组转换为opencv mat

opencv - 用相机计算运动物体的速度

c++ - 通过 HTTPS 从 POCO StreamCopier 获取文件下载进度