使用NNO区域进行色偏检测

news2024/10/7 20:34:29

想做图像的色偏检测,网上的资料全是同一套代码,就是2013年那个计算等价圆,然后直接用D-r>9 and K>0.6) or K>1.5,判断的代码(相信大家都查到过了)

但是色偏问题并不是这样简单的判断就可以的,还分为本质色偏和真实色偏,比如草地或天空的图像,本来就应该偏绿和偏蓝,那么就是本质色偏,不是真正的色偏。

然后我就找相关论文来看了,发现在这块的研究其实也不多,基本上就是重庆大学和武汉理工大学有硕士做相关研究,所以看了看他们的硕士论文,然后自己实现了2017年武汉理工那篇硕士论文。

 

第一次看到论文里写NNO区域我是懵逼的,查博客也没有相关的介绍,更别提怎么提取NNO的代码了,本着自利利他的原则,我还是开启下这里的空白吧!

NNO区域介绍

NNO全称near neutral objects,代表无色差表面,就是图像中本质色为白色或灰色的表面。

为什么要提取NNO区域做色偏检测呢,因为白色区域的表现色有效反应了图像的整体颜色,所以一般做法是根据原图像的等效圆参数与NNO区域的等效圆参数进行对比,利用变化趋势去判断图像是否偏色。

NNO区域提取步骤

1、此论文为了提高计算速率,首先将图像进行分块,可以大大缩短计算时间。

2、此论文提出一种自适应提取NNO区域的方法,按基于空间汇集策略的等效圆计算方法,完成分块、颜色空间转换、标记暗色块,计算得到等效圆圆心和半径

def NNO(h, w, image):
    m, n = 64, 64 # 划分为64*64的块
    h_new = h-(h%m)
    w_new = w-(w%n)
    image = image[0:h_new,0:w_new]
    block_h = h_new//m
    block_w = w_new//n
    averaged = block(block_h,block_w,image, m, n)
    lab = cv2.cvtColor(averaged,cv2.COLOR_BGR2LAB)
    l,a,b = cv2.split(lab)
    h, w = l.shape
    l1 = (l/255*100).astype(np.uint8) 
    L_area = np.zeros((h,w))
    L_area[np.where(l1>=20)and np.where(l1<=95)] = 1
    
    abvalue = np.zeros((m,n))
    for i in range(m):
        for j in range(n):
            aij = (a[i,j]-128)*(a[i,j]-128)
            bij = (b[i,j]-128)*(b[i,j]-128)
            abvalue[i,j] = math.sqrt(aij*aij+bij*bij)
    F = abvalue.sum()
    T = 0
    for i in range(m):
        for j in range(n):
            T += ((F-abvalue[i,j])/((m*n-1)*F))*abvalue[i,j]
    T = 1/2 * T
    mask = np.zeros((h,w))     
    mask[np.where(abvalue<T)] = 1    
    NNO = L_area * mask
    image_copy = copy.deepcopy(averaged)
    image_copy[np.where(NNO!=1)] = 0
    lab_nno = cv2.cvtColor(image_copy,cv2.COLOR_BGR2LAB)
    l_nno, a_nno,b_nno = cv2.split(lab_nno)
    u,D_sigma,sigma = DKr(a, b, m, n)

    u_nno,D_sigma_nno,sigma_nno = DKr(a_nno,b_nno, m, n)
    try:
        D_sigma_cr = (D_sigma - D_sigma_nno)/D_sigma
        u_cr = (u - u_nno)/u
        sigma_cr = (sigma - sigma_nno)/sigma
    except:
        if D_sigma == 0:
            D_sigma_cr = 0
        if u == 0:
            u_cr = 0
        if sigma == 0:
            sigma_cr = 0
    return D_sigma_cr, u_cr, sigma_cr,D_sigma_nno

全部代码

写在了我的github

https://github.com/jiafw/Color-Cast-Detection

