前言

对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该方法针对图像中不同亮度区域进行亮度补偿,使得整个图像亮度背景趋于一致后,再进行常规的阈值分割。实验结果表明,用该方法能取得良好的分割效果。关于常规的阈值分割不是我这篇推文关注的,我这里只实现前面光照补偿的部分。算法的原理可以仔细看论文。论文原文见附录。

算法步骤

  • 如果是RGB图需要转化成灰度图。
  • 求取原始图src的平均灰度,并记录rows和cols。
  • 按照一定大小,分为个方块,求出每块的平均值,得到子块的亮度矩阵。
  • 用矩阵的每个元素减去原图的平均灰度,得到子块的亮度差值矩阵。
  • 用双立方插值法,将矩阵 resize成和原图一样大小的亮度分布矩阵。
  • 得到矫正后的图像:。

代码实现

Mat speed_rgb2gray(Mat src) { Mat dst(src.rows, src.cols, CV_8UC1);#pragma omp parallel for num_threads(12)   for (int i = 0; i < src.rows; i++) {        for (int j = 0; j < src.cols; j++) {            dst.at(i, j) = ((src.at(i, j)[0] << 18) + (src.at(i, j)[0] << 15) + (src.at(i, j)[0] << 14) +               (src.at(i, j)[0] << 11) + (src.at(i, j)[0] << 7) + (src.at(i, j)[0] << 7) + (src.at(i, j)[0] << 5) +              (src.at(i, j)[0] << 4) + (src.at(i, j)[0] << 2) +               (src.at(i, j)[1] << 19) + (src.at(i, j)[1] << 16) + (src.at(i, j)[1] << 14) + (src.at(i, j)[1] << 13) +               (src.at(i, j)[1] << 10) + (src.at(i, j)[1] << 8) + (src.at(i, j)[1] << 4) + (src.at(i, j)[1] << 3) + (src.at(i, j)[1] << 1) +              (src.at(i, j)[2] << 16) + (src.at(i, j)[2] << 15) + (src.at(i, j)[2] << 14) + (src.at(i, j)[2] << 12) +               (src.at(i, j)[2] << 9) + (src.at(i, j)[2] << 7) + (src.at(i, j)[2] << 6) + (src.at(i, j)[2] << 5) + (src.at(i, j)[2] << 4) + (src.at(i, j)[2] << 1) >> 20);        } } return dst;}Mat unevenLightCompensate(Mat src, int block_Size) {  int row = src.rows;  int col = src.cols;  Mat gray(row, col, CV_8UC1);  if (src.channels() == 3) {      gray = speed_rgb2gray(src);  } else {        gray = src;  } float average = mean(gray)[0];   int new_row = ceil(1.0 * row / block_Size);  int new_col = ceil(1.0 * col / block_Size);  Mat new_img(new_row, new_col, CV_32FC1);  for (int i = 0; i < new_row; i++) {     for (int j = 0; j < new_col; j++) {         int rowx = i * block_Size;           int rowy = (i + 1) * block_Size;            int colx = j * block_Size;           int coly = (j + 1) * block_Size;            if (rowy > row) rowy = row;           if (coly > col) coly = col;           Mat ROI = src(Range(rowx, rowy), Range(colx, coly));         float block_average = mean(ROI)[0];          new_img.at(i, j) = block_average;        } } new_img = new_img - average; Mat new_img2; resize(new_img, new_img2, Size(row, col), (0, 0), (0, 0), INTER_CUBIC);   Mat new_src;  gray.convertTo(new_src, CV_32FC1);    Mat dst = new_src - new_img2;    dst.convertTo(dst, CV_8UC1);  return dst;}

效果

可以看到经过这个算法处理之后,亮度确实被均衡了一些,从视觉效果上来看还是有作用的。

附录

  • 论文原文:https://wenku.baidu.com/view/f74cc087e53a580216fcfe52.html?from=search

同期文章

  • OpenCV图像处理专栏一 | 盘点常见颜色空间互转
  • OpenCV图像处理专栏二 |《Local Color Correction 》论文阅读及C++复现
  • OpenCV图像处理专栏三 | 灰度世界算法原理和实现
  • OpenCV图像处理专栏四 | 自动白平衡之完美反射算法原理及C++实现
  • OpenCV图像处理专栏五 | ACE算法论文解读及实现
  • OpenCV图像处理专栏六 | 来自何凯明博士的暗通道去雾算法(CVPR 2009最佳论文)
  • OpenCV图像处理专栏七 | 直方图均衡化算法及代码实现
  • OpenCV图像处理专栏八 | 《Contrast image correction method》 论文阅读及代码实现
  • OpenCV图像处理专栏九 | 基于直方图的快速中值滤波算法
  • OpenCV图像处理专栏十 | 利用中值滤波进行去雾
  • OpenCV图像处理专栏十一 | IEEE Xplore 2015的图像白平衡处理之动态阈值法
  • OpenCV图像处理专栏十二 |《基于二维伽马函数的光照不均匀图像自适应校正算法》
  • OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节
  • OpenCV图像处理专栏十四 | 基于Retinex成像原理的自动色彩均衡算法(ACE)

欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧

有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:

在这里插入图片描述

c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十五 |一种基于亮度均衡的图像阈值分割技术...相关推荐

  1. c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十三 | 利用多尺度融合提升图像细节...

    前言 今天为大家介绍一个利用多尺度来提升图像细节的算法.这个算法来自于论文<DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AN ...

  2. [Python图像识别] 四十六.图像预处理之图像去雾详解(ACE算法和暗通道先验去雾算法)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  3. 图像去雾算法--暗通道先验去雾算法

    图像去雾: 在雾天拍摄的图像容易受雾或霾的影响,导致图片细节模糊.对比度低以至于丢失图像重要信息,为解决此类问题图像去雾算法应运而生.图像去雾算法是以满足特定场景需求.突出图片细节并增强图片质量为目的 ...

  4. 暗通道先验去雾算法介绍及其几何意义的解释过程

    何恺明的暗通道先验(dark channel prior)去雾算法是CV界去雾领域很有名的算法,关于该算法的论文"Single Image Haze Removal Using Dark C ...

  5. 基于导向滤波的暗通道先验去雾算法(Python,可直接运行)

    基于导向滤波的暗通道先验去雾算法(Python语言,可直接运行) 1 编译环境 2 原理介绍 2.1 暗通道先验 2.1.1 暗通道先验理论与去雾模型 2.1.2 处理步骤 2.2 导向滤波求t(x) ...

  6. 基于OpenCV实现暗通道先验去雾算法及改进,效果惊人

    ❤️欢迎订阅<从实战学python>专栏,用python实现爬虫.办公自动化.数据可视化.人工智能等各个方向的实战案例,有趣又有用!❤️ 更多精品专栏简介点这里 治愈生活的良方 就是保持对 ...

  7. [论文阅读] (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  8. 图像去雾算法(二)基于暗通道先验算法学习笔记

    在http://write.blog.csdn.net/postedit/78301999中介绍了图像去雾的相关研究方法,发现目前为止在图像去雾方面,何凯明博士基于暗通道先验的算法具有很好的效果,关于 ...

  9. 基于MATLAB改进暗通道先验的图像去雾算法

    基于MATLAB改进暗通道先验的图像去雾算法 摘要:暗通道先验去雾算法求得的的透射率比较精细,去雾效果优于大多数去雾算法.然而在暗通道求取过程中,最小值滤波的处理会使得暗色向外扩张,导致透射率扩张变大 ...

最新文章

  1. GNN教程:DGL框架实现GCN算法!
  2. 目前银行利息高还是余额宝利息高?如何选择?
  3. tensorflow中的正则化函数在_tensorflow中的正则化及数据增强
  4. 防止文件重复定义之方法
  5. AE插件Aura Rowbyte Aura for Mac(AE几何粒子渲染效果插件)
  6. [Unity] ACT 战斗系统学习 3:ScriptableObject
  7. js预览本地word文档_怎么免费下载百度文库付费文档?
  8. 大公司和小公司的比较
  9. python得安什么安装包_初学 Python 需要安装哪些软件?
  10. An Objective-C Error
  11. 联想微型计算机改win76,装不了Win7?采用第六代酷睿处理器的电脑改装Win7的方法...
  12. dm9000a驱动源码分析
  13. VB6_小林的气象类模块
  14. JNI/NDK入门指南之JNI数据类型,描述符详解
  15. 30行python代码实现豆瓣电影排行爬取
  16. bootstrap之背景图+文字
  17. (每日一练c++)CC113 数独
  18. 多线程学习(九)-可阻塞的队列
  19. Springboot 项目学习
  20. HBase轻松入门之HBase架构图解析

热门文章

  1. 【UWB】ELM 极限学习机原理及公式推导
  2. 【控制】如何入门自动控制理论
  3. 联想笔记本ideapad700 15isk添加内存
  4. 【工具】WPS安卓电脑无广告版
  5. 计算机专业好的211大学6,计算机专业好的985大学有哪些?附985211计算机大学名单排名...
  6. 好好学python·运算符和流程控制
  7. Redis介绍及部署在CentOS7上(一) 1
  8. 修改CMD设置使其支持鼠标选择复制
  9. Performing User-Managed Database-18.7、Performing Complete User-Managed Media Recovery
  10. [摘录]第五章 与奋斗者分享利益