从灰度图像中删除异常值

Atc*_*old 5 matlab image-processing grayscale kinect

我有一个代表我想要清理的深度信息的图像序列.有一些异常值(强度低于25的值,0-255范围),我希望用一个可接受的替代方案填充(局部特定区域的平均值可能是一个很好的猜测).

有人能看到一个简单的方法吗?我试图使用中值滤波器(滤波器大小为10)用NaN代替不需要的值,但它确实使情况恶化,相反通过用一般平均值代替它们来改善.

基础试验

PS有人已经建议我使用快速小波重建,但我真的不知道从哪里开始......

实施解决方案(到目前为止)

我实现的解决方案(在阅读tmpearceinpaint_nans建议之前)是:

  1. 复制原始图像;
  2. 用一般平均值填充无效像素;
  3. 使用光线10的圆盘使其模糊;
  4. 用我从第3点获得的值替换原始图像中的无效值.
  5. 运行大小为10的中值过滤器.
img2 = img;                                       
img2(img < .005) = mean(img(:));                  
H = fspecial('disk',10);                          
img3 = imfilter(img2,H,'symmetric');              
img4 = img;                                       
img4(img < .3) = img3(img < .3);                  
filterSize = 10;                                  
padopt = {'zeros','indexed','symmetric'};         
IMG = medfilt2(img4, [1 1]*filterSize, padopt{p});
Run Code Online (Sandbox Code Playgroud)

二审

tmp*_*rce 7

我推荐inpaint_nans贡献来自MATLAB File Exchange- 开始你已经通过替换异常值NaN并使用链接从那里开始.

从功能描述:

使用非NaN元素在2维阵列中插入NaN元素.也可以推断,因为它不使用数据的三角测量.Inpaint_nans提供了几种不同的插值方法,可以在精度与速度和所需内存之间进行权衡.目前在inpaint_nans中找到的所有方法都基于稀疏线性代数和PDE离散化.实质上,解决PDE与所提供的信息一致.

万岁可重复使用的代码!

  • 我的想法确切,只有20秒太晚了.+1 (5认同)