matlab中删除照片-ag凯发k8国际
如果您知道划痕的位置,则此问题称为
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).根据图像数据,差异可能不值得“真正的”修复算法的额外努力:
总结
以上是ag凯发k8国际为你收集整理的matlab中删除照片_如何使用matlab从图像中删除划痕的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: c# 带返回值的action_c#委托a