如何使用matlab从图像中删除划痕

Asp*_*ife 8 matlab image image-processing

比方说,我有这个图片:

在此输入图像描述

有黑色划痕,我想从我的图像中删除它.我知道这是噪音.我尝试过邻域滤波器和高斯滤波器,但没有成功.

Nik*_*iki 22

如果您知道划痕的位置,则此问题称为修复,并且有非常复杂的算法.因此,一种方法是尽可能好地检测划痕,然后在其上使用标准的修复算法.我在Mathematica中玩了一下你的形象:

首先,我对图像应用了中值滤波器.当你发现自己时,这会消除划痕,但也会删除很多细节.中位数和原始图像之间的差异是一个很好的指标,但是: 中位数和原始图像之间的差异

当我用手动选择的阈值对这个图像进行二值化时,我会得到一个快速且脏的划痕检测器: 二值化

如果您对划痕的外观有更多了解,可以大大改进这种探测器.例如,划痕总是黑暗的吗?他们总是有高对比度吗?它们总是平滑的曲线,即曲率总是低吗? - 可以以某种方式测量这些属性中的每一个,因此您可以将这些测量结果组合到单个图像中并对其进行二值化.

一个小的改进是删除小组件: DeleteSmallComponents

这仍然不完美,但结果足以将其用作修复遮罩: 修补

这也将删除一些细节,但差异更难以发现.

完整的Mathematica代码:

difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]];
mask = DeleteSmallComponents[Binarize[difference, 0.15], 15];
Inpaint[sourceImage, mask]
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您无法访问标准的修复算法(如Navier Stokes或Telea),那么穷人的算法就是在掩码为1的区域中使用中值滤波图像(可能类似于mask*sourceImage + (1-mask)*medialFilteredImageMatlab).根据图像数据,差异可能不值得"真正的"修复算法的额外努力:

穷人的修补

  • 查看有关修复和揭露的"等级线"的学术论文.该技术可以处理相当严重的照片损坏.一些论文:Masnou和Morel的"Level Lines Based Disocclusion"math.univ-lyon1.fr/~masnou/fichiers/publications/icip.pdf Bertalmio,Sapiro,Caselles和Ballester的"Image Inpainting" (2认同)