1. 程式人生 > >圖像的局部墑速度優化

圖像的局部墑速度優化

空間 大於 ges 一個點 加法 歸一化 檢測 很大的 紋理

1、香農墑定義

信息論大師香農給出了信息隨機性的度量,稱為信息墑。信息的隨機性越大,信息墑就越大。假定事件s1,s2,s3……sn,它們出現的概率為p(s1),p(s2)……p(sn),則每個事件的平均不確定性用香農墑(Shannon entropy)來定義,為

技術分享圖片

2、圖像的局部墑優化

由香農墑的定義可以看出,只要把圖像中的灰度值看作隨機事件,就可以度量圖像的信息量了。

1、對於一個灰度完全一致的圖像,P(Si) = 1,圖像的香農墑為0;

2、對於一個對比度很大的圖像,圖像的香農墑很大;假定圖像一半白,一半黑,香農墑為1/2 * 2 = 1; 這個特性可以用來檢測圖像紋理中的缺陷,紋理均勻的地方,香農墑小;紋理缺陷的地方,香農墑大;然後在墑圖像選取一個合適的閾值二值化,就可以檢測出缺陷。

如果直接計算整張圖的香農墑,得出來的是關於整張圖像的對比度,均勻性等信息的度量,一個標量值(紋理特征);主要用於分類和識別。

在缺陷檢測中,我們更關心的是局部的特性,每個局部點的信息墑組成一個信息墑圖。類似於濾波,matlab中的局部墑計算函數為entropyfilt,常用的墑濾波器是9x9大小的,因此可以按照空間域濾波滑動窗口的形式方法計算局部墑。

技術分享圖片

2.1 圖像局部墑Native計算方式:

技術分享圖片

2.2 局部墑優化1(查找表方式):

Native計算方式中最大的計算量為log(2)的重復除法

技術分享圖片

考慮到hist[k]的最大頻數為81,因此計算概率的時候先不歸一化處理,只計算頻數,然後構建頻率查找表:

技術分享圖片 技術分享圖片

查找表方式優化效率,有質的提升。

2.3 局部墑優化2(減少直方圖循環)

技術分享圖片

直方圖中不是每個灰度頻數都大於0,最多個頻數大於0的個數為81,也就是鄰域9x9 內的所有灰度值都不相同;因此對於那些頻數為0的index可以先去除,然後在循環。測試後,提速不明顯,主要是對直方圖中256個index又要遍歷一遍,然後還要存在索引表中,這本省要耗點時間。但對頻數大於0的首尾index提取(很快就提取出來),會有10%左右的提速。

minIndex為頻數不為0的最小索引值,maxIndex為頻數不為0的最大索引值;

技術分享圖片

2.4 局部墑優化3(中值濾波優化思路)

技術分享圖片

窗口在滑動時,只有第一列和最後一列是不同的元素,因此在計算下一個點鄰域直方圖時,只需在當前直方圖的基礎上減去第一列,然後在加上最後一列。這個減少了imageWidth * imageHeight * (81 - 18)次加法,600x500的圖沒提速前是50ms左右,提速後在40ms左右,提速20%-30%;

技術分享圖片

3、計算結果圖demo

技術分享圖片 技術分享圖片

技術分享圖片 技術分享圖片

技術分享圖片 技術分享圖片

圖像的局部墑速度優化