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

如果您知道划痕的位置,则此问题称为

inpainting,并且存在非常复杂的算法.因此,一种方法是尽可能好地检测划痕,然后在其上使用标准的修复算法.我在Mathematica中玩了一下你的形象:

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

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

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

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

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

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

完整的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)* Matlab中的medialFilteredImage).根据图像数据,差异可能不值得“真正的”修复算法的额外努力:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部