理解多點觸控/影像採集
在考慮多點觸控系統時,將它分解成幾個組成部分是有利的,這些組成部分協同工作以形成整個系統。因此,管道中的第一步始終是採集。在本書的後面,我們將描述我們將從中獲取資料的硬體,但現在,我們將討論如何在軟體中對這些資料進行建模。
首先,我們需要提出一個格式來描述系統。我們在採集階段進行此操作,因為管道中更下游的每個元件都需要了解此格式是什麼,以及如何與之互動。在數字訊號處理中使用的其他系統中,資料以原始影像資料包或以眾所周知的格式的原始聲音資料包的形式匯入。例如,影像通常以 Y:Cr:Cb(在 RAW 模式影像中看到)或 RGB(在網路攝像頭和更便宜的數碼相機等其他裝置中)的形式匯入,聲音通常以 PCM 資料的形式表示。
PCM 或任何影像模式都不直接適用於多點觸控,因為在這種情況下來自感測器的資料可能既不模擬聲音也不模擬影像。我們傾向於將來自感測器的資料視為直方圖資料,即網格上某一點的強度。成像模型最能表示這一點,但很明顯,RGB 或 Y:Cr:Cb 都不能正確描述這一點。我們需要為我們自己的使用定義一個新的格式。
第一步是描述我們基礎裝置的平均解析度。這可能會有很大差異,低端電容感測器和壓力感測器提供非常低解析度的資料來源,而影像感測器會產生大量細節的資料,通常細節太多,難以處理。您的系統的良好起點是 8 位解析度(表示 2^8 = 256 個不同的可能參考點),但您的感測器可能需要更大的範圍。
確定什麼是可用資料以及什麼是噪聲是我們解決方案的下一部分。感測器通常可以在啟動時執行此操作,或者透過從感測器收集多個資料樣本、對這些資料進行平均並使用結果作為平臺噪聲的參考來進行校準例程(演算法 1)。同樣,由於這依賴於硬體,因此實施者將決定多少樣本以什麼速率就足夠了。要記住的一點是,許多感測器依賴於溫度,並且可能發生漂移,因此將校準例程實現為環形緩衝區並使用執行平均值持續校準可能是有利的。
正如稍後將非常清楚地說明的那樣,任何多點觸控系統中的主要敵人都是噪聲。在我們的例子中,噪聲僅僅是錯誤的資訊。它如何變得不正確(例如,感測器到緩衝區解析度對映錯誤)並不像它實際上有多不正確(白噪聲與粉紅噪聲或其他有色噪聲)那樣重要。例如,維納反捲積可以校正由於白噪聲而經常發生的錯誤。其他型別的噪聲可以透過動態規劃演算法從訊號中去除。
認識到在採集級別,我們不需要完美。我們在這裡浪費的時間越多,我們在管道中更下游的時間就越少,以使裝置對使用者的輸入做出響應。雖然嘗試透過程式設計方式去除噪聲是值得的,但最好的方法是確保噪聲永遠不會進入系統,並且應該在硬體感測器實施中進行處理,我們將在本書後面討論。
為了本書的目的,我們需要描述一個模型,該模型對任何程式設計示例都通用。為了簡單起見,該模型不會描述物理感測器,而是描述一個理論上的“完美感測器”,在該感測器中我們可以相信所有資料都是 100% 正確的。錯誤考慮將在適當的時候指出,但在討論我們的感測器模型時不會考慮。
概述中描述的所有多點觸控的基礎都是基於具有二維輸入感測器的想法。感測器不需要高解析度,而且由於我們將經常對其進行取樣,因此我們希望儘早丟棄儘可能多的資料。我們理論上的模型感測器將具有 8 個元素的水平和垂直解析度,由 8 位解析度組成。假設水平和垂直軸上的 8 個元素是等間距的,無論這種間距是幾毫米還是釐米(或更多)都與我們的模型無關。在我們的模型中,我們將 8 位深度稱為 **壓力解析度**,並將水平和垂直解析度統稱為 **空間解析度**。
我們的壓力解析度將被建模為一個整數,其歸一化和校準的零壓力由 0 表示,我們可以記錄的最大壓力由 255 表示。在實際系統中,將最低兩位保留為指示錯誤狀態(例如,樣本溢位可表示解析度)可能是有利的,但在本模型中,我們的感測器將始終表示完美資料。我們的空間解析度將被建模為從 0 到 7 的整數,分別位於任一軸上,以矩陣的形式表示。