en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

1.21.2013

使用圖學的方法取得目標影像的平均亮度值

嚴格來說這篇文章與 iOS SDK 並沒有太大的關係,因為使用圖學的方法求出影像的亮度,可以應用於電腦圖學上的任何地方,但是基於 iOS SDK 中所提供的 API,並未能夠讓我們控制相機的光圈或是環境光源感應器 Proximity 的詳細參數,因此在實作上,若要取得目標影像的平均亮度,還是得仰賴圖學的原理。


演算法
首先,我們得把目標影像從 RGB Color Model 色域轉換成能表達亮度形式的 Grayscale Model 灰階影像,參考維基百科得知 RGB 轉換成灰階影像的演算法如下。
灰階像素(亮度)= 紅色像素 *0.299 + 綠色像素 *0.587 + 藍色像素 *0.114
最後,再把整張影像的灰階像素加起來取平均值,就可以得出目標影像的亮度值(0 ~ 255),你也可以將此亮度數值正規化(除以 255)在 0 ~ 1之間。
//pseudo code
for (int i=0; i!=圖寬*圖高; i++) {
    總亮度值 += 影像灰階像素[i];
}

平均亮度值 = 總亮度值 / 圖寬*圖高;


補充說明

  • 參考影像與資料陣列的轉換(上)影像與資料陣列的轉換(下)來取得目標影像資料的 RGB 數值。
  • 圖片格式中的透明度(Alpha)並不會影像影像的亮度,在計算上應考慮到這點。
  • 灰階像素一個比較主觀的求法,是將 RGB 三色相加並除以三求其平均,使其三色所佔的比重皆相等,但是基於考慮到人類眼睛對於顏色的敏感度的條件下,使用上述的求解方式會比較客觀。
  • 其餘色彩空間像是 YUV 等具有亮度表示的色彩模型,也同樣適用。







沒有留言:

張貼留言