1. 程式人生 > >圖片馬賽克檢測

圖片馬賽克檢測

視訊在傳輸過程中,由於編解碼出現問題,會導致視訊出現不同程度的損傷,其中就包括視訊馬賽克現象。馬賽克對於視訊的觀看效果有著很大的影響,為了及時有效地發現視訊中是否存在馬賽克,這裡基於視訊影象進行影象馬賽克檢測,具體步驟如下。

以一幅圖片為例,來說明馬賽克檢測所用方法,這裡採用的圖片如下所示:
這裡寫圖片描述
可以發現,圖片中人物臉部打了馬賽克。針對這片區域的馬賽克,看本演算法是否能夠有效識別。

首先,對上圖進行Canny邊緣檢測,閾值分別取40和200,得到影象的檢測結果。
這裡寫圖片描述
觀察上圖,發現馬賽克區域經過邊緣檢測後,出現了一堆方塊狀或類方塊狀的區域。這些區域大體可分為如下5種情況。
這裡寫圖片描述
方塊和類方塊大體分為以上5種,分別為完備的正方形、分別缺一邊的不完備正方形。為了統計上述邊緣檢測結果圖中含有的這5類正方形,可以採取下述方式進行統計:
邊長從3開始,逐次加1,到33截止(這裡有待考究)。判斷每個畫素以這個邊長能否組成正方形(5種情況,以下簡稱正方形)。如果能,這個邊長的正方形數加1,如果不能繼續遍歷。
上述步驟有一個問題就是,怎樣才算構成了正方形的判斷準則?
1)整體判斷法:以此邊長遍歷整個正方形區域,如果無缺失的畫素/整個正方形的畫素大於70%,認為這個正方形存在。這種方法的優點是判斷準確,綜合利用了正方形所有的畫素,但缺點同樣明顯,運算速度極低;
2)八點判斷法:選取正方形中的八個點來進行判斷,如果選擇的八個點都滿足構成正方形條件,那麼,認為此正方形存在。這種方法的優點是運算速度有所提升,但是準確率上存在不足;
3)四點判斷法:選取正方形上的四個點位置進行判斷,如果選擇的四個點都滿足構成正方的條件,認為此正方形存在。這種方法運算速度最快,伴隨著的是不太理想的準確率。

由於視訊中馬賽克的檢測既要考慮處理圖片的速度,也要兼顧判斷的準確度,所以,這裡採用了八點判斷法。以上述圖片為例,得到以下結果圖。
這裡寫圖片描述
可以看到圖片中邊長為9的正方形數量最多,為37個。經驗證,將上圖轉為灰度圖,寫入txt,得到圖中小方塊的邊長為9。但是,現在的這個判斷方法並沒有去除其他的錯誤選項和重複選項。我們可以發現,如果圖片中邊長為x的小方塊最多的話,那麼後續影響較大的肯定是邊長為 (n-1)*(x-1)+x 的正方形,且數量均小於邊長為x的正方形數量。通過此規律,我們可以找到一個馬賽克圖片中的小方塊數。

最後,利用上述方法,對一些視訊幀進行判斷,通過人工監督的方式,檢視最後的檢測準確度。以一組10幀圖片為例進行檢測,得到如下的結果圖。
這裡寫圖片描述


經人工鑑定,這10幀圖片中,只有第3張圖片不含馬賽克,其他的均有馬賽克,實驗準確率100%。所用時間4.15s。(最後附上實驗的視訊幀以及程式程式碼)

總結
1)採用八點判斷方式,準確率基本滿足要求,但是在耗時上還是有很大缺陷。10幀圖片耗時4.15s,一幀圖片圖片耗時415ms。如果想實時判斷高清視訊是否含有馬賽克的話,這個速度至少再提升10倍,達到25幀/s;
2)此判斷方法存在先天缺陷。由於是將影象邊緣處理之後進行判斷,對於圖片中的正方形區域,無法判斷是不是由於馬賽克影響造成的,比如圖片中含有棋盤之類的網格就會造成誤判的干擾。