如果对你有帮助,可以给个star~~~

复现数据不能保证和原文一模一样,但是测试结果还是可以的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文掌握Python虚拟环境-提升你的开发效率

在真正开始Python代码编写、编译、运行、调试和开发项目之前&#xff0c;必须要了解下Python的虚拟环境的配置&#xff0c;熟悉使用后&#xff0c;会大大提升后续的开发效率&#xff0c;减少非代码原因导致的问题。virtualenv就是Python中的Virtual Environment-虚拟环境。本文…

C#界面里Form.HelpButton 属性的使用

C#界面里Form.HelpButton 属性的使用 Form.HelpButton 属性是获取或设置一个值,该值指示是否应在窗体的标题框中显示“帮助”按钮。 在一般的开发中,很少有人使用这个属性,因为程序比较简单,只要用户一上手就可以使用了。 如果界面比较复杂,或者说功能比较多,就需要使…

04【MyBatis的类型处理器】

四、MyBatis的类型处理器 4.1 typeAliases别名配置 类型别名是为 Java 类型设置一个短的名字&#xff0c;可以方便我们引用某个类。 我们仔细观察mapper.xml配置文件&#xff0c;会发现不管是入参&#xff08;paramterType&#xff09;还是出参&#xff08;ResultType&#…

大数据面试题(三):MapReduce核心高频面试题

文章目录 MapReduce核心高频面试题 一、ReduceTask工作机制 二、请描述mapReduce有几种排序及排序发生的阶段&#xff1f; 1、排序的分类 2、自定义排序WritableComparable 3、排序发生的阶段 三、请描述mapReduce中shuffle阶段的工作流程&#xff0c;如何优化shuffle阶…

