image - 如何使用matlab去除图像上的划痕

标签 image matlab image-processing

假设我有这张图片 this :

enter image description here

带有黑色划痕,我想将其从图像中移除。我知道这是噪音。我试过邻域过滤器和高斯过滤器但没有成功。

最佳答案

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

首先,我对图像应用了中值滤波器。正如您自己发现的那样,这会消除划痕,但也会消除很多细节。不过,中值图像和原始图像之间的差异可以很好地指示您的划痕: difference between median and original image

当我使用手动选择的阈值将此图像二值化时,我得到了一个快速且脏的划痕检测器: Binarized

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

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

这仍然不完美,但结果足以将其用作修复蒙版: inpainting

这也会删除一些细节,但差异更难发现。

完整的 Mathematica 代码:

difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]];
mask = DeleteSmallComponents[Binarize[difference, 0.15], 15];
Inpaint[sourceImage, mask]

编辑:

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

Poor man's inpainting

关于image - 如何使用matlab去除图像上的划痕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8645515/

相关文章:

matlab - 使用 detectorMSERFeatures 时出错

python - 短划线图像的模糊部分

image - R:将 alpha 值添加到 png-image

python - 使用 Mahotas 读写图像

xcode - 优化 iPad 上多张图片的加载

matlab - 在opencv中实现imclose(IM,SE)

matlab - 退出\返回主函数 - Matlab

c++ - 将图像重新整形为 3 列矩阵 matlab 与 openCV

html - 如何在环绕文本的中间对齐图像

html - 与其他图像相比图像的响应尺寸