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混合的方式计算出最终的计算结果。代码如下:

1 close all;2 clear;3 clc;4 %%variable5 dp_slope = 0.02;6 dp_thresh = -0.3;7 r=3; %Stencil radius8

9 %%read raw image10 % x = 0:255;11 % y = dp_slope * x +dp_thresh;12 % y(y<0) = 0;13 % y(y>1) = 1;14 %figure,15 % plot(0:255,y)16 % axis([0 255 0 1.5])17

18 [filename, pathname] =...19 uigetfile({'*.raw'}, 'select picture');20 str =[pathname filename];21 fp = fopen(str, 'rb');22 [X,l] = fread(fp, [1920,1080], 'uint16');23 fclose(fp);24 img = uint8(X/16)';

25 [height, width] =size(img);26 img_correct =zeros(height, width);27

28 %%Image edge extension29 imgn=zeros(height+2*r,width+2*r);30 imgn(r+1:height+r,r+1:width+r)=img;31 imgn(1:r,r+1:width+r)=img(1:r,1:width);32 imgn(1:height+r,width+r+1:width+2*r+1)=imgn(1:height+r,width:width+r);33 imgn(height+r+1:height+2*r+1,r+1:width+2*r+1)=imgn(height:height+r,r+1:width+2*r+1);34 imgn(1:height+2*r+1,1:r)=imgn(1:height+2*r+1,r+1:2*r);35

36 %%dp algorithm37 for i = r+1:height-r38 for j = r+1:width-r39

40 img_r = imgn(i-r:2:i+r, j-r:2:j+r);41 data_r_center =img_r(r, r);42 data_r_diff(1:r+1, 1:r+1) = abs(img_r -img_r(r,r));43 data_r_sort =sort(img_r(:));44 data_r_median = data_r_sort(r*2+1);45 data_r_detect = data_r_diff * dp_slope +dp_thresh;46 data_r_detect(data_r_detect < 0) = 0;47 data_r_detect(data_r_detect > 1) = 1;48 data_r_judge = sum(sum(data_r_detect > 0));49 data_r_weight = sum(sum(data_r_detect)) /data_r_judge;50 if i-r == 18 && j-r == 43

51 a = 1;52 end53 if data_r_judge >= 7

54 data_r_correct = data_r_median * data_r_weight + (1-data_r_weight) *data_r_center;55 else

56 data_r_correct =data_r_center;57 end58 img_correct(i-r, j-r) =data_r_correct;59

60 end61 end62

63 %%show64 figure,imshow(uint8(img));65 figure,imshow(uint8(img_correct));

仿真效果如下:

动态坏点校正前:

动态坏点校正之后:

python检测屏幕亮点_图像处理之坏点校正及源码实现相关推荐

  1. matlab去除坏点,图像处理之坏点校正及源码实现

    1.坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素 ...

  2. python检测屏幕亮点_使用Python和OpenCV检测图像中的多个亮点

    点击上方"蓝色小字"关注我呀 本文来自光头哥哥的博客[Detecting multiple bright spots in an image with Python and Ope ...

  3. 人脸检测颜值软件_百度AI人脸识别测颜值源码

    百度AI人脸识别测颜值由百度AI官方推出百度AI人脸识别测颜值源码,目前已将人脸识别氛围V2和V3两个接口,使用前需要参考相应的文档权限来选择接口类型.今天为大家带来的源码,就是让大家能够了解学习到百 ...

  4. python括号匹配问题_支持通配符的括号匹配问题源码+详细流程代码(python)

    问题: 判断一个有左括号和右括号.以及其他ASCII字符组成的表达式是合法. 判断条件是左括号-右括号数目.次序配对,可多层嵌套.如果有*,则*可作为0个或者1个右括号,如果匹配则输出ok,不匹配则输 ...

  5. python爬取豆瓣读书top250并保存xls(含源码)

    python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...

  6. 基于Python的旅游管理系统微信小程序设计与实现毕业论文+项目源码及数据库

     源码获取:我的博客资源页面可以下载!!!! 项目名称 基于Python的旅游管理系统微信小程序设计与实现毕业论文+项目源码及数据库 系统说明 本商业旅游系统可以分为三个部分,即微信小程序的手机客户端 ...

  7. Python实现16进制转10进制算法及源码

    Python实现16进制转10进制算法及源码 16进制是一种常用的数学计数方式,而在Python中将16进制数据转换为10进制数据是非常简单和快捷的.下面我将展示如何使用Python实现16进制转10 ...

  8. Android实现手部检测和手势识别(可实时运行,含Android源码)

    Android实现手部检测和手势识别(可实时运行,含Android源码) 目录 Android实现手部检测和手势识别(可实时运行,含Android源码) 1. 前言 2. 手势识别的方法 (1)基于多 ...

  9. python爬虫爬取王者荣耀官网全部英雄头像(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests import json from bs4 i ...

最新文章

  1. SQL SERVER 2008权限配置
  2. C++求从1到n的正整数中1出现的次数
  3. javascript回调函数(模式)原理和示例深入分析
  4. JS 基础 —— JavaScript 关键字(keyword)与保留字
  5. string、stringbuilder、stringbuffer区别
  6. 【算法系列之五】对称二叉树
  7. Android studio 去除软件运行时顶部原有的蓝色/绿色框
  8. python123第四周作业_科学计算和可视化
  9. Silverlight 数据绑定 (1):怎样实现数据绑定 Silverlight 数据绑定 (2):Source to Target...
  10. ibm linux mq 发送消息_面试官提问:说说你对消息队列的理解
  11. 安卓机型刷写第三方twrp 刷写第三方rom的教程和一些问题解决
  12. 基于51单片机的双机通信系统设计protues仿真
  13. 锐捷密码忘了!-锐捷密码查看器
  14. 数据科学之 如何找到指标的最 佳分裂点的几个想法
  15. OS学习笔记-2(清华大学慕课)mooc实验介绍
  16. 哪款无线蓝牙耳机性价比高?性价比高的无线蓝牙耳机推荐
  17. AUTOCAD——隔离
  18. 计算机为啥启用不了网络发现,Win7系统网络发现打不开怎么办 win7不能启用网络发现如何解决...
  19. Java进阶(四)多态
  20. XSS-labs靶场通关秘籍(level 17-20)

热门文章

  1. ubuntu18.04设置清华镜像源
  2. 3.1-3.3 FEMA
  3. c#线程学习之ManualResetEvent和AutoResetEvent的区别!
  4. 安卓Android手机系统内文件夹全解
  5. 大数据治理解决方案PPT
  6. 工程项目管理软件有哪些
  7. C#中使用7Z进行压缩解压
  8. 普华永道区块链白皮书:区块链让城市更加智能 普华永道 中文精简版
  9. excel数据库设计表转换成sql建表语句
  10. 【交互式用户流程与演示设计】上海道宁与​Overflow让您能更自信的展示您的设计