Android App开发手机阅读中实现平滑翻书效果和卷曲翻书动画实战(附源码 简单易懂 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、平滑翻书效果 与纸质书籍类似&#xff0c;手机上的电子书也有很多页&#xff0c;逐页浏览可采用翻页视图&#xff0c;然而翻页视图犹如一幅从左到右的绵长画卷&#xff0c;与现实生活中上下层叠的书籍并不相像&#xff0c;…

百度paddle框架 目标检测

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼&#xff0c;常常是伪装起来的好运。 数据集准备 2183张图片&#xff0c;训练集1693张&#xff0c;验证集245&#xff0c;测试集245张。 包含7种昆虫&a…

数据挖掘算法原理与实践:k-均值

目录 第一关&#xff1a;什么是质心 任务描述&#xff1a; 相关知识&#xff1a; 什么是质心&#xff1a; 编程要求&#xff1a; 测试说明&#xff1a; 第二关&#xff1a;动手实现k-均值 任务描述&#xff1a; 相关知识&#xff1a; 一、数据集介绍 二、k-means算法…

基于PHP+MySQL医院管理系统的设计与开发

随着各种医疗条件的发展,人们在寻医就药的时候更希望通过信息化的方式进行挂号等一系列操作,为此各大医院也开发出了配套的医院管理系统,方便医生和患者就诊,本系统就是这样通过PHP和MySQL开发的系统 PHP&#xff1a;MySQL医院管理系统根据实际情况分为了管理员,医生和患者三部…

Ubuntu上安装部署k8s集群

Ubuntu上安装部署k8s集群一、基础环境准备&#xff08;一&#xff09;环境说明1.主机说明&#xff08;二&#xff09;环境操作1. 设置Master与工作节点的机器名称及配置2. 解析主机3. 写入以下内容(注意IP地址和主机名换成自己的)&#xff1a;4. 虚拟内存swap分区关闭5. 开启防…

新零售时代下的实体门店步履维艰,实体门店应该如何起死回生吗?

传统实体店在新零售时代的下&#xff0c;大众的消费习惯早已经发生天翻地覆的变化&#xff0c;因而实体行业受到新型消费带来的冲击&#xff0c;再加上电商平台的迅速崛起与发展&#xff0c;实体门店更加是步履维艰。因此改变是必然&#xff0c;那么传统实体店想要转型走新零售…

万字深剖进程地址空间(全程干货)

目录前言一、程序地址空间1.程序地址空间的简图(1)正文代码(2)初始化数据(3)未初始化数据(4)堆区(5)共享区(6)栈区(7)命令行参数和环境变量2.实验&#xff1a;验证程序地址空间中各个区域的存在3.实验&#xff1a;验证堆区和栈区中地址的增长方向4.实验&#xff1a;如何理解sta…

算法设计与分析 SCAU17104 视频流有效调度

17104 视频流有效调度 时间限制:1000MS 代码长度限制:10KB 提交次数:25 通过次数:9 题型: 编程题 语言: G;GCC;VC;JAVA Description 现在n个视频流要在一条通信链路上一个接一个的传送。视频流i由bi位组成&#xff0c;这些位需要一个常数速率&#xff0c; 在ti秒内被发送。你…

lua-快速入门学习

lua-快速入门学习 安装 centos环境&#xff1a; yum install lua windows&#xff1a; window 下你可以使用一个叫 “SciTE” 的 IDE环 境来执行 lua 程序&#xff0c;下载地址为&#xff1a; Github 下载地址&#xff1a;https://github.com/rjpcomputing/luaforwindows/…

基于JavaSpringmvc+Vue+elementUI大学生求职招聘系统详细设计实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取联系&#x1f345;精彩专栏推荐订阅&#x1f447;&#x1f…

前端开发技巧记录

1.取数组最后一位 let arr[1,2,3,4,5] console.log(arr[arr.length-1]) //5 console.log(arr.at(-1)) // 52.用??代替||&#xff0c;判空 ||运算符是左边是‘’ false 0 null undifined等&#xff0c;都会返回后侧的值。而??必须运算符左侧的值为null或undefined时&#x…

智能家居系统 QT

一 环境范围设置 &#xff08;1&#xff09;界面添加新控件 在mainwindow.ui 添加控件&#xff1a; 控件的类型 文本内容 对象名&#xff08;唯一&#xff09; 是否有槽函数 QLabel <温度< lable_随意 否 QLabel <湿度< lable_随意 否 QLabel <光…

CTF-misc练习(https://buuoj.cn)之第一页

一、金胖子 1.打开gif&#xff0c;看到有东西闪过&#xff0c;把gif分帧保存 2.就得到flag&#xff1a; 二、二维码 1.分析压缩包&#xff1a; 2.解压图片&#xff0c;分析图片&#xff0c;还有一个隐藏文件&#xff1a; 3.分离图片&#xff1a; 4.图片需要输入密码&#xff…

android studio 加载html文件(备忘)

android studio版本&#xff1a;2021.2.1 例程名称&#xff1a;htmlFile 我做的一个小东西需要一个软件协议之类的&#xff0c;之前直接用textview做&#xff0c;修改起来太麻烦&#xff0c;所以改成加载html文件&#xff0c;即解决了txt可能被修改的问题&#xff0c;如果下次…

python 3 - Clipspy模块使用

一、clipspy安装&#xff1a; Clipspy底层是基于clips规则引擎开发、支持python3的一个模块&#xff0c;在python3的工程中&#xff0c;可以通过调用clipsy的API接口实现clips规则引擎。 在线安装&#xff1a; pip install clipspy 当出现Successfully installed字样时&…

从零开始的深度学习之旅(3)

目录神经网络的损失函数1.损失函数的引入2.损失函数3.回归&#xff1a;误差平方和SSE3.1 MSE的使用3.2 二分类交叉熵损失函数3.3 极大似然估计推导二分类交叉熵损失3.4 用tensor实现二分类交叉熵损失4.多分类交叉熵损失函数4.1 实现多分类交叉熵损失神经网络的损失函数 1.损失…