文档章节

水下图像增强相关算法的一个简单小结。

abcijkxyz
 abcijkxyz
发布于 2016/11/22 16:39
字数 1564
阅读 6
收藏 0
点赞 0
评论 0

  最近一直没有找到感兴趣的研究课题,下了几个最新的去雾的论文,随便看了下,觉得都是为了写论文而做的论文,没有什么创新性,也就没有想法去实现他们。偶尔看到了一些关于水下图像增强方面的文章,闲来无聊试着去看看效果,不过也觉得非常让人失望,似乎并没有特别有效的算法。

      就我看得几篇文章而言,这类算法都不是从原理上、或者说某一个数学模型、抑或是某种先验知识出发,而提出的算法,都是一种没有什么特强的理论支持,只是通过一些实际的试验而得到的一些过程而已。这些过程对于论文本身中提供的测试图像都有着较为理想的处理效果,而一旦选择一副其他性质的水下图像,其结果往往难以令人满意。因此,也就没有类似于去雾算法界暗通道先验那样不可逾越的黄金文章了。

       我看了三篇文章,第一篇是Underwater Image Enhancement Using an Integrated Colour Model,07年的文章,算法的细路很简单,借用文章中的一副流程图来说明下:

           

 

     很简单的步骤,首先是进行对比度拉升,可以看成是类似于PS中的自动对比度,接着将处理后的图像转换到HSI颜色空间,在对S和I分量进行拉升,之后再将HSI空间的数据转换到RGB空间得到最终的图像。在百度上搜索谁下图像增强,能搜索到一个相关的专利,见http://www.google.com/patents/CN102930512A?cl=zh,这个专利的内容其实也没啥新意,一样的就是在HSI空间将S和I分量用其他的方式进行了拉升和处理,还是发明专利,呵呵,大家都知道国内专利是怎么回事。

      这篇论文对算法部分的描述还是过于简单,虽然对比度拉升给了个公式,但并没有明确的说明S和I分量的具体处理流程,他给的两篇参考文献对应的网站也无法打开了,因此无法对原始的算法进行验证,我用GIMP的对比度拉升 + HSV拉升未能达到论文中的效果。 

       第二篇和第三篇都是用的图像融合的方式来处理的,分别是Enhancing Underwater Images and Videos by Fusion以及Effective Single Underwater Image Enhancement by Fusion,后一篇是国内合工大和中科大的作者写的,很明显可以看得出模仿的笔迹 。

       其实这种通过融合的方式也很简单,就是先找两种算法得到对原图两种不同程度的增强的结果,然后选择好一个融合系数的计算公式,再进行拉普拉斯金字塔融合,从而提取更好的结果。Enhancing Underwater Images and Videos by Fusion这篇文章就是选用了白平衡的结果(记为I1)作为融合的对象一, 用对I1进行双边滤波+CALHE之类的算法处理的结果(记为I2)作为融合的对象2。标准的拉普拉斯融合的融合算法一般有:最大值、最小值、平均值,这里则修改为某一种权重系数的融合,最后进行拉普拉斯融合。

       因此,这个算法的处理结果的好坏性完全取决于融合的对象,即两个前处理算法。但是同样存在的问题就是算法的普遍适应性,某一种前处理对某一类合适,对其他的就不一定了。

       我这里经过一些实验,也提出一种前处理算法,这个算法的效果可以在GIMP的颜色--》自动--》色调均化中看到。

       虽然GIMP是一个类似PS的软件,但两者的色调均化效果完全不同,查看GIMP的代码就能知道这是为什么了,我这里贴出GIMP的这个算法的核心代码部分:

static void
equalize_lut_setup (GimpLut       *lut,
                    GimpHistogram *hist,
                    gint           n_channels)
{
  gint            i, k, j;
  hist_lut_struct hlut;
  gdouble         pixels_per_value;
  gdouble         desired;
  gdouble         sum, dif;

  g_return_if_fail (lut != NULL);
  g_return_if_fail (hist != NULL);

  /* Find partition points */
  pixels_per_value = gimp_histogram_get_count (hist,
                                               GIMP_HISTOGRAM_VALUE,
                                               0, 255) / 256.0;

  for (k = 0; k < n_channels; k++)
    {
      /* First and last points in partition */
      hlut.part[k][0]   = 0;
      hlut.part[k][256] = 256;

      /* Find intermediate points */
      j   = 0;
      sum = (gimp_histogram_get_channel (hist, k, 0) +
             gimp_histogram_get_channel (hist, k, 1));

      for (i = 1; i < 256; i++)
        {
          desired = i * pixels_per_value;

          while (sum < desired && j < 256)
            {
              j++;
              sum += gimp_histogram_get_channel (hist, k, j + 1);
            }

          /* Nearest sum */
          dif = sum - gimp_histogram_get_channel (hist, k, j);

          if ((sum - desired) > (dif / 2.0))
            hlut.part[k][i] = j;
          else
            hlut.part[k][i] = j + 1;
        }
    }

  gimp_lut_setup (lut, (GimpLutFunc) equalize_lut_func, &hlut, n_channels);
}
void
gimp_lut_setup (GimpLut     *lut,
                GimpLutFunc  func,
                void        *user_data,
                gint         nchannels)
{
  guint   i, v;
  gdouble val;

  if (lut->luts)
    {
      for (i = 0; i < lut->nchannels; i++)
        g_free (lut->luts[i]);

      g_free (lut->luts);
    }

  lut->nchannels = nchannels;
  lut->luts      = g_new (guchar *, lut->nchannels);

  for (i = 0; i < lut->nchannels; i++)
    {
      lut->luts[i] = g_new (guchar, 256);

      for (v = 0; v < 256; v++)
        {
          /* to add gamma correction use func(v ^ g) ^ 1/g instead. */
          val = 255.0 * func (user_data, lut->nchannels, i, v/255.0) + 0.5;

          lut->luts[i][v] = CLAMP (val, 0, 255);
        }
    }
}

  gimp的代码看起来相当晦涩的,但是实际上上述算法要描述的意思很简单,就是我希望我调整后的图像的直方图在每个色阶上的分布概率都是一样的。其实这个过程就可以看成是直方图规定化的一个过程,举例如下:

          

                     原  图                                                                   处理后的图

             

              

              

        原图B/G/R对应的直方图                              待匹配的直方图                   处理后的直方图

  可见处理后的直方图已尽量向带匹配的模式靠近,但不可能完全一样。

     用这个过程处理了几幅论文中带的水下图像,效果如下:

       

       

       

    最后一幅图在Enhancing Underwater Images and Videos by Fusion一文中的效果是非常棒的,主要是过度的很自然,这个应该融合在其作用吧。

    融合这种处理方式确实一个值得推广的想法,因此那篇论文才会成为2012的CVPR论文之一的。

 

 

*********************************作者: laviewpbt   时间: 2014.4.6   联系QQ:  33184777  转载请保留本行信息************************

本文转载自:http://www.cnblogs.com/Imageshop/p/3647135.html

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
深潜百米,采用半缆通信技术的Gladius水下无人机能够征服海洋吗?

近几年来,随着越来越多资本涌入、技术更新迭代,消费级空中无人机行业经历了洗牌和整合之后,加之国家发布了一系列对于无人机空域管制的政策等因素,消费级空中无人机由一片“蓝海”转向了“...

欣彤Iris
2017/11/08
0
0
用Python做图像处理

用Python做图像处理 最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用...

彭博
2012/03/02
14.8K
2
MUSICA(多尺度图像对比度增强)算法的简要原理及VC实现-1[r]

MUSICA的专利文档:MUSICApatent - Original document.pdf 算法原理: 图像增强的一般方法是对比度拉伸和直方图均衡,这两种方法对于灰度级过于集中, 还有大量的灰度级没有充分利用的情况下...

技术小美
2017/11/20
0
0
增强现实技术漫谈(续)——研究内容全面解析

前言 经过上一篇略带诙谐的《增强现实技术漫谈》介绍之后,相信大家已经完全了解了增强现实技术的相关特征和应用领域,并且已经对概念有了清晰的理解了。本文将会针对增强现实(Augmented R...

zzlyw
2017/03/22
0
0
我为什么要写《OpenCV Android 开发实战》这本书

我为什么要写《OpenCV Android 开发实战》这本书 2015年我出版了个人第一本关于图像处理方面的书籍《Java图像处理-编程技巧与应用实践》,这本书主要是从理论与编码上面详细阐述了图像处理基...

gloomyfish
07/06
0
0
【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程《数字图像处理》及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑、高斯平滑、...

Eastmount
2015/06/08
0
0
[Kaggle] NDSB1: Predict Ocean Health

这篇主要介绍Kaggle的第一届年度数据科学竞赛:Predict ocean health, one plankton at a time。关于Kaggle平台本身的相关内容,可以参考:[Kaggle] 数据建模分析与竞赛平台介绍。 Kaggle除了...

ToeKnee
2016/07/29
0
0
学界 | 谷歌大脑提出自动数据增强方法AutoAugment:可迁移至不同数据集

  选自arXiv   作者:Ekin D. Cubuk 等   机器之心编译   参与:Geek AI、路      近日,来自谷歌大脑的研究者在 arXiv 上发表论文,提出一种自动搜索合适数据增强策略的方法 Au...

机器之心
06/02
0
0
实践:基于深度学习的卫星图像超分辨率处理技术(一)

摘要:Yann Lecun曾将无监督学习比作蛋糕,将监督学习比作蛋糕上的糖霜,声称我们仅懂得如何做糖霜却不知道怎样才能做出蛋糕。在本篇文章中,我们提供了一份训练无监督学习算法的“蛋糕”配方...

云栖社区
2017/11/06
0
0
MIT与商汤宣布成立人工智能联盟 助力MIT Intelligence Quest新项目

2018年2月28日雷锋网消息,今日,美国麻省理工学院(简称MIT)与中国人工智能平台公司商汤科技SenseTime宣布成立人工智能联盟。 据雷锋网了解,商汤科技由MIT校友汤晓鸥教授创立,专注于计算...

吕倩
02/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
9分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
9
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
202
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部