相关疑难解决方法(0)

Python 图像处理 - 如何删除某些轮廓并将值与周围像素混合?

我正在做一个带有深度图像的项目。但是我的深度相机有噪音和像素读取失败的问题。有一些点和轮廓(尤其是边缘)的值为零。如何忽略这个零值并将其与周围的值混合?我已经尝试过dilationerosion(变形图像处理),但我仍然无法获得正确的组合。它确实消除了一些噪音,但我只需要消除所有点的零

图像示例:

深度图像

零值是最深的蓝色(我正在使用颜色图)

为了说明我想做什么,请参考这张糟糕的油漆图:

插图

我想摆脱黑点(例如黑色值为 0 或某个值),并将其与其周围混合。是的,我可以使用np.where或 类似功能定位该点,但我不知道如何混合它。也许要应用过滤器?我需要在流中执行此操作,因此我需要一个相当快的过程,也许 10-20 fps 就可以了。先感谢您!

更新 :

除了inpaint还有别的方法吗?我已经寻找了各种修复,但我不需要像修复那样复杂。我只需要将它与简单的线条、曲线或形状和一维混合。我认为inpaint是一种矫枉过正。此外,我需要它们足够快以用于 10-20 fps 的视频流,甚至更好。

python opencv image-processing computer-vision

16
推荐指数
2
解决办法
1122
查看次数

在Matlab中过滤包含NaN的图像?

我有一个2d数组(doubles)代表一些数据,它有一堆数据NaNs.数据的等高线图如下所示:

预过滤

所有的白色空间都是NaNs灰色菱形,供参考,填充的轮廓显示我的数据形状.当我使用过滤数据时imfilt,NaNs显着地咀嚼数据,所以我们最终会得到这样的结果:

置滤波

您可以看到支持集显着缩小.我无法使用它,因为它已经咀嚼了边缘上的一些更有趣的变化(由于我的实验特定的原因,这些边缘很重要).

是否有一个函数可以在一个孤岛中进行过滤NaNs处理边缘,类似于矩形过滤窗口的边缘,而不仅仅是杀死边缘?有点像nanmean功能,除了卷积图像?

这是我的过滤器代码:

filtWidth = 7;
imageFilter=fspecial('gaussian',filtWidth,filtSigma);
%convolve them
dataFiltered = imfilter(rfVals,imageFilter,'symmetric','conv');
Run Code Online (Sandbox Code Playgroud)

和绘制等高线图的代码:

figure
contourf(dataFiltered); hold on
plot([-850 0 850 0 -850], [0 850 0 -850 0], 'Color', [.7 .7 .7],'LineWidth', 1); %the square (limits are data-specific)
axis equal
Run Code Online (Sandbox Code Playgroud)

Mathworks文件交换(ndanfilter.m)中有一些代码接近我想要的,但我相信它只是插NaNs在图像内部的插值,而不是显示这种岛型效果的数据.

注意:我刚刚找到了nanconv.m,它完全符合我的要求,具有非常直观的用法(卷积图像,忽略NaN,非常像nanmean作品).我已经将这部分作为我接受的答案,并将其与其他答案的表现进行了比较.

相关问题

用Python在Nan中高斯滤波图像

matlab filtering nan

8
推荐指数
1
解决办法
4905
查看次数