簡體   English   中英

從照片中刪除紙張紋理圖案

[英]Remove paper texture pattern from a photograph

我用紙張紋理圖案掃描了一張舊照片,我想盡可能地去除紋理而不降低圖像質量。 有沒有辦法,可能在MATLAB中使用圖像處理工具箱?

我試圖應用FFT轉換(使用Photoshop插件 ),但我找不到任何明顯的白點可以畫畫。 對於這種方法,這種模式可能不那么規律嗎?

您可以在下面看到示例。 如果您需要完整的圖像,我可以將其上傳到某處。 照片樣本

不幸的是,你幾乎陷入了空間領域,因為這種模式並不足以讓傅里葉分析具有足夠的重復性。

正如@Jonas和@michid指出的那樣,過濾將幫助你解決這樣的問題。 通過過濾,您需要在要保留的詳細信息量和要刪除的噪聲量(或不需要的圖像組件)之間進行權衡。 例如,@ Jonas使用的中值濾鏡完全去除紙張紋理(即使是圖像底部邊緣附近的圓形划痕),但它也會去除眼睛,頭發,臉部和背景中的所有紋理(盡管我們並不真實如此關心背景,這是重要的前景)。 您還會看到圖像對比度略有下降,這通常是不受歡迎的。 這使圖像具有人工外觀。

這是我如何處理這個問題:

  • 檢測紙張紋理圖案:
    • 將高斯模糊應用於圖像(使用大內核確保所有紙張紋理信息都被破壞
    • 計算模糊圖像和原始圖像之間的圖像差異
    • 編輯2將高斯模糊應用於差異圖像(使用小的3x3內核)
  • 使用經驗確定的閾值閾值上述模式。 這產生了可用作掩模的二進制圖像。
  • 使用中值濾波(如@Jonas所述) 替換與紙張圖案對應的圖像部分。

紙張紋理圖案(閾值處理前):

在此輸入圖像描述

您希望在上面的圖像中存在很少的實際圖像信息。 你會發現你可以非常微弱地弄清楚臉部的邊緣(這不好,但這是我有時間的最好的)。 您還希望此紙張紋理圖像盡可能均勻(以便閾值處理在整個圖像中得到相同的結果)。 同樣,上圖中的右側稍微暗一些,這意味着很難對其進行閾值處理。

最終圖片:

在此輸入圖像描述

結果並不完美,但它完全消除了高度可見的紙張紋理圖案,同時保留了比簡單過濾方法更多的高頻內容。

編輯

填充區域通常是純色的,因此如果您仔細觀察圖像會突出一點。 您還可以嘗試在填充區域添加一些低強度零均值高斯噪聲,使其看起來更逼真。 您必須選擇與背景匹配的噪聲方差。 憑經驗確定它可能足夠好。

這是添加了噪音的處理過的圖像:

在此輸入圖像描述

請注意,去除紙張圖案的部分更難以看到,因為增加的高斯噪聲掩蓋了它們。 我對整個圖像使用相同的高斯分布,但如果你想要更復雜,你可以使用不同的分布為面部,背景等。

中值濾波器可以幫助您:

img = imread('http://i.stack.imgur.com/JzJMS.jpg');
%# convert rgb to grayscale
img = rgb2gray(img);
%# apply median filter
fimg = medfilt2(img,[15 15]);
%# show
imshow(fimg,[])

在此輸入圖像描述

請注意,您可能需要先填充圖像以避免邊緣效應。

編輯 :比[15 15]更小的濾波器內核將更好地保留圖像紋理,但會留下更明顯的濾波痕跡。

我已經嘗試了使用Anisotropc擴散的不同方法,使用在更廣泛區域上操作的第二系數

這是我得到的輸出:

在此輸入圖像描述

從圖中可以看出,與圖像本身相比,噪聲具有相對較高的頻率。 因此應用低通濾波器應該可行。 看看功率譜abs(fft(...))來確定截止頻率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM