知道這個算法應該有很久了,主要當時在意2個事情,一個是這個名字的翻譯是在是搞笑,第二是這個算法的效果。不過一直以來都十分好奇這個算法是怎麼實現的。因爲之前一直無法實際的用基恩士的軟件平臺用不同的圖片去測試這個算法的不同結果,故而無從分析和總結規律,但是恰好最近有朋友能幫這個忙,獲得了一些測試數據,也基本分析出了這個算法的大概。 我們首先看看這個算法的官方文檔的說明:
其中文的參考界面如下圖:
參數很多啊。
其中補正方法裏有4種方法:平均值補正、中間值補正、陰影補正、高速陰影補正等。當選擇平均值補正和中間值補正時,我們發現下面的抽取大小和抽取方向都變爲不可用了,所以就是說明他們不需要這個參數。就平這一點,我們其實就可以猜到這個算法的一個基準數據,比如這個平均值補正,結合其幫助文檔裏說的,就可以猜測到他是以全圖的平均值爲一個基準數據進行後續的處理。那個中間值補正,我原以爲他是用中值濾波來做的,但是一看沒參數可選,後來一想也就是用全圖的中值(用直方圖做統計,累加直方圖數據到圖像像素量一半時那個值)作爲計算依據的。
當選擇陰影補正或者高速陰影補正時,可選擇抽取大小和處理方向,文檔裏說什麼基於抽取大小生產什麼曲線,我感覺有點帶偏了,應該就是某種模糊吧,所謂高速啥的,應該指不同類型的模糊。
在明暗抽取中,他有明部、暗部、明暗和明暗獨立四個選項,其實所謂明暗也就是各個像素點和基準數據之間的比較,當選擇明時,保留大於的部分,選擇暗時,保留小於的部分,明暗都選擇,我原以爲是明暗的結果相加求平均,但是實際測試好像真的不是,但是也沒有發現其他的辦法。
當選擇明暗獨立時,下部的增益和出去干擾旋向會增加明部和暗部的獨立設置。 這裏的增益其實就是一個線性的放大係數,去除干擾是一個offset項目,類似於
y = gain * diff + offset;
這樣的一個表達式吧。
下面的對比度平均化沒有去研究他,感覺作用不是很大,範圍外參照其實沒啥,就是決定了邊緣像素如何處理,選擇on,邊緣部分可以參考超出的位置的值(前提是要有).off應該就是選擇了鏡像或者重複邊緣之類的吧。 次數這個參數也是垃圾參數。
找了幾個圖做了測試,通過調整一些參數,可以達到不錯的效果:
當然這些圖都是我精心挑選的來表示這個算法很好,實際上對於很多圖像,我們是得不到理想的結果的。所以每個算法都有其侷限性和適應範圍。
一個值得注意的事項是,抽取方向的參數也還是有一定的作用,比如上面的後2個圖,就必須分別用X和Y方向的抽取,才能獲得有效目標,而抽取大小也是有一定的限制的,必須合適,方可有效。
這個算法的速度的核心還是後臺使用的各種模糊或者其他的基礎算法,本身的計算量確很小。
沒有啥開源精神,不過哪些無法運行基恩士軟件的朋友,可以從我提供的DEMO上去測試數,挖掘規律,也許您也可以掌握其中的奧祕。我想着無形中也是對他人的幫助。
本文Demo下載地址: https://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,位於Detection-》Auxliary Enhance-》 Shading Correction Filter。裏面的所有算法都是基於SSE實現的。
如果想時刻關注本人的最新文章,也可關注公衆號: