摘要

何为坏点?
坏点指的是芯片加工过程中一些电子元器件的损坏,不会呈现图像的像素点,最终效果是图像上的黑点。

坏点产生的原因:

  1. 感光芯片本身工艺瑕疵造成
  2. 光线采集存在缺陷
  3. 加工过程中芯片损坏

DPC算法的作用:Bayer模式下坏点矫正。

基本POINT算法矫正原理:
坏点往往是一个邻域内极亮或极暗的点,以5*5邻域为检测区域。

  1. 计算PC于其他像素的差值;
  2. 如果PC比周围所有值大或者小说明可能为坏点;
  3. 设置一个阈值,如果8个差值的绝对值都超过阈值,则判定为坏点;
  4. 检测出坏点以后,可以用8个邻近像素的中位值来替代PC处的像素值;

Matlab程序实现

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%代码---ISP算法的DPC算法(POINT法,用于坏点矫正)
%Author:Zhu
%时间:2022.5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear;
close all;
% --------阈值与扩展的边缘---------
Threshold = 30;
filePath = 'E:\\1.raw';
bayerFormat = 'RGGB';
width = 4096;
height= 3000;
bits = 8;
%%%读取RAW
bayerData = readRaw(filePath, bits, width, height);
figure();
imshow(uint8(bayerData));
title('raw image');%%%遍历像素点,因为是5个为一个邻域,因此先暂不处理3行边缘
for i=3:1:height-3for j=3:1:width-3%%%8邻域像素点Rc = bayerData(i,j);R1 = bayerData(i-2,j-2);R2 = bayerData(i-2,j);R3 = bayerData(i-2,j+2);R4 = bayerData(i,j-2);R5 = bayerData(i,j+2);R6 = bayerData(i+2,j-2);R7 = bayerData(i+2,j);R8 = bayerData(i+2,j+2);%%%计算中心像素与周围八个像素值的差;subR_Value1=Rc-R1;subR_Value2=Rc-R2;subR_Value3=Rc-R3;subR_Value4=Rc-R4;subR_Value5=Rc-R5;subR_Value6=Rc-R6;subR_Value7=Rc-R7;subR_Value8=Rc-R8;%%%如果插值都大于0或都小于0,则可能是坏点;若差值超过阈值,则一定是坏点if((subR_Value1>Threshold && subR_Value2>Threshold && subR_Value3>Threshold && subR_Value4>Threshold && subR_Value5>Threshold && subR_Value6>Threshold && subR_Value7>Threshold && subR_Value8>Threshold)||(subR_Value1<-Threshold && subR_Value2<-Threshold && subR_Value3<-Threshold && subR_Value4<-Threshold && subR_Value5<-Threshold && subR_Value6<-Threshold && subR_Value7<-Threshold && subR_Value8<-Threshold))%%%如果是坏点,则根据中值进行纠正Sort_Pixel = [R1,R2,R3,R4,R5,R6,R7,R8];Rc = median(Sort_Pixel);endbayerData(i,j) = Pc;end
endbayerData = uint8(bayerData);%%%显示纠正后的Raw图
figure;
imshow(bayerData);
title('correct image');

附上Matlab读取RAW图的程序

function rawData = ReadRaw(fileName, bitsNum, width, height)
fin = fopen(fileName, 'r');
switch bitsNumcase 8disp('bits: 8');format = sprintf('uint8=>uint8');case 10disp('bits: 10');format = sprintf('uint16=>uint16');case 12disp('bits: 12');format = sprintf('uint16=>uint16');case 16disp('bits: 16');format = sprintf('uint16=>uint16');
end
I = fread(fin, width*height, format);
z = reshape(I, width, height);
z = z';
rawData = z;
end

DPC效果

ISP算法----基本DPC算法实现代码相关推荐

  1. 深度学习时间序列预测:GRU算法构建多变量时间序列预测模型+代码实战

    深度学习时间序列预测:GRU算法构建多变量时间序列预测模型+代码实战 注意参考:深度学习多变量时间序列预测:GRU算法构建单变量时间序列预测模型+代码实战 GRU(Gate Recurrent Uni ...

  2. 《大厂算法面试题目与答案汇总,剑指offer等常考算法题思路,python代码》V1.0版...

    为了进入大厂,我想很多人都会去牛客.知乎.CSDN等平台去查看面经,了解各个大厂在问技术问题的时候都会问些什么样的问题. 在看了几十上百篇面经之后,我将算法工程师的各种类型最常问到的问题都整理了出来, ...

  3. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

    源:十三种基于直方图的图像全局二值化算法原理.实现.代码及效果.

  4. Kd-Tree算法原理和开源实现代码

    Kd-Tree算法原理和开源实现代码 本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术--Kd-Tree(Kd树).Kd-Tree,即K-dimensional tree,是一种高维索引树形 ...

  5. 【机器学习】K-Means算法的原理流程、代码实现及优缺点

    分类是根据样本某些属性或某类特征(可以融合多类特征),把样本类型归为已确定的某一类别中.机器学习中常见的分类算法有:SVM(支持向量机).KNN(最邻近法).Decision Tree(决策树分类法) ...

  6. ML之LiR之PLiR:惩罚线性回归PLiR算法简介、分类、代码实现之详细攻略

    ML之LiR之PLiR:惩罚线性回归PLiR算法简介.分类.代码实现之详细攻略 目录 PLiR算法简介 PLiR算法分类 PLiR算法代码实现 PLiR算法简介 更新-- PLiR算法分类 1.RiR ...

  7. TOPSIS(逼近理想解)算法原理详解与代码实现

    写在前面: 个人理解:针对存在多项指标,多个方案的方案评价分析方法,也就是根据已存在的一份数据,判断数据中各个方案的优劣.中心思想是首先确定各项指标的最优理想值(正理想值)和最劣理想值(负理想解),所 ...

  8. 数据结构与算法必备的 50 个代码实现

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 数据结构和算法是程序员的内功心法和基本功.无论是人工智能还是其它计算机科学领域,掌握扎实的数据 ...

  9. 算法 | 数据结构与算法(代码版)

    ================================================= 博主github:https://github.com/MichaelBeechan 博主CSDN: ...

最新文章

  1. Http 请求头中的 Proxy-Connection
  2. 2-2 Time类的定义_JAVA
  3. Windows驱动开发学习笔记(五)—— SSDT HOOK
  4. windows快捷键命令汇总整理
  5. PHP经验总结 - 开发技巧分享
  6. 博纳影业集团副总裁黄巍逝世 享年52岁
  7. oracle账户用root权限执行sh,安装Oracle执行orainstRoot.sh与root.sh作用
  8. 【手势识别】基于matlab GUI肤色手势识别(带面板)【含Matlab源码 1650期】
  9. JSTL流程控制操作--c:if,c:choose,c:when,c:other
  10. java mysql sqlhelper_SQLHelper 的 java版本 - 转载
  11. 常用技术面试题(软件测试)
  12. QT学习笔记(十五):QLabel的点击事件(clicked)添加
  13. HDMI-FMC子卡的使用(基于VC707)(中)
  14. 阿里云服务器申请免费ssl证书
  15. 浙江移动彩信新sp接入指南
  16. mysql替代符号,mysql特殊符号
  17. JAVA 编程语言基础笔记
  18. Java学习-java中的与或非
  19. Excel利用公式向导不会函数也可去掉文本2端空格
  20. 复利单利计算的源代码

热门文章

  1. php 每日一句名人名言,每日一句生活格言
  2. python怎么取共轭_python矩阵运算,转置,逆运算,共轭矩阵实例
  3. 基于BQ76PL455的BMS电路板设计
  4. html表格中加下拉,怎样在iview的Table表格中添加下拉菜单?
  5. Selenium | 页面跳转后无法定位到元素,怎么破?
  6. Android Hawk的源码解析,一款基于SharedPreferences的存储框架
  7. 【Windows】win10或win11的资源管理器 文件夹中存在今天、昨天、本周更早时候之类的分割线分组依据如何怎么去除去掉?
  8. 译码阻塞和死锁的等待资源
  9. 云端之争,混合云再胜一筹
  10. 解决“ValueError: Unknown resampling filter (107). Use Image.NEAREST (0), Image.LANCZOS (1), Image.BIL”