ISP图像信号处理——平场校正介绍以及C++实现

参考文章1:http://t.csdn.cn/h8TBy

参考文章2:http://t.csdn.cn/6nmsT

参考网址3:opencv平场定标 - CSDN文库

平场校正一般先用FPN(Fixed Pattern Noise)固定图像噪声校正,即暗场校正;再用PRNU(Photo Response Non Uniformity)图像非均匀性响应校正,即明场校正;进行图像或者相机的校正。

平场校正就是以整帧图像的均值或者中值为目标图像,根据每个像素的特性不同,以响应增益gain为系数K和偏置offset为系数B,对每个像素进行校正,从而使得整幅图像看起来很均匀平滑,当然,为了简化计算,节省资源,也可以使用多个相邻的像素使用同一组校准参数。

一.按照算法的理论步骤

校正时,可以采用多段校正法将响应曲线分段校正,而更多的是简单暴力的两点校正法,也就是看成线性响应。首先相机对暗场进行一次曝光,得到每个像元的偏移(Offset);接下来对均匀光照条件下的灰度均匀物体进行一次成像,得到均匀场图像,最好能够使图像中所有的点都接近最大的灰度值;最后用均匀光场图像减去暗场图像,用相对标定的方法对图像增益(Gain)进行校正。

在暗场校正中,可以得到均值Vavgb,像素值Vinb;

在明场校正中,可以得到均值Vavgr,像素值Vinr;

可以得到增益响应系数K=(Vavgr-Vavgb)/(Vinr-Vinb);

偏置B=Vavgb-Vinb*K;

将n个像素的每一个像素点的K[n]和B[n]写入一个ram表中,当读取一帧图像时,对每一个像素进行校正Vout=Vin*K+B。必须首先做暗场再做明场,计算PRNU因子时要用到FPN因子的值。FPN校正时,像素值必须在1DN与127DN(可理解为灰度值)之间;PRNU校正时,像素值必须在128DN与254DN之间。

以上是针对相机或者图像偏数学算法原理的介绍。

上面这种方法感觉步骤不够具体,个人能力对于很多参数计算及过程难以理解,无法实现完整代码的撰写,有能力者希望可以指点一二。

二.利用平场定标技术校正(一组图像)

下面是我在另外一个博主这里看到的另一种方法平场定标,跟平场校正的功能比较像,这是针对一组拍摄好的图像做处理,我觉得很有启发:

平场定标(Flat-field calibration))是指通过对图像进行校正,消除由于光照不均匀或传感器噪声等因素引起的图像亮度和颜色的不均匀性。在OpenCV中,可以使用平场定标技术来校正图像。具体步骤如下:

1.收集平场图像:在相机的工作环境中,拍摄一系列完全均匀且没有目标物体的图像,这些图像被称为平场图像。

⒉.计算平场图像的平均值:将所有平场图像叠加在一起,并计算每个像素位置的平均值。这将得到一个平均平场图像。(三中用到)

3.计算平场图像的标准差:将所有平场图像与平均平场图像进行逐像素的差异计算,并计算每个像素位置的标准差。这将得到一个标准差平场图像。

4.校正图像:对于要校正的图像,将其与平均平场图像相减,并除以标准差平场图像。这将消除图像中的亮度和颜色不均匀性。

这种方法写了代码,但是最后得到的显示结果存疑,这里就不贴出来了。

三.常见的平场校正流程(两个输入图,一个输出图)

这个方法步骤是通过AI问答得到的,也具备一定的可借鉴性。

  1. 读取平场图像和待校正图像。(个人认为,平场图像可以用上面二中的平均平场图像。)
