IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 时域高通滤波算法(THPF) -> 正文阅读

[游戏开发]时域高通滤波算法(THPF)

时域高通滤波算法(THPF)

今天介绍一下图像非均匀校正中的场景校正算法-时域高通滤波算法(Temporal High Pass Filtering, THPF)以及它后续的各种改进版本。空域和频域已经在之前的文章介绍过一些了,时域还没有。图像是二维空间域上的像素,随着时间的延续,每秒25、30、60帧,就成了视频,针对视频进行图像处理,就可以考虑增加一个时间维度,图像帧与帧之间是存在相关性的,结合时域滤波算法可以有效去除图像中的噪声和探测非均匀性问题。

红外焦平面阵列 (Infrared Focal Plane Arrays,IRFPAs) 由于制造工艺和外部因素影响存在响应非均匀 性问题, 即其所构成的成像系统即使在相同辐射输入的条件下,探测单元的输出也不一致,最终在输出图像上呈现出固定图案噪声,从而严重地影响了成像质量和图像信噪比。目前对于非均匀性校正主要分为两类:一类是基于参考辐射源的定标算法,如两点校正法和多点校正法;另一类是基于场景 的校 正 算 法 ,如时域高通滤波法、神经网络法、恒定统计法和卡尔曼滤波法。后者是利用对场景信息的估计来实现非均匀性校正, 不需要暂停成像系统的工作来重复定标,因此是目前的研究热点。
在这里插入图片描述

1. 时域高通滤波非均匀性校正算法

时域高通滤波法是一个时间域的统计滤波器,其基本思想是假设非均匀性处在背景杂波之中,且在图像中随着时间变化相对比较缓慢,而人眼感兴趣的目标信号相对于背景杂波在像平面上运动比较快,所以可以通过时域低通滤波的方法将含噪图像在时域上分解成目标信号( 高频分量) 和背景杂波(低频分量) 两部分。将原始信号与低通滤波器的结果取差即可得到高频分量,即目标信号,从而构成一个高通滤波器,其具体公式表述如下:
在这里插入图片描述
在这里插入图片描述
通过时域不断迭代得到经过校正第n帧的输出图像,实现过程很简单很经典,效果一般,快速移动目标会有“鬼影”残留,所以需要后续不断改进。

2. 空域低通时域高通非均匀性校正算法

由于影响THPF算法收敛速度与其鬼影问题的根本原因在于大量无关的场景信息被参与到非均匀性校正参数的计算过程中,所以只要尽可能将更多的场景信息,特别是强物体从原始图像中排除,再将剩下的部分参与到非均匀性校正参数的计算过程,这样就可以尽可能减小非随机运动与场景中强物体对校正过程的影响,有效减少鬼影效应。根据这个思想,SLPF-NUC 预先采用空域滤波器将输入的图像信号进行分离。由于在空间上,场景中目标信号具有连续相关性,表现为空域低频性,而非均匀性是由各探测器阵列元独立产生,各阵列元对应的输出的非均匀性差异较大,表现为空域高频性,所以应用空域滤波器将原始信号分离成高频( HSF) 和低频( LSF) 两个部分,只利用高频部分参与非均匀性的校正。

最早的算法中采用了空域线性均值滤波器,场景中的边缘信号同时被平均,所以可以引入一个阈值Th,大于阈值时,可认为它是场景的边缘,置零,不参与非均匀性的校正。后续不断升级低通滤波器,SLPF(空域均值滤波高通非均匀性校正算法)->BFTH(空域双边滤波高通非均匀性校正算法)->GFTH(空域引导滤波高通非均匀性校正算法)->NLMTH(空域非局部均值滤波高通非均匀性校正算法)。也可以通过添加运动检测判断、自适应权重系数对算法进行改进,效果越来越好的同时,算法实时硬件实现的难度也在不断提高。
在这里插入图片描述
MATLAB代码实现:

clear; 
close all;
clc;

%% 初始化
frameWidth  = 640;
frameHeight = 512;
M = 200;      % 时间参数
image(:,:,:) = zeros(512,640,100); 
image_low(:,:,:) = zeros(512,640,100); 
image_high(:,:,:) = zeros(512,640,100); 
hsize = 5;
H = fspecial('average',hsize);

%% 帧间迭代
for k = 2:100
    %读取序列图像
    fileName = ['.\序列图像\(', num2str(k), ')', '.Raw'];
   image(:,:,k) = double(reshape(uint16(fread(fopen(fileName),'uint16'))
   				,[frameWidth frameHeight])');   
   image_low(:,:,k)=filter2(H,image(:,:,k));
   image_high(:,:,k) = image(:,:,k) - image_low(:,:,k);
   image(:,:,k) = 1/M * image_high(:,:,k) + (1-1/M)*image(:,:,k-1);  
end 

image_x(:,:) = image(:,:,k);

%% 测试图像
filename    = '第100帧.Raw';
fid         = fopen(filename);
image_raw   = fread(fid,'uint16');
image_raw   = uint16(image_raw);
fclose(fid);
data_temp  = reshape(image_raw,[frameWidth frameHeight]);
image_raw   = data_temp';
image_raw = double(image_raw);
image_out = image_raw - image_x;

%% 输出结果图
figure(1);imshow(image_raw,[]);title('原图像');
figure(2);imshow(image_out,[]);title('SLPF效果图');
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:37:15  更:2022-04-27 11:39:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:09:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码