计算图像清晰度
1、方差
在相機拍照時,通常會看到相機由模糊至清晰的自動對焦過程,逐漸形成清晰度比較高的圖像。其實這是非常簡單的處理,,并不需要非常特殊的算法,方法各式各樣好多種,而且效率極其高。
表示樣品離散程度的知識:方差和標準差。僅僅利用本知識加以變化,就足夠了。
當完全聚焦時,圖像最清晰,圖像中的高頻分量也最多,突變像素與相鄰像素的差值也會變大,基于這個原理,對每一個像素水平右側鄰域的兩個灰度值相減再相乘,再逐個像素累加,計算相鄰兩個像素灰度差的平方,如下:
其中:f(x,y) 表示圖像f對應像素點(x,y)的灰度值,D(f)為圖像清晰度。本方法效率非常高,1280*1024大小的圖片10張同時計算能在70毫秒以內完成,而且結果精準。
當然不限于是上面這一種,比如對每一個像素右側和下側鄰域兩個灰度差相乘,再逐個像素累加,也可以,比如:
也可以方差定義里說的樣本點與平均值比較的方式,比如如下:
當然按公式做的話,如果是針對灰度圖,背景全白而拍攝主體是黑,或背景全黑而拍攝主體全白,D(f)值結果大小會相反,所以此法還不如前面那兩種方法。再比如,用下和右相鄰點與自己差值平方累加。如下:
也是可以很好的放大差異,越清晰則結果值越大,越模糊則值越小。
說到這里,你會發現上面提到的,其實都是相鄰像素差用乘積放大從而鑒定出誰更清晰。
? ? ? 當然你可以自己改進:比如用上下左右的4個點或者8個點也可以,比如用N個點以中心點差值相乘再求和,等于是以一個小塊(模板)的形式去比較計算。
? ? ? 但是執行效率不如上面幾種,如果覺得上面算法效率還是不能滿足你的要求,也很簡單,采用隔行掃描,或間隔多行的方式,瞬間效率提升幾倍。
2、通過拉普拉斯算子求梯度
拉普拉斯算子模塊是利用拉普拉斯算子求梯度的模塊,拉普拉斯算子是一種二階導數算子,對于一個連續函數f(x,y),它的位置(x,y)的拉普拉斯值定義為:
在數字圖像中,計算函數的拉普拉斯值也可以借助各種模板實現,這里對模板的基本要求是對應中心像素系數為正,面對應中心像素鄰近像素的系數為負,面它們的和等于零。選擇如下的拉普照拉斯算子模板,
| -1 | -1 | -1 |
| -1 | 8 | -1 |
| -1 | -1 | -1 |
則計算過程為:
E=8I(x,y)-I(x-1,y-1)-I(x-1,y)-I(x-1,y+1)-I(x,y-1)-I(x,y+1)-I(x+1,y-1)-I(x+1,y)-I(x+1,y+1);
對于一幅模糊的圖像,在每一像素附近的灰度值變化小,則E值小,對于清晰的圖像,圖像的輪廓鮮明,E值會大,最清晰則E值(即梯度值)最大。
拉普拉斯算子模塊內的實現為使用fifo緩存出如圖3所示的一個3x3的矩陣,對整幀圖像求E的和,相當于對整幀圖像做卷積再求和,得到圖像的梯度值,輸出給聚焦模塊進行判斷。
圖3? fifo緩存出一個3x3的像素的矩陣
總結
- 上一篇: 外贸人如何把握客户跟进频率?
- 下一篇: 一句话木马 php asp,一句话木马源