//个人根据现有资料理解所写,不确保正确性!
int main()
{//读入图片路径下的所有图像文件string imgdirpath="D:\\flatimages\\";string imgpath = imgdirpath + "*.bmp";  // test_imagesvector<String> filesVec;//遍历文件夹,两个参数分别表示文件的路径和保存图像具体路径的Vector容器。glob(imgpath, filesVec);if (filesVec.size() == 0){cout << "File is empty!" << endl;return -1;}//初始化平场图像,利用一组亮度均匀符合要求的图像的平均图像做平场图像Mat flatsum = Mat::zeros(height, width, CV_8UC3);int num = 0;for (int i = 0; i < filesVec.size(); i++){//叠加所有平场图像,并求平均值图像add(flatsum, ReadRaw10(filesVec[i].c_str()), flatsum);num++;}Mat flatmean3 = flatsum / num;//得到平均平场图像Mat inimg=imread("D:\\imgtest\\01.bmp");//读取待处理的输入图像Mat img_flat = flatfield2(inimg, flatmean3);//平场校正,imshow("img_flat", img_flat);waitKey(0);
  1. 如果没有一张符合要求的平场图像,需要利用一组图像计算平均图像用作平场图像。
  2. 对平场图像和待校正图像进行预处理,如图像增强、降噪等。
  3. 计算平场图像和待校正图像的平均值。
  4. 计算非均匀性模式:
  5. 将平场图像减去其平均值,得到平场图像的差异图像。
  6. 将待校正图像减去其平均值,得到待校正图像的差异图像。
  7. 将平场图像的差异图像除以待校正图像的差异图像,得到非均匀性模式。
  8. 校正待校正图像:
  9. 将待校正图像减去非均匀性模式,得到校正后的图像。
  10. 可选步骤:根据需要,进行其他的图像处理,如对比度调整、增强等。
  11. 输出校正后的图像。

以下是本人根据理解写的,代码下方的图像监视(VS插件,自行安装)得到的放大像素值截图(不是一一对应):

//(3)平场校正2。两个输入,一个输出,需要提前知道平场图像,用平均值
Mat flatfield2(Mat inImg,Mat flatImg)
{Mat grayflatImg;Mat grayinImg;cvtColor(flatImg, grayflatImg, COLOR_BGR2GRAY);cvtColor(inImg, grayinImg, COLOR_BGR2GRAY);//计算非均匀性模式Mat nonUniformityPattern = (grayflatImg - mean(grayflatImg))/ (grayinImg-mean(grayinImg));//待校正图像减去非均匀性模式,得到校正后的图像Mat flatcorrected1 = grayinImg - nonUniformityPattern;//转回彩色图像Mat flatcorrected3 = Mat::zeros(height, width, CV_8UC3);//cvtColor(flatcorrected1, flatcorrected3, COLOR_GRAY2BGR);cvtColor(flatcorrected1, flatcorrected3, COLOR_BayerBG2RGB);return flatcorrected3;
}

四.较为简单的步骤(一个输入图像,一个输出图像)

还有另一种方法,使用了OpenCV库来实现平场校正:

首先,将彩色图像转换为灰度图像,然后计算图像的平均值来获取亮度分布图。

接下来,将原始图像除以亮度分布图,得到校正后的图像。

最后,将校正后的图像转换回彩色图像并显示。

这种方法也写了代码,但是最后得到的显示结果也存疑,这里就不贴出来了。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试-友好的第三方库

目录 mock furl coverage deepdiff pandas jsonpath 自动化测试脚本开发中&#xff0c;总是会遇到各种数据处理&#xff0c;例如MOCK、URL处理、JSON数据处理、结果断言等&#xff0c;也会遇到所采用的测试框架不能满足当前需求&#xff0c;这些问题都需要我们自己动手解…

IP地址定位的特点

IP地址定位是一种广泛应用于网络领域的技术&#xff0c;它允许我们确定特定设备或用户在互联网上的位置。这项技术在很多方面都具有重要的特点&#xff0c;本文将深入探讨这些特点。 1.全球性覆盖&#xff1a; IP地址定位IP66_ip归属地在线查询_免费ip查询_ip精准定位平台具有全…

通信协议:Uart的Verilog实现(下)

4、UART接收器 UART接收器负责接收串行比特流&#xff0c;去除起始位和停止位&#xff0c;并以并行格式将数据保存到与主机数据总线相连的寄存器里。接收器无法获得发送时钟&#xff0c;因此尽管数据以标准比特率到达&#xff0c;但数据未必与接收主机内的时钟同步。同步问题可…

LaTex模板免费下载网站

LaTex模板免费下载网站 在进行文档排版时候&#xff0c;有时需要对不同类型文章的格式进行编辑&#xff0c;本博文推荐一个免费下载LaTex模板的网站。 一、网站地址 链接: LaTex模板网址&#xff1a;http://www.latextemplates.com/ 二、模板类型 模板类型如图2和图3所示。…

Ctfshow web入门 phpCVE篇 web311-web315 详细题解 全

CTFshow phpCVE web311 CVE-2019-11043 PHP远程代码执行漏洞复现&#xff08;CVE-2019-11043&#xff09;【反弹shell成功】-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞&#xff0c;使用某些特定配置的 Nginx PHP-FPM 的服务…

程序开发常用在线工具汇总

菜鸟工具# https://c.runoob.com/ 编码# ASCII码# https://www.habaijian.com/ 在线转换# https://www.107000.com/T-Ascii/http://www.ab126.com/goju/1711.html Base64# 在线转换# https://www.qqxiuzi.cn/bianma/base64.htmhttp://www.mxcz.net/tools/Unicode.aspx …

【Html】用CSS定义咖啡 - 咖啡配料展示

显示效果 代码 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>CodePen - For The Love Of Coffee</title><link rel"stylesheet" href"./style.css">&l…

Java中的IO流的缓冲流

不爱生姜不吃醋⭐️ 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;IO流体系结构&#x1f334;缓冲流1.提高效率的原理2.缓冲流的类型3.字符缓冲流两个特有方法 &#x1f334;总结 &#x1f334;IO流体系…

民企再续“助学故事”,恒昌公益两所“云杉校园”如何聚木成林?

撰稿|多客 来源|贝多财经 “生物世界丰富多彩、五花八门、琳琅满目&#xff0c;可谓大千世界芸芸众生”……这是遵义市正安县安场镇光明完全小学图书馆收藏的一本名为《闯入生物世界》书中所写景象。 在这所学校&#xff0c;课外书籍按照年级及类别进行划分&#xff0c;如一…

微信小程序案例2-3:婚礼邀请函

文章目录 一、运行效果二、知识储备&#xff08;一&#xff09;导航栏设置1、导航栏的相关配置项2、利用导航栏组件2、在页面配置文件中对导航栏进行配置3、在全局配置文件中对导航栏进行配置 三、实现步骤 一、运行效果 “婚礼邀请函”微信小程序由4个页面组成&#xff0c;分别…

ABB DDC779BE02 3BHE006805R0002 控制主板模块

ABB DDC779BE02 3BHE006805R0002 控制主板模块用于自动化和控制系统中&#xff0c;它们可能具有以下一些常见特点和功能&#xff1a; 处理能力&#xff1a;ABB DDC779BE02 3BHE006805R0002 控制主板模块通常具有强大的处理能力&#xff0c;可以执行复杂的控制算法和逻辑。 多种…

Fork() 函数:“父” 与 “子” 进程的交互(进程的创建)

阅读导航 前言一、fork函数初识1. 基本概念2. fork函数返回值 二、fork函数的写时拷贝三、总结温馨提示 前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也学习了一些Linux的基本操作&#xff0c;也了解并…

山石网科国产化防火墙,打造全方位边界安全解决方案

互联网的快速发展促进了各行各业的信息化建设&#xff0c;但也随之带来了诸多网络安全风险。大部分组织机构采用统一互联网接入方案&#xff0c;互联网出口承担着内部用户访问互联网的统一出口和对外信息服务的入口&#xff0c;因此在该区域部署相匹配的安全防护手段必不可少。…

Serverless 数仓技术与挑战(内含 PPT 下载)

近期&#xff0c;Databend Labs 联合创始人张雁飞发表了题为「Serverless 数仓技术与挑战」的主题分享。以下为本次分享的精彩内容&#xff1a; 主题&#xff1a; 「Serverless 数仓技术与挑战」 演讲嘉宾&#xff1a; 张雁飞 嘉宾介绍&#xff1a; Databend Labs 联合创始人…

vue重修002

文章目录 版权声明一 指令修饰符1. 什么是指令修饰符&#xff1f;2. 按键修饰符3. v-model修饰符4. 事件修饰符 二 v-bind对样式控制的增强-操作class1. 语法&#xff1a;2. 对象语法3. 数组语法4. 代码练习 三 京东秒杀-tab栏切换导航高亮四 v-bind对有样式控制的增强-操作sty…

代码随想录刷题 Day18

513.找树左下角的值 这个题用层序遍历比较简单&#xff0c;按照模版改一句话就可以&#xff1b;层序遍历用这个queue来实现&#xff1b; 用前序遍历的话就需要用递归比较麻烦 class Solution { public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> que…

Oracle-ADG无法应用日志问题(Bug-17695685)

问题: Oracle11.2.0.4.5的版本&#xff0c;ADG备库mrp进程出现无法应用日志的问题 问题原因分析: 查看当前mrp进程的状态&#xff0c;当前在应用日志thread# 1 626298 select inst_id,process,thread#,sequence#,status from gv$managed_standby;备库查看日志的状态&#xf…

国密国际SSL双证书解决方案,满足企事业单位国产国密SSL证书要求

近年来&#xff0c;为了摆脱对国外技术和产品的依赖&#xff0c;建设安全的网络环境&#xff0c;以及加强我国对网络信息的安全可控能力&#xff0c;我国推出了国密算法。同时&#xff0c;为保护网络通信信息安全&#xff0c;更高级别的安全加密数字证书—国密SSL证书应运而生。…

正则表达式新解

文章目录 是什么&#xff1f;正则用法匹配单个字符匹配一组字符其他元字符核心函数 贪婪匹配和非贪婪匹配正则练习 是什么&#xff1f; 正则表达式(Regular Expression)是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊…

案例题概述

案例题概述 考点 考点 新教材的新增考点 第一题必做&#xff0c;之后是4选2 感觉都是记忆的&#xff0c;课件完整一些&#xff0c;之后以看课件为主了&#xff0c;不在做详细笔记了