gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:21:28 25 4
gpt4 key购买 nike

假设我有这张图片 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com