前言
本文是關于OpenGL ES的系統性學習過程,記錄了自己在學習OpenGL ES時的收獲。
這篇文章的目標是學習OpenGL ES 2.0中的像素點的代數運算。
環境是Xcode8.1+OpenGL ES 2.0
目前代碼已經放到github上面,OpenGL ES入門07-像素的代數運算
歡迎關注我的 OpenGL ES入門專題
概述
代數運算主要有:算術運算(加、 減、乘、除),邏輯運算(非、或、異或)。在圖像處理中代數運算同樣適用,但代數運算在圖像處理中不僅僅是簡單的數學運算,還有它的實際意義。
加法運算
加法運算的定義
C(x,y) = A(x,y) + B(x,y)
主要應用
-
去除疊加性噪聲
去除疊加性噪聲 對于原圖像f(x,y),有一個噪聲圖像集
{ gi(x,y) }; i =1,2,...N 其中: g(x,y) = f(x,y) + h(x,y)
假設噪聲h(x,y)均值為0,且互不相關 N個圖像的均值定義為:
g(x,y) = 1/N(g0(x,y)+g1(x,y)+...+ gN(x,y))
期望值E(g(x,y)) = f(x,y) 上述圖像均值將降低噪聲的影響
- 生成圖像疊加效果
生成圖像疊加效果 對于兩個圖像f(x,y)和h(x,y)的均值有:
g(x,y) = 1/2f(x,y) + 1/2h(x,y)
推廣這個公式為:
g(x,y) = α*f(x,y) + β*h(x,y); 其中 α + β = 1
可以得到各種圖像合成的效果,也可以用于 兩張圖片的銜接
加法運算
減法運算
減法的定義
C(x,y) = A(x,y) - B(x,y)
主要應用
顯示兩幅圖像的差異,檢測同一場景兩
幅圖像之間的變化
如:視頻中鏡頭邊界的檢測
去除不需要的疊加性圖案
圖像分割:如分割運動的車輛,減法去 掉靜止部分,剩余的是運動元素和噪聲檢測同一場景兩幅圖像之間的變化
設:時間1的圖像為T1(x,y), 時間2的圖像為T2(x,y)
g(x,y) = T2 (x,y) - T1(x,y)
去除不需要的疊加性圖案
設:背景圖像b(x,y),前景背景混合圖像 f(x,y)
g(x,y) = f(x,y) – b(x,y) g(x,y) 為去除了背景的圖像。
減法運算
乘法運算
乘法的定義
C(x,y) = A(x,y) * B(x,y)
主要應用
- 圖像的局部顯示 用二值蒙板圖像與原圖像做乘法
圖像乘法
圖像乘法
非運算
非運算的定義
g(x,y) = 255 - f(x,y)
主要應用
- 獲得一個陰圖像
陰圖像
- 獲得一個子圖像的補圖像
補圖像
與運算
與運算的定義
g(x,y) = f(x,y) ∧ h(x,y)
主要應用
- 求兩個子圖像的相交子圖
圖像的相交
- 模板運算:提取感興趣的子圖像
提取子圖像
或運算
或運算的定義
g(x,y) = f(x,y) v h(x,y)
主要應用
- 合并子圖像
合并子圖像
- 模板運算:提取感興趣的子圖像
提取子圖像
異或運算
異或運算的定義
g(x,y) = f(x,y) ⊕ h(x,y)
主要應用舉例
- 獲得相交子圖像
相交子圖像