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).根據圖像數據,差異可能不值得“真正的”修復算法的額外努力:
總結
以上是生活随笔為你收集整理的matlab中删除照片_如何使用matlab从图像中删除划痕的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据统计分析毕业设计_基于大数据分析的
- 下一篇: c# 带返回值的action_C#委托A