OpenGL ES入门07-像素的代数运算

前言

本文是关于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

可以得到各种图像合成的效果,也可以用于 两张图片的衔接

OpenGL ES入门07-像素的代数运算_第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) 为去除了背景的图像。
OpenGL ES入门07-像素的代数运算_第2张图片
减法运算

乘法运算

乘法的定义
C(x,y) = A(x,y) * B(x,y)
主要应用
  • 图像的局部显示 用二值蒙板图像与原图像做乘法
OpenGL ES入门07-像素的代数运算_第3张图片
图像乘法
OpenGL ES入门07-像素的代数运算_第4张图片
图像乘法

非运算

非运算的定义
g(x,y) = 255 - f(x,y)
主要应用
  • 获得一个阴图像
OpenGL ES入门07-像素的代数运算_第5张图片
阴图像
  • 获得一个子图像的补图像
OpenGL ES入门07-像素的代数运算_第6张图片
补图像

与运算

与运算的定义
g(x,y) = f(x,y) ∧ h(x,y)   
主要应用
  • 求两个子图像的相交子图
图像的相交
  • 模板运算:提取感兴趣的子图像
OpenGL ES入门07-像素的代数运算_第7张图片
提取子图像

或运算

或运算的定义
g(x,y) = f(x,y) v h(x,y)
主要应用
  • 合并子图像
OpenGL ES入门07-像素的代数运算_第8张图片
合并子图像
  • 模板运算:提取感兴趣的子图像
OpenGL ES入门07-像素的代数运算_第9张图片
提取子图像

异或运算

异或运算的定义
g(x,y) = f(x,y) ⊕ h(x,y)   
主要应用举例
  • 获得相交子图像
OpenGL ES入门07-像素的代数运算_第10张图片
相交子图像

你可能感兴趣的:(OpenGL ES入门07-像素的代数运算)