关于Retinex图像增强算法的一些新学习。

  最近再次看了一下IPOL网站,有一篇最近发表的文章,名字就是Multiscale Retinex,感觉自己对这个已经基本了解了,但还是进去看了看,也有一些收获,于是抽空把他们稍微整理了下,原始文章及其配套代码详见:http://www.ipol.im/pub/art/2014/107/。

      之前在我的 带色彩恢复的多尺度视网膜增强算法(MSRCR)的原理、实现及应用 一文中已经较为详细的描述了Multiscale Retinex的基本原理和应用,这里就不再做过多的说明。为表述方便,还是贴出其基本的计算原理:

    

  上式中,I为原始输入图像,F是滤波函数,一般为高斯函数,N为尺度的数量,W为每个尺度的权重,一般都为1/N, R表示在对数域的图像的输出。

  由于R是对数域的输出,要转换为数字图像,必须将他们量化为[0,255]的数字图像范畴,关于这个量化的算法,有这极为重要的意义,他的好坏直接决定了最终输出的图像的品质。

  目前,结合上述文章中提出的一些过程,有4种方式进行处理:

  第一种,也是最容易想到的就是,直接线性量化,即采用下式进行处理:

       

  这种方式,由于Retinex数据处理后的高动态特性,数据分布很广,会出现严重的两极化现象,一般难以获得满意的结果。

  第二种,就是在经典的MSRCR文章《A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes》中提出的Canonical Gain/Offset 算法。计算公式如下:

             

  其中G和b为经验参数。

  第三种,实在上述文章中提到的Simplest Color Balance(我简写为SCR)方式,这种方式的处理类似于Photoshop中的自动色阶,他把数据按照一定的百分比去除最小和最大的部分,然后中间的部分重新线性量化到0和255之间。

  第四种,就是GIMP的Retinex算法,这个可详见 带色彩恢复的多尺度视网膜增强算法(MSRCR)的原理、实现及应用 一文的描述。

  还有一种方式,就是大家知道HDR的过程吧,他也是将高动态的数据量化到图像的可视范围,因此可以直接将这类算法应用与这个问题上。我也做了实验,效果似乎一般。

  在用第二种或第三种方式处理时,最好还需要有个Color Restoration的过程,因为如果直接对MSR处理的结果进行量化,得到的图像往往整体偏灰度,这是由于原始的彩色值经过log处理后的数据范围就比较小了,这样各通道之间的差异也很小,而之后的线性量化比log曲线要平滑很多,因此整体就丧失了彩色。

  论文中提出了修正方式如下:

          

          

          

 

   其中β=46,α=125为经验参数,但是最终我的分析认为β不可能取这么大,取1试验表明效果还不错。

   对于一些原始图像HUE较为合理的图,如果用经典的MSRCR算法,会导致处理后的图容易偏色,上述论文提出了对图像的Intensity数据进行Retinex处理,然后再把数据根据原始的RGB的比例映射到每个通道,这样就能在保留原始颜色分布的基础上增强图像,文章中称其为MSRCP。

  这个算法的编码论文的附带代码里已经有了很好的例子了,其实真是很简单的工作,需要的朋友自己去参考。

  我自己做了5种算法的比较,分别是:

      MSRCRGIMP    -    Gimp内嵌的Retinex增强算法

      MSRCRStandard  -    按照《A Multiscale Retinex ....  the Human Observation of Scenes》一文写的算法,其中G=30,B=-6,β=1,α=125

      MSRCRSCR      -          使用Color Restoration + Simplest Color Balance算法量化得到的结果

        MSRCPSCR      -          使用Intensity数据 + Simplest Color Balance算法量化得到的结果

      MSRHSV      -    对HSV空间的V分量进行(用的SCR量化)Retinex处理并返回RGB空间后的结果

  他们的效果比较如下:

  

        original                         MSRCRGIMP                                   MSRCRStandard

  

           MSRCRSCR                        MSRCPSCR                        MSRHSV

  

        original                           MSRCRGIMP                                MSRCRStandard

  

       MSRCRSCR                            MSRCPSCR                        MSRHSV

  

        original                           MSRCRGIMP                                MSRCRStandard

  

         MSRCRSCR                            MSRCPSCR                        MSRHSV  

  孰好孰坏给位自己去斟酌吧。

  算法效果测试:http://files.cnblogs.com/Imageshop/Retinex%E7%BB%BC%E5%90%88.rar

  很久没有写博客了,其实也没有江郎才尽的感觉,就是呢没有想写的冲动。现在写也无以前那么认真了,感觉就是像计流水账一样。算了,记账就记账吧。

 

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

 

 

转载于:https://www.cnblogs.com/Imageshop/p/3810402.html

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

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

相关文章

如何判断 .NET Core 应用程序是以管理员身份运行

有时候,我们需要知道当前程序是否以管理员身份运行,以便执行一些需要特殊权限的操作。在github(https://github.com/dotnet/runtime/issues/25118#issuecomment-367407469)上找到了一个解决方案://需要引用nuget包Mono.Posix.NETStandard pub…

php如何避免时间重复,如何避免/停止php和html的重复插入?

这是我写的一个小班(未经测试)class FormID {private $lastFormID "";private $newFormID "";function __construct(){$this->lastFormID $_SESSION[__frmid__];$_SESSION[__frmid__] uniqid(sm);$this->newFormID $_SESSION[__frmid__];}publi…

Android之Content和activity、service、Application关系和attachBaseContext函数调用的时候

1、Content和activity、service、Application关系 2、Application里面attachBaseContext和onCreate函数调用顺序 Application-> attachBaseContext ();ContentProvider:onCreate()Application:onCreate()人还是容易忘记,先记录下来。

批量创建域账号

创建5列的csv文档(注意文件编码) 执行如下脚本 for /f "tokens1,2,3,4,5 delims," %a in (c:\test.csv) do dsadd user "cn%c,oumk,ouicgroup,dcicdomain,dccom" -samid %d -upn %dicdomain.com -ln %a -fn %b -pwd %e -disabled no…

如何快速编写并运行Tiny模板语言?

2019独角兽企业重金招聘Python工程师标准>>> 说到模板开发,当然就离不开要调试,要运行。 由于一般情况下模板语言都是由Java程序驱动跑的,因此,每次都需要搞一个Java类来驱动它,才能运行出结果。这个对于悠…

Windows 11 上大招!正式支持安卓!

面向 Windows 11 正式版用户,微软现已发布累积更新 KB5010414,更新后版本号升级至 Build 22000.527。KB5010414 是一个可选更新,因此除非您主动点击“获取更新”按钮,否则它不会下载或安装。该更新将于 2022 年 3 月向所有 Window…

linux之使用md5sum命令比较两个文件是否一样

1、md5sum命令介绍 md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同2、比较文件 1)、生产文件的md5md5sum file1md5sum file2 会有结果显示2&am…

php 友盟推送角标,桌面角标设置以及消息推送服务

更新记录0.01(2020-05-09)1、添加角标设置2、添加清除角标3、添加品牌获取4、添加通知栏推送5、添加点击通知栏进入APP平台兼容性AndroidiOS原生插件通用使用流程:购买插件,选择该插件绑定的项目。在HBuilderX里找到项目,在manifest的app原生…

博客流量分析

接连两篇Spark内核分析的文章都被推荐到CSDN首页,带来的流量还是很客观的,基本上一天最少500个独立IP的访问。这个访问量还是很客观的,比推荐到博客首页和侧边栏还是效果好处不少的。88%的流量来自首页。北京不愧是码农的聚集地啊&#xff0c…

hdu 4493 Tutor (水 精度)

题意&#xff1a; 思路&#xff1a; #include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using namespace std; int fa[150]; int fin(int x) {return fa[x]x?x:fin(fa[x]); } void unionn(int x,int y) {int fxfin(x);i…

关于YoYo.Cms

YoYoCms 我是角落的白板笔&#xff0c;目前是一个专注于ABP框架的使用者和学习者。 在第一阶段我会将Zero中功能给实现出来&#xff0c;当然会对他进行一些改变&#xff0c;毕竟有些地方的实现不是那么适合国内的开发环境。 YoYoCms 会持续将一些通用的功能组件释放出来给大家使…

WPF 基础控件之CheckBox样式

WPF开发者QQ群&#xff1a;340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS&#xff1a;有更好的方式欢迎推荐。支持NugetInstall-Package WPFDevelopers.Minimal -Version 3.0.001—代码如下一、创建 Styles.Check…

Android之ndk-build -j4

1、提高编译速度 ndk-build -j4 就是指定4核编译 如果cpu是8核就指定-j8

oracle sql 输出,将数据从Oracle SQL Developer导出到Excel .xlsx

将数据从Oracle SQL Developer导出到Excel .xlsx我有一个小型项目&#xff0c;需要将Oracel SLQ Developer的数据导出到Excel(使用SLQ Developer中的命令而不是工具)&#xff0c;然后创build一个图表。 使用“假脱机”我可以导出到CSV精细(但无法在CSV中创build一个graphics)&a…

命名参考

CSS选择器命名及常用命名规范的命名也是Web标准中的重要一项&#xff0c;标准的命名可以使代码更加易读&#xff0c;而且利于搜索引擎搜索&#xff0c;比如定义了两个div&#xff0c;一个id命名为“div1”&#xff0c;另外一个命名为“News”&#xff0c;肯定第二个比较易读&am…

Theano3.2-练习之数据集及目标函数介绍

来自http://deeplearning.net/tutorial/gettingstarted.html#gettingstarted 一、下载 在后续的每个学习算法上&#xff0c;都需要下载对应的文档&#xff0c;如果想要一次全部下好&#xff0c;那么可以复制git上面的这个教程的资料&#xff1a; git clone git://github.com/li…

C#使用NPOI导出Excel文件

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言今天咱们一起来看看在C#中如何使用NPOI第三方控件进行数据的导出。关于NPOI插件网上资料很多&#xff0c;大家感兴趣的可以去看看。本文使用的版本是NPOI 2.5.1。大家可在包管理器NuGet或者下面网址进行下载。h…

Android之ActivityLifecycleCallbacks的得到当前的activity的状态

1、ActivityLifecycleCallbacks的介绍 Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理,注意是在Application里面,路径如下 android.app.Application.ActivityLifecycleCallbacks要求API 14+ (Android 4.0+) ActivityLifecyc…

oracle使用max提升效率,Oracle调优之利用max与leftjoin来进行不同表之间匹配

需求有两个不同的表&#xff0c;A表是基础数据&#xff0c;B表根据A表的某个不重复关键字加其他一些条件查询出一条或几条数据&#xff0c;取其中一条数据。并且利用此数据某个关键字再在B表中查询下一层级数据&#xff0c;最终将A表的对应一条数据&#xff0c;B表查询出的两条…

开放产品开发(OPD):Archi 汉化工具下载

在OPD中&#xff0c;我们使用了ArchiMate 作为架构语言&#xff0c;这是一个高层、简单的描述语言&#xff0c;之前我也写过一系列相关的文字&#xff0c;架构语言ArchiMate &#xff0d; 开篇&#xff1a;企业架构语言ArchiMate介绍架构语言ArchiMate &#xff0d; 语言结构&a…