2012年12月16日 星期日

Histogram Equalization 直方圖等化

Histogram Equalization

當透過 sensor 抓取影像, 我們可能會需要提高影像的品質, 使影像的細節或特徵更為凸顯. 其中一個方法是對影像亮度的分佈進行改變, 此類方法稱為 對比增強. 本文所要介紹的 Cumulative Histogram Equalization(直方圖等化) 法即是影像增強的技術之一.

直方圖等化使用機率分佈, 將原先的亮度分佈重新均勻的等化到新的亮度值. 原來在直方圖分佈中 比較窄化的影像, 例如 : 低對比度的影像, 透過直方圖等化的過程, 其亮度灰階的分佈變成均勻分散, 而成為高對比度的影像. 另外, 對於影像偏暗的部分提高亮度, 偏亮的部分則降低亮度, 使得細節呈現更為清晰.


Cumulative Histogram Equalization 的步驟如下
1.     建立影像的 histogram(PDF).
2.     計算影像的 cumulative distribution function(CDF).
3.     根據 CDF 以及 cumulative equalization 公式 計算灰階亮度的對應關係.
4.     根據對應關係計算出新的灰階亮度.


2012年11月15日 星期四

skia 性能優化 - part 2


Android 3.0 版之前, 包括Android 2.2, 原生UI 的效能一直讓使用者有所微詞. 部分的原因在於UI 上的所有圖形, 都使用 CPU rendering. 要提高 UI  rendering 的效能, 除了改以特定硬體加速, 例如 GPU 或是 2D engine, 另外一個方法就是針對程式代碼進行優化, 包括針對效能
瓶頸部分, 改用處理器所提供更有效率的指令完成. 當然, 繪圖的加速只是一部分, 另外像是 


2012年10月23日 星期二

攝像頭校正 camera calibration - part 2 calibration


Lens Distortion

在前一篇文章 攝像頭校正 camera calibration - part 1 camera model提到 使用 lens 的好處是可以增加進光量, 縮短曝光時間. 但是缺點則是會造成非線性的影像形變.

常見的兩種主要形變, 分別是徑向( radial distortion)以及 切向形變 (tangent distortion). 徑向形變是由於 lens 的形狀, 使得距離lens中心越遠的光線在通過 lens時彎折較大越靠近 lens 中心的光線則彎折越小切向形變則是由 camera 模組組裝的誤差造成的. 主要是 lens sensor 並非平行對齊. 圖一是兩種形變的影像.


2012年10月9日 星期二

skia 性能優化


Skia是一個 Android 中的一個 open source 向量圖型庫,

Android 2.2 skia 幾乎無所不在, 提供了 draw text, draw rectangle, draw bitmap 等等的功能. 許多 apk UI, 其具體實現就是用skia, 例如, launcher. skia Android 的原生代碼中, 提供了 skia 以及 skiaGL (OpenGL加速的版本). skia 的版本中,  skia 的運算仰賴 CPU, 雖然有提供了 fixed point 以及 floating point 兩套版本, 但筆者實際上透過 #define 調整時, 編譯上會產生錯誤. 有部分的代碼需要修改調整.(是否有其他同好有調試過這部分的代碼?)


2012年9月14日 星期五

擴增實境 - A simple Augmented Reality demo


A simple Augmented Reality demo

最近研究了一個有趣的主題 : Augmented Reality ; AR, 中文翻譯為 擴增實境. 並且用目前的研究心得寫了一個簡單的 demo program.

這是一個 使用 marker 的 AR demo program. 其原理是使用 webcam 抓取影像, 對影像做 marker detection, 根據四邊形的 marker 在 2D image 上的形變狀況 推導出 marker 所在之 3D 平面的 3D transform. 然後使用此 3D transform, 在抓取的影像中繪制 3D 物件. 如此, 就把真實的影像 和虛擬的物件融合在一起.


2012年9月8日 星期六

攝像頭校正 camera calibration - part 1 camera model

PART 1 Camera Model


所謂 Camera model 是使用幾何(geometry)的方式描述真實世界中的物體在 camera 影像平面上的成像方式. 本文會說明最基本的 camera model, 也就是針孔攝像頭模型(pinhole camera model). 另外, 使用鏡片(lens)可以增加進入成像平面的單位時間光線總量,因此縮短了曝光所需要的時間, 但是使用lens也造成了影像或多或少產生了畸變(distortions), 因此我們還需要了解 lens distortion model.
有了camera 的 geometry model 以及 lens 的 distortion model 就可以建構完整的 camera 的內部參數(intrinsic parameter),   camera calibration 需要使用到 camera 的內部參數.


2012年9月1日 星期六

Android 建立 surface 的過程


Android 的圖形系統是 Client-Server 架構, Server SurfaceFlinger, Client 則是應用程式.
應用程式第一次執行時, Window Management Service (WMS) 會開啟一個 session, openSession()函式會被調用. openSession()函式在BSP的位置和程式代碼如下:


2012年8月14日 星期二

探討 Android gralloc HAL – part2

gralloc HAL有幾個比較重要的函式, 分別是 gralloc_alloc, gralloc_alloc_buffer,  init_pmem_area,  gralloc_free, 另外, 還有一個class : SimpleBestFitAllocator.
這些函式的程式代碼在

2012年8月2日 星期四

探討 Android gralloc HAL – part 1


整個 Android 2.2的圖型模組, 不論是 2D, 3D應用程式運行, 只要是圖形相關的應用, 都需要配置 graphic buffer, 在 Android 中負責這工作的模組就是 gralloc HAL(gralloc 硬體抽象層).

Gralloc HAL 的程式碼在 /hardware/libhardware/modules/gralloc/Gralloc.cpp
動態連結庫 gralloc.default.so 位置在系統路徑 /system/lib/hw/


2012年8月1日 星期三

Android – screen compatibility mode


工程師的工作不外乎要 debug, 最近又遇到一個 issue.

WVGA(width=800, height=480) 的平台上, 執行應用程式, 該應用程式卻 allocate(width=533, height=320) graphic buffer. 造成畫面內容顯示不正確.


2012年7月29日 星期日

Android 系統語系設定


最近因為要解一個 Android 平台的 issue 而接觸到了 Android 系統的語系, Android 的語系設定主要有兩個部分

系統初設(default) 的語系設定
透過 settings 改變語系設定.

系統 初設的語系設定

2012年7月21日 星期六

OpenCV 影像擷取 - 使用 DirectShow


在本篇文章中, 筆者將說明如何使用 DirectShow  擷取影像. 當初使用 DirectShow 是因為
需要從事 Stereo vision相關的研究, 要從多個 camera 擷取影像, 且使用 OpenCV 2.2版, 但是這一版的 OpenCV 原生函式無法正確的擷取多個 camera 的影像. 因此才改用 DirectShow.

2012年7月14日 星期六

OpenCV 影像擷取


本文介紹如何使用 OpenCV 進行影像擷取,  在前一篇文章中 Hello_OpenCV 從檔案將圖檔讀入並且顯示, 現在, 我們進一步擴充 Hello_OpenCV, 把原先的從檔案讀取圖檔改成從 WebCAM 擷取影像.
OpenCV 提供的影像擷取函式有兩個, 分別是
                               CvCapture* cvCaptureFromCAM(int index);
以及
                               IplImage* cvQueryFrame( CvCapture* capture );

2012年7月7日 星期六

OpenCV 開發環境設定


OpenCV 是一計算機視覺開源函式庫, 欲使用OpenCV 開發影像處理或是計算機視覺相關應用之前, 必須將最基本開發環境設定好.

本文介紹   Visual studio 2010 開發環境設定. 使用的 OpenCV 版本是 2.2 版. 包含以下主題
  1. 下載 OpenCV函式庫
  2. 安裝 
  3. 設定函式庫以及標頭檔路徑
  4. 一個簡單的 OpenCV 程式