前言
本文是关于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)
主要应用举例
- 获得相交子图像
网友评论