图像处理_ISP_坏点矫正
1 坏点介绍
图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素值不准确,这些有缺陷的像素即为图像坏点。
由于来自不同工艺技术和传感器制造商,尤其对一些低成本、消费品的sensor来说,坏点数会有很多。另外,sensor在长时间、高温环境下坏点也会越来越多,从而破坏了图像的清晰度和完整性。坏点校正的目的就是修复这类问题,通常坏点分为一下两种:
(1) 静态坏点:分为静态亮点和静态暗点。
静态亮点:一般来说像素点的亮度值是正比于入射光的,而亮点的亮度值明显大于入射光乘以相应比例,并且随着曝光时间的增加,该点的亮度会显著增加;
静态坏点:无论在什么入射光下,该点的值接近于0;
(2) 动态坏点:在一定像素范围内,该点表现正常,而超过这一范围,该点表现的比周围像素要亮。与sensor 温度、增益有关,sensor 温度升高或者gain 值增大时,动态坏点会变的更加明 显;
2 坏点校正成因
为什么图像处理的过程中需要做坏点校正,而且坏点校正(DPC)通常在ISP的pipeline靠前位置?主要有如下原因:
(1) 如果图像中存在坏点的话,ISP后续进行插值和滤波处理时,会影响周围的像素点值,因此需要在插值和滤波之前对坏点进行校正 ;
(2) 图像存在坏点比较多或动态坏点很多的情况下,会造成图像的边缘出现伪色彩的情况,这种现象不但影响图像的清晰度,而且会影响边缘的色彩;
(3) 坏点也会造成图像部分pixel闪烁的现象;
3 坏点校正策略
图像的坏点校正(DPC)通常在Bayer域(灰度图原理一致)进行。若Bayer域为R/G/B三通道,则分别进行坏点校正;若Bayer域为RGBIR格式,则分别对R/Gr/Gb/B四通道独立进行。动态坏点校正和静态坏点校正是两个相互独立的过程,可以同时开启,也可以只开启一个,视需要设置。
静态坏点校正:基于已有的静态坏点表,比较当前点的坐标是否与静态坏点表中的某个坐标一致,若一致则判定为坏点,然后再计算校正结果对其进行校正。一般情况下,每个sensor的坏点都不一样,需要sensor厂商给出每个sensor的静态坏点表,但是出于成本的考虑,很多sensor厂商并没有给出,而用户校正的话只能一个一个对其进行校正,因此对于一些低成本的sensor,静态坏点校正的实用性不是很强。另外,由于在硬件设计的时候需要占用大量的memory,考虑到芯片面积以及一些其他原因,因此静态坏点有大小的限制,不可以无限制的校正。
动态坏点校正:可以实时的检测和校正sensor 的亮点与暗点,并且校正的坏点个数不受限制。动态坏点校正相对静态坏点校正具有更大的不确定性。动态dpc可以分为两个步骤,分别为坏点检测和坏点校正。
4 源码实现(Matlab Version)
该算法是动态坏点校正策略实现,算法使用梯度百分比的方式去检测坏点,检测到坏点之后通过中值滤波进行坏点校正,最终通过alpha混合的方式计算出最终的计算结果。代码如下:
close all;
clear;
clc;
%% variable
dp_slope = 0.02;
dp_thresh = -0.3;
r=3; %Stencil radius
%% read raw image
% x = 0:255;
% y = dp_slope * x + dp_thresh;
% y(y<0) = 0;
% y(y>1) = 1;
% figure,
% plot(0:255,y)
% axis([0 255 0 1.5])
[filename, pathname] = ...
uigetfile({'*.raw'}, 'select picture');
str = [pathname filename];
fp = fopen(str, 'rb');
[X,l] = fread(fp, [1920,1080], 'uint16');
fclose(fp);
img = uint8(X/16)';
[height, width] = size(img);
img_correct = zeros(height, width);
%% Image edge extension
imgn=zeros(height+2*r,width+2*r);
imgn(r+1:height+r,r+1:width+r)=img;
imgn(1:r,r+1:width+r)=img(1:r,1:width);
imgn(1:height+r,width+r+1:width+2*r+1)=imgn(1:height+r,width:width+r);
imgn(height+r+1:height+2*r+1,r+1:width+2*r+1)=imgn(height:height+r,r+1:width+2*r+1);
imgn(1:height+2*r+1,1:r)=imgn(1:height+2*r+1,r+1:2*r);
%% dp algorithm
for i = r+1:height-r
for j = r+1:width-r
img_r = imgn(i-r:2:i+r, j-r:2:j+r);
data_r_center = img_r(r, r);
data_r_diff(1:r+1, 1:r+1) = abs(img_r - img_r(r,r));
data_r_sort = sort(img_r(:));
data_r_median = data_r_sort(r*2+1);
data_r_detect = data_r_diff * dp_slope + dp_thresh;
data_r_detect(data_r_detect < 0) = 0;
data_r_detect(data_r_detect > 1) = 1;
data_r_judge = sum(sum(data_r_detect > 0));
data_r_weight = sum(sum(data_r_detect)) / data_r_judge;
if i-r == 18 && j-r == 43
a = 1;
end
if data_r_judge >= 7
data_r_correct = data_r_median * data_r_weight + (1-data_r_weight) * data_r_center;
else
data_r_correct = data_r_center;
end
img_correct(i-r, j-r) = data_r_correct;
end
end
%% show
figure,imshow(uint8(img));
figure,imshow(uint8(img_correct));
我的个人博客文章地址,欢迎访问
我的CSDN文章地址,欢迎访问
我的GitHub主页,欢迎访问
图像处理_ISP_坏点矫正的更多相关文章
- ISP_DPC坏点矫正
ISP_DPC坏点矫正 1. 坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素 ...
- 技术前沿:ISP芯片终极进化——VP芯片(AI视觉处理器)
1.计算机视觉的定义 广义与狭义 从广义上说,计算机视觉就是"赋予机器自然视觉能力"的学科.自然视觉能力,就是指生物视觉系统体现的视觉能力. 从狭义上讲,计算机视觉是以图像(视频) ...
- ISP(图像信号处理)算法概述、工作原理、架构、处理流程
目录 ISP的主要内部构成: ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构: 1.ISP逻辑 2.运行在其上的firmware ISP上的Firmware ...
- ISP PIPLINE(零) 知识综述预热
本文为camera isp pipline概述 ISP,即image signal processing.为图像成型做的处理工作.适应不同光学环境下图像的还原. pipline流程如下: 光通过LEN ...
- ISP-OB, pedestal 以及ISP概述
网上的直接参考资料 1. https://zhuanlan.zhihu.com/p/36896537 2. https://blog.csdn.net/m0_38049850/article/deta ...
- 简述安霸pipeline及其关键参数--raw域模块
何为pipeline: sensor输出是一种叫Bayer 格式的RAW数据图像.ISP 对RAW数据图像的处理流程就是我们说的ISP PipeLine.通过PipeLine的处理,我们可以从一副RA ...
- 《图像处理实例》 之 目标旋转矫正(基于区域提取、DFT变换)
目标:1.把矩形旋转正. 2.把文字旋转校正. ...
- Atitit 图像处理知识点 知识体系 知识图谱v2
Atitit 图像处理知识点 知识体系 知识图谱v2 霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像 ...
- 【转载】GPU 加速下的图像处理
Instagram,Snapchat,Photoshop. 所有这些应用都是用来做图像处理的.图像处理可以简单到把一张照片转换为灰度图,也可以复杂到是分析一个视频,并在人群中找到某个特定的人.尽管这些 ...
- opencv6.4-imgproc图像处理模块之直方图与模板
接opencv6.3-imgproc图像处理模块之边缘检测 九.直方图的相关操作 直方图是图像中像素强度分布的图形表达方式:它统计了每一个强度值所具有的像素个数 上图是一个灰色图像,通过对图像的每个不 ...
随机推荐
- elasticsearch升级和索引重建。
1.背景描述 2020年团队决定对elasticsearch升级.es(elasticsearch缩写,下同)当前版本为0.9x,升级到5.x版本.es在本公司承载三个部分的业务,站内查询,订单数 ...
- 开心档之MySQL 连接
MySQL 连接 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [root@ ...
- [C++提高编程] 3.1 string容器
文章目录 3.1 string容器 3.1.1 string基本概念 3.1.2 string构造函数 3.1.3 string赋值操作 3.1.4 string字符串拼接 3.1.5 string查 ...
- 使用ChatGPT4协助完成读取文件中不同字的数量
使用ChatGPT4识别:用java读取文件中不同字的个数. 解析:该程序将读取名为"file.txt"的文件,并计算文件中每个不同字的出现次数.它使用一些字符串操作来清理单词,并 ...
- css3 flex弹性布局详解
一.flexbox弹性盒子 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这 ...
- 【H5】Emmet 指令 HTML
Emmet操作指南 HTML篇 生成带有内容的标签 标签名{内容}可以生成带有内容的标签 div{abc} <div>abc</div> 生成带有属性的标签 生成带有class ...
- 在 ASP.NET Core Web API 中处理 Patch 请求
一.概述 PUT 和 PATCH 方法用于更新现有资源. 它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改. 在 ASP.NET Core Web API 中,由于 C# 是一种静 ...
- 6R机械臂运动规划及仿真
博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 Moveit!机械臂控制 文件下载-古月ROS教程视频配套资料 解决Could not find a packa ...
- 【GiraKoo】Android Studio控制台乱码
[GiraKoo]Android Studio控制台乱码 启动Android Studio进行编译时,可能会遇到控制台出现异常的乱码. 本文介绍该情况的解决方案. ����: δ������쳣���� ...
- 代码随想录算法训练营Day24 回溯算法| 理论基础 77. 组合
代码随想录算法训练营 回溯 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式. 在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯. 回溯是递归的副 ...