红外热成像 ~ 基于matlab的非均匀校正code

    红外芯片由于工艺问题存在严重的分均匀性,所以非均匀矫正一直是影响红外图像质量的第一因素。分均匀矫正的算法也是红外图像处理研究的重点区域,建立了一些矫正的方式方法。其中最常用最简单的就应该算是两点温度定标算法。

应用两点法校正有两个前提条件,第一,探测器的响应在所关注的温度范围内是线性变化的,第二,探测器的响应具有时间的稳定性,并且其受随机噪声的影响较小,则非均匀性引入固定模式的乘性和加性噪声。

%  生成nuc校正系数, 保存参数到bin文件
%  parameter   :
%  Change Logs :
%     Date       - Author - version - Notes
%     2022.04.21 - Y.L    - 1.0.0   -
%**************************************************************************************
close all; clc; clear; warning off all; feature jit off;
 
cols = 1280; % 图像宽度
rows = 1024; % 图像高度
nums = 350;   % 参数非均匀校正帧数
 
PATH_H = 'E:\02_InfraredISP\01_非均匀校正\T20231109_nuc\Th\';  %高温图像
PATH_L = 'E:\02_InfraredISP\01_非均匀校正\T20231109_nuc\Tl\';  %低温图像
PATH_S = 'E:\02_InfraredISP\01_非均匀校正\T20231109_nuc\';      %未校正原始图像
 
% 进行非均匀校正,生成校正系数
[imgGain, imgBias] = fnuc_nuc(PATH_H, PATH_L, rows, cols, nums);
 
% 保存非均匀校正表到mat中
eval(['save ', PATH_S, 'nuctable.mat imgGain imgBias']); % 保存校正表到mat中
eval(['load ', PATH_S, 'nuctable.mat']); % 加载mat中校正表
 
% 读取未进行校正的图像,验证校正表是否生效
fid_img = fopen([PATH_S, 'Pipe0_1280x1024_Raw16_1_1_11.raw'], 'r');
temp_imgl(:, :) = transpose(fread(fid_img, [cols, rows], 'uint16'));
fclose(fid_img);
 
dstImg = temp_imgl .* imgGain + imgBias;
dstmean = mean(mean(uint16(dstImg)));
figure, imshow(dstImg, [dstmean-300 dstmean+300]);
disp(['info > ', 'Calculation of non-uniform correction table completed']);
 
eval(['save ', PATH_S, 'dstImg.mat dstImg']); % 将校正后图像保存到mat中
 
% 保存校正表到bin文件中(用于烧写FALSH)
func_saveflash(PATH_S, 'nuctable.mat', 'flash_cfg.bin', rows, cols);
function [imgGain,imgBias] = fnuc_nuc(path_h,path_l,row,col,nFrame)
% Nonuniform correction by two-point method
% Parameters:            
%       path_h ,path_l  : 高低温图像的路径                        
%       pixel_y,pixel_x : 图像的高度、宽度
%       PDepth          : 像素的位宽
%       numFrame        : 用于非均匀校正的图像帧数
%       outpath         : 输出增益、偏置两个校正表       
% Example:               
%       [imgGain, imgBias] = F_nuc(FILEPATH_H, FILEPATH_L, row, col, 10, FILEPATH_O);
%       Reading raw files
% Notes: 
%       The first 8 lines of the acquired image are invalid data, and the middle area of 
%       the data is used for correction
 
%% Loading image
 
function [] = func_saveflash(path_file, nucname, savefile, rows, cols)
% 保存校正表到bin文件中, bin用于烧写FLASH
 
% 加载校正表文件
eval(['load ', path_file, nucname]) % 加载校正表
 
% 读取OOC文件(OOC以图像形式存在)
imag_ooc = uint8(zeros(cols * 2, rows / 2)); % 后期需要实际的OOC配置文件
 
% 读取G文件(增益取值扩大1024倍)
imag_g_temp = uint16(round(imgGain .* 1024));
imag_g_temp(imag_g_temp < 0) = 0;
imag_g = imag_g_temp;
 
