matlab中删除照片_如何使用matlab从图像中删除划痕
如果您知道劃痕的位置,則此問(wèn)題稱為
inpainting,并且存在非常復(fù)雜的算法.因此,一種方法是盡可能好地檢測(cè)劃痕,然后在其上使用標(biāo)準(zhǔn)的修復(fù)算法.我在Mathematica中玩了一下你的形象:
首先,我對(duì)圖像應(yīng)用了中值濾波器.正如您自己發(fā)現(xiàn)的那樣,這可以消除劃痕,但也會(huì)消除很多細(xì)節(jié).中位數(shù)和原始圖像之間的差異是一個(gè)很好的指標(biāo),但是:
當(dāng)我用手動(dòng)選擇的閾值對(duì)這個(gè)圖像進(jìn)行二值化時(shí),我會(huì)得到一個(gè)快速且骯臟的劃痕檢測(cè)器:
如果您對(duì)劃痕的外觀有更多了解,可以大大改進(jìn)這種探測(cè)器.例如劃痕總是黑暗的嗎?它們總是具有高對(duì)比度嗎?它們總是平滑的曲線,即它們的曲率總是很低嗎? – 可以以某種方式測(cè)量這些屬性中的每一個(gè),因此您可以將這些測(cè)量結(jié)果組合到單個(gè)圖像中并對(duì)其進(jìn)行二值化.
一個(gè)小的改進(jìn)是刪除小組件:
這仍然不是很完美,但結(jié)果足以將其用作修復(fù)遮罩:
這也將刪除一些細(xì)節(jié),但差異更難以發(fā)現(xiàn).
完整的Mathematica代碼:
difference = ImageDifference[sourceImage, MedianFilter[sourceImage, 2]];
mask = DeleteSmallComponents[Binarize[difference, 0.15], 15];
Inpaint[sourceImage, mask]
編輯:
如果您無(wú)法訪問(wèn)標(biāo)準(zhǔn)的修復(fù)算法(如Navier Stokes或Telea),那么窮人的算法就是在掩碼為1的區(qū)域中使用中值濾波圖像(可能類似于mask * sourceImage( 1-mask)* Matlab中的medialFilteredImage).根據(jù)圖像數(shù)據(jù),差異可能不值得“真正的”修復(fù)算法的額外努力:
總結(jié)
以上是生活随笔為你收集整理的matlab中删除照片_如何使用matlab从图像中删除划痕的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大数据统计分析毕业设计_基于大数据分析的
- 下一篇: c# 带返回值的action_C#委托A