ISP——坏点矫正(Defective Pixel Correction,DPC)

本文介绍了ISP(图像信号处理)中坏点矫正的原因、分类及多种动态矫正方法,包括PINTO算法、中值梯度滤波法、DPC与demosaic结合法和行检测法。详细阐述了每种算法的思路和步骤,提供了坏点检测与矫正的深入理解。
摘要由CSDN通过智能技术生成


一、出现原因

1.感光元件芯片自身工艺技术瑕疵造成以及长期使用造成的瑕疵;
2.光线采集存在缺陷;

二、坏点分类

1.hot pixel: 固定保持较高的像素值,一般呈现为画面高亮的点;
2.dead pixel: 固定保持较低的像素值,一般在画面中呈现为暗点;
3.noise pixel:信号强度随光照呈现的变化规律不符合正常的变化规律;

三、矫正方法

1.静态矫正:通常由sensor厂商在生产后进行标定,把所有坏点的坐标位置记录下来,然后矫正的时候直接通过查表得方式找到坏点进行矫正。(此种方法无法适应因长期使用造成的后期瑕疵情况)
2.动态矫正:就是在ISP算法中通过特殊得算法判断一个点是否为坏点,如果是坏点就行行矫正,否则原样输出;

动态矫正

1.PINTO算法

5*5
思想:坏点像素点比周围里亮或者暗
1.计算中心点与周围8个像素点的像素差值;
2.如果有正有负,则判断该点为正常点;
3.如果8个值全为正或者全为负值,则进行下一步判断;
4.如果8个差值的绝对值均大于阈值,则认为该点是坏点,用8个邻域像素的中位值代替该点,反之则判断该点为正常点。

算法缺点:对边缘处的坏点检测无效,因为边缘处也有较大的像素差值波动

2.中值梯度滤波法

在这里插入图片描述
该算法的作者针对三个通道都使用这一种窗口进行检测(Gr和Gb分开计算就是如图5*5的邻域)。思想:在边缘方向,坏点在该方向上的梯度是很高的。

具体步骤如下:

1.计算四个方向的梯度:
水平方向三个二阶梯度:Dh1 = |P1+P3-2P2|, Dh2 = |P4+P5-2Pc|,Dh3 = |P6+P8-2P7|;
数值方向三个二阶梯度:Dv1 = |P1+P6-2
P4|, Dv2 = |P2+P7-2Pc|,Dv3 = |P3+P8-2P5|;
45°三个二阶梯度:D45_1 = 2*|P4-P2|, D45_2 =|P3+P6-2Pc|, D45_3 = 2|P7-P5|;
135°三个二阶梯度: D135_1 = 2*|P2-P5|, D135_2 =|P1+P8-2Pc|, D135_3 = 2|P7-P4|;
2.取出各个方向梯度绝对值的中值median_Dh = median(Dh1,Dh2,Dh3),同理求出其他三个方向的中值;
3.求出四个中值的最小值作为边缘方向:min_grad = min(median_Dh,median_Dv,median_D45,median_D135);
4.如果最小梯度方向为水平或者竖直,若过Pc那个梯度的绝对值大于同方向的另外两个梯度绝对值和的4倍,则Pc为坏点;
5.如果是45°方向,则计算135°三个梯度绝对值两两之差的绝对值的和
在这里插入图片描述
如果D135_sum小于100,若此时D45_2>3x(D45_1+D45_3)且D135_2>3x(D135_1+D135_3),则Pc为坏点。如果D135_sum大于等于100,则D45_2>3x(D45_1+D45_3)就为坏点;
6.135°方向和45°相反的方向计算和判断即可;
7.为减少漏判,当Pc小于15且周围点都大于Pc40以上,则Pc为坏点。如果Pc大于230,且周围的点都下于Pc30以下,则该点为坏点;
8.边缘为水平方向,且判断为坏点,如过|P4-Pc|<|Pc-P5|则Pc更靠近P4,根据同一颜色通道亮度的渐变性可以推导出ouput=P4+(P2+P7-P1-P6)/2;否则ouput=P5+(P2+P7-P3-P8)/2;
9.如果为竖直方向可以参考水平方向求出;
10.边缘为45°,如果|P3-Pc|<|P6-Pc|则根据同一原则output=P3+(P4+P7-P2-p5)/2;否则为output=P6+(P2+P5-P7-p4)/2;
11.边缘为135°则按照45°的方式反过来计算即可。

3.DPC和demosaic结合法

先插值,变成RGB图像,再根据所估计的值和PINTO算法进行DPC

4.行检测法

根据单行或者多行数据进行检测和矫正,降低对硬件buffer的要求。

四、代码

PINTO算法代码参考https://blog.csdn.net/wtzhu_13/article/details/119077642

中值梯度滤波法

clc;clear;close all;
tic;
% --------global velue---------
expandNum = 2;
Th1 = 30;
Th2 = 40;
% --------raw parameters-------
filePath = '../images/HisiRAW_4208x3120_8bits_RGGB.raw';
bayerFormat = 'RGGB';
bayerBits = 8;
row = 4208;
col = 3120;
% -----------------------------

rawData = readRaw(filePath, bayerBits, row, col);
[height, width, channel] = size(rawData);

img_expand = expandRaw(rawData, expandNum);

disImg = zeros(height, width);
for i = expandNum+1 : 2 : height+expandNum
    for j = expandNum+1 : 2 : width+expandNum
        % R
        % get the pixel around the current R pixel
        around_R_pixel = [img_expand(i-2, j-2) img_expand(i-2, j) img_expand(i-2, j+2) img_expand(i, j-2) img_expand(i, j+2) img_expand(i+2, j-2) img_expand(i+2, j) img_expand(i+2, j+2)];
        disImg(i-expandNum, j-expandNum) = gradJudgeDefectPixel(around_R_pixel, img_expand(i, j), Th1,Th2);
        % Gr
        % get the pixel around the current Gr pixel
        around_Gr_pixel = [img_expand(i-2, j-1) img_expand(i-2, j+1)  img_expand(i-2, j+3) img_expand(i, j-1) img_expand(i, j+3) img_expand(i+2, j-1) img_expand(i-2, j+1) img_expand(i-2, j+3)];
        disImg(i-expandNum, j-expandNum+1) = gradJudgeDefectPixel(around_Gr_pixe
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值