% 读取B文件
imag_b_temp = round(imgBias);
imag_b_temp(imag_b_temp > 16383) = 16383;
imag_b_temp(imag_b_temp < -16383) = -16383;
imag_b_temp(imag_b_temp < 0) = abs(imag_b_temp(imag_b_temp < 0)) + 32768; %负数在b的最高位(1表示负数、0表示正数)
imag_b = imag_b_temp;
 
% 生成flash烧写文件
dummy = zeros(4, 2560);
fid_flash = fopen([path_file, savefile], 'wb');
fwrite(fid_flash, imag_ooc', 'uint8'); % 1280*1024 = 140000H
fwrite(fid_flash, dummy', 'uint8');
fwrite(fid_flash, imag_g', 'uint16', 'ieee-be'); % 1032      142800   1280*1024*2 = 280000
fwrite(fid_flash, dummy', 'uint8'); %                        145000   1341440
fwrite(fid_flash, dummy', 'uint8'); %                        3C5000
fwrite(fid_flash, imag_b', 'uint16', 'ieee-be'); % 1032      3C7800
fwrite(fid_flash, dummy', 'uint8'); %                        647800
fwrite(fid_flash, dummy', 'uint8'); %
fclose(fid_flash);
 
% Write to a single file
fid_two = fopen([path_file, 'two.bin'], 'wb');
fwrite(fid_two, imag_g', 'uint16', 'ieee-be'); % 1032      142800   1280*1024*2 = 280000
fclose(fid_two);
 
fid_one = fopen([path_file, 'one.bin'], 'wb');
fwrite(fid_one, imag_b', 'uint16', 'ieee-be'); % 1032      142800   1280*1024*2 = 280000
fclose(fid_one);
 
disp(['info > ', 'The FLASH file is generated and written done']);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/346081.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

想要透明拼接屏展现更加效果,视频源是技术活,尤其作为直播背景

随着科技的飞速发展&#xff0c;视频制作和显示技术也在不断进步。透明拼接屏视频作为一种新型的视频形式&#xff0c;在许多场合都得到了广泛的应用。尼伽小编将深入探讨透明拼接屏视频的制作过程、要求、清晰度&#xff0c;以及目前常作为直播背景的优势。 一、透明拼接屏视频…

Apipost自动化测试+Jenkins实现持续集成

Apipost 自动化测试支持「持续集成」功能&#xff0c;在安装了Apipost的服务器中输入命令&#xff0c;即可运行测试脚本。 创建自动化测试脚本 在创建好的测试用例中选择「持续集成」。 点击新建&#xff0c;配置运行环境、循环次数、间隔停顿后点击保存会生成命令。 安装 Ap…

Git搭建

文件格式 <VirtuaHost * 80> nginx </virtualHost> pache xml server {} nginx conf格式 [xx] 配置内容 代码开发中版本控制,项目代码编译构建,项目版本迭代全流程 命令300条 Hospital Information System 开发语言分类: 编译型: C nginx ma…

C语言零基础入门第2天《 visual studio下载安装教程和搭建开发环境及踩坑指南》(保姆级图文教程)

visual studio下载安装教程和搭建开发环境 1、 项目实战效果图2、简单了解一下目前主流的开发环境3、 visual studio下载地址4、 visual studio安装教程5、 配置visual studio环境变量 6、如何新建一个C项目7、新建第一个C程序8、用代码测试创建的项目是否可用8、如何成功让代码…

spire.doc合并word文档

文章目录 spire.doc合并word文档1. 引入maven依赖2. 需要合并的word3. 合并文档代码4. 合并结果 spire.doc合并word文档 1. 引入maven依赖 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://r…

蓝桥杯(Python)每日练Day5

题目 OJ1229 题目分析 题目完全符合栈的特征&#xff0c;后进先出。如果能够熟练使用列表的9种方法那么这道题很容易解出。 题解 a[]#存衣服 nint(input()) for i in range(n):llist(input().split())#判断每一步的操作if len(l[0])2:a.append(l[1])else:while a.pop()!l…

蓝桥杯备战——1.点亮LED灯

1.解析原理图 由上图可以看到8个共阳LED灯接到了573输出口&#xff0c;而573输入接到单片机P0口上。当573 LE脚输入高电平时&#xff0c;输出随输入变化&#xff0c;当LE为低电平时&#xff0c;输出锁存。 由上图可以看到Y4C接到了或非门74HC02的输出端&#xff0c;而输入端为…

rabbitmq基础-java-4、Direct交换机

1、简介 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 2、特点 在Direct模型下&#xff1a; 队列与交换机的绑定&#xff0c;…

【RT-DETR有效改进】交叉形窗口网络 | CSWinTransformer(附代码 + 修改教程)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…

【Web前端开发基础】CSS3之Web字体、字体图标、平面转换、渐变

CSS3之Web字体、字体图标、平面转换、渐变 目录 CSS3之Web字体、字体图标、平面转换、渐变一、Web字体1.1 Web字体概述1.2 字体文件1.3 font-face 规则 二、字体图标2.1 字体图标2.2 字体图标的优点2.3 图标库2.4 下载字体包2.5 字体图标的使用步骤2.6 字体图标使用注意点2.7 上…

Hive常见问题汇总

Hive和Hadoop的关系 Hive 构建在 Hadoop 之上&#xff0c; HQL 中对查询语句的解释、优化、生成查询计划是由 Hive 完成的 所有的数据都是存储在 Hadoop 中 查询计划被转化为 MapReduce 任务&#xff0c;在 Hadoop 中执行&#xff08;有些查询没有 MR 任务&#xff0c;如&…

【开源】基于JAVA的假日旅社管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统介绍2.2 QA 问答 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿评论4.3 查询民宿新闻4.4 新建民宿预订单4.5 查询我的民宿预订单 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的假日旅社…

IDEA插件Apipost-Helper如何使用

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

OpenCV-26 拉普拉斯算子

一、拉普拉斯算子概念及其推导 索贝尔算子是模拟一阶导数&#xff0c;一阶导数越大的地方说明变化越剧烈&#xff0c;越有可能是边缘。 但是如果我们对f&#xff08;t&#xff09;求二阶导数呢&#xff1f; 可以发现边缘处的二阶导数 0&#xff0c;因此&#xff0c;我们可以利…

burp靶场--WebSockets安全漏洞

burp靶场–WebSockets安全漏洞 https://portswigger.net/web-security/websockets/what-are-websockets ### 什么是 WebSocket&#xff1f; WebSocket是一种通过 HTTP 发起的双向、全双工通信协议。它们通常在现代 Web 应用程序中用于流数据和其他异步流量。 在本节中&#x…

如何在美国硅谷高防服务器上运行自定义的脚本和应用程序

在美国硅谷高防服务器上运行自定义的脚本和应用程序需要一定的技术和知识。下面我们将介绍一些关键步骤&#xff0c;帮助您顺利地在这些服务器上运行自定义应用程序和脚本。 确保您有对服务器的访问权限&#xff0c;并且已经通过SSH等方式连接到服务器。接下来&#xff0c;您可…

基于springboot留守儿童爱心网站源码和论文

随着留守儿童爱心管理的不断发展&#xff0c;留守儿童爱心网站在现实生活中的使用和普及&#xff0c;留守儿童爱心管理成为近年内出现的一个热门话题&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计留守儿童爱心网站的目的就是借助计算机让复杂的管理操作变简单…

架构篇21:高性能负载均衡-算法

文章目录 轮询加权轮询负载最低优先性能最优类Hash 类源地址 HashID Hash 小结 负载均衡算法数量较多&#xff0c;而且可以根据一些业务特性进行定制开发&#xff0c;抛开细节上的差异&#xff0c;根据算法期望达到的目的&#xff0c;大体上可以分为下面几类。 任务平分类&…

【自然语言处理】【深度学习】文本向量化、one-hot、word embedding编码

因为文本不能够直接被模型计算&#xff0c;所以需要将其转化为向量 把文本转化为向量有两种方式&#xff1a; 转化为one-hot编码转化为word embedding 一、one-hot 编码 在one-hot编码中&#xff0c;每一个token使用一个长度为N的向量表示&#xff0c;N表示词典的数量。 即&…

IDEA导出jar

1、选择导出方式 2、选择Main Class 3、构建jar