一幅图像可以分解为两层:底层(base layer)和细节层(detail layer)。底层包含图像的低频信息,反映了图像在大尺度上的强度变化;细节层包含图像的高频信息,反映了图像在小尺度上的细节。分解图像有两种方式,以下分别进行解释。

1. 加性分解

要获取图像的底层,即图像的低频信息,使用低通滤波(如均值滤波(mean filter),高斯滤波(gaussian filter),导向滤波(guided filter))对图像进行滤波即可:

B=f(I)B=f(I)

B = f(I)
其中 III表示要分解的图像,f(⋅)" role="presentation">f(⋅)f(⋅)f(\cdot)表示低通滤波操作, BBB为提取的底层。

提取底层后,使用源图像减去底层,即为细节层:

D=I−B" role="presentation">D=I−BD=I−B

D = I - B
其中 DDD表示提取的细节层。

因为底层加上细节层即为源图像,所以我称此种分解方法为加性分解,对应于加性噪声。关于此种方法的应用,可以参见[1]。

2. 乘性分解

获取底层的方法与加性分解相同。然后使用源图像除以底层,即可得到细节层:

D=I+ϵB+ϵ" role="presentation">D=I+ϵB+ϵD=I+ϵB+ϵ

D = \frac{I + \epsilon}{B + \epsilon}
其中 ϵϵ\epsilon为一个很小的常数,以防止除零错误。

因为底层乘以细节层即为源图像,所以我称此种分解方法为乘性分解,对应于乘性噪声。关于此种方法的应用,可以参见[2]。在其他文章中,此处得到的细节层也称为商图像(quotient image)[3]或比例图像(ratio image)[4]。

3. 代码及效果

// 图像细节提取。
// 编程环境:Visual Studio Community 2015 + OpenCV 3.3.0
#include "opencv2/core/core.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"int main()
{cv::Mat I = cv::imread("im.png");if (I.empty()){return -1;}I.convertTo(I, CV_32FC3);cv::Mat B;cv::boxFilter(I, B, -1, cv::Size(31, 31));// 1. 加性分解cv::Mat D1 = I - B;// 2. 乘性分解const float epsilon = 1.0f;cv::Mat D2 = (I + epsilon) / (B + epsilon);// 显示图像I.convertTo(I, CV_8UC3);cv::imshow("源图像", I);B.convertTo(B, CV_8UC3);cv::imshow("Base layer", B);D1 = cv::abs(D1); // 因为包含负数,所以取绝对值D1.convertTo(D1, CV_8UC3);cv::imshow("Detail layer 1", D1);cv::normalize(D2, D2, 0.0, 255.0, cv::NORM_MINMAX); // 归一化D2.convertTo(D2, CV_8UC3);cv::imshow("Detail layer 2", D2);cv::waitKey();return 0;
}


图1:源图像

图2:Base Layer

图3:Detail Layer1

图4:Detail Layer2

4. 应用

提取图像的细节层后,可以进行细节增强(detail enhancement)或细节转移(detail transfer)[2]等。

5. 参考文献

[1] S. Li, X. Kang, and J. Hu. Image fusion with guided fltering. IEEE Transactions on Image Processing, 22(7):2864–2875, July 2013.

[2] Georg Petschnigg, Richard Szeliski, Maneesh Agrawala, Michael Cohen, Hugues Hoppe, and Kentaro Toyama. Digital photography with flash and no-flash image pairs. In ACM transactions on graphics (TOG), volume 23, pages 664–672. ACM, 2004.

[3] Amnon Shashua and Tammy Riklin-Raviv. The quotient image: Class-based re-rendering and recognition with varying illuminations. IEEE Transactions on Pattern Analysis and Machine Intelligence, 23(2):129–139, 2001.

[4] Zicheng Liu, Ying Shan, and Zhengyou Zhang. Expressive expression mapping with ratio images. In Proceedings of the 28th annual conference on Computer graphics and interactive techniques, pages 271–276. ACM, 2001.

提取图像细节的两种方法相关推荐

  1. NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)

    NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary) 目录 输出结果 设计思路 核心代码 输出结果 1.测试文本 ...

  2. java word转pdf,docx4j转pdf,docx4j导出pdf乱码,docx4j导出pdf丢失插画和图片,aspose将word转pdf 一共两种方法

    前言:一共有docx4j转pdf,aspose转pdf两种方式,不需要设置模板!!! java转pdf目前本人使用有两种方法,下面是方法代码 ps:因为本人是云桌面开发,所以只作截图,具体代码需要自己 ...

  3. jmeter提取多个变量的多个值_jmeter用一个正则提取器提取多个值的两种方法

    jmeter中,用json提取器,一次提取多个值,这个很多人都会.但是,用正则提取器一次提取多个,是否可以呢? 肯定,很多人都自信满满的说,可以!形如:token":"(.*?)& ...

  4. 利用颜色和形态学两种方法进行车牌区域提取的OpenCV代码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 2016-7-28日:用MSER算法也实现了车牌 ...

  5. NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档

    NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档 目录 问题探究 实现代码 问题探究 实现代码 f=open("niu.txt&q ...

  6. 计算机提取干涉条纹原理,两种提取Fabry-Perot干涉条纹圆心的新方法

    摘要本文介绍两种提取Fabry-Perot干涉条纹圆心点坐标的新方法.首先对干涉图像依次进行二值化处理,对所得到的条纹强度曲线进行均平滤波和自适应滤波,根据条纹灰度值强度余弦函数分布的特点,对条纹灰度 ...

  7. 提取pdf文件中文字的两种方法

    如今,在我们的工作与学习中已经不是单单使用word.Excel等格式文件了,pdf格式的文件已经被广泛地运用到我们的办公室中.大家都知道pdf文件是不可直接编辑与修改的,使用起来有些不便.那么当我们需 ...

  8. 如何提取视频中的音频?这两种方法能帮你实现

    在某些情况下,你可能需要从视频文件中提取音频,例如你想要将视频中的音乐保存为MP3文件,或者你需要编辑视频的音频部分.在这篇文章中,我将向大家介绍两种方法来从视频文件中提取音频. 方法一:使用在线工具 ...

  9. 提取图片上文字的两种方法

    目前我整理出两种方法: 第一种是利用onenote 插入照片-->点击图片右键,选择"复制图片中的文本"选项-->在当前onenote的空白处选择粘贴就好了(在其他地方 ...

最新文章

  1. 扩展LLVM:添加指令、内部函数、类型等
  2. LeetCode实战:螺旋矩阵
  3. Delphi中Indy 10的安装和老版本的卸载
  4. Zookeeper运维问题集锦
  5. ceph linux内核配置,centos 7.4-aarch64如何编译Ceph
  6. tcp有限状态机分析
  7. Windows下怎样安装Tomcat
  8. 漂亮的带分步说明的 VBA 自制进度条
  9. arduino支持的内核版本_Arduino开发(arduino IDE)
  10. java protected类_关于JAVA的protected类型
  11. 【图像增强】基于matlab拉氏滤波图像质量提升【含Matlab源码 488期】
  12. eoLinker-API_Shop_知识类API调用的代码示例合集:驾考题库、ISBN书号查询等
  13. Laravel框架介绍与简介
  14. 中国到美国最安全的飞机航线
  15. CentOS7挂载光盘
  16. sublime-笔记
  17. 第三十八章 短语动词
  18. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早晨又将剩下 的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时, 就只
  19. (JVM) 沙箱安全机制
  20. 华为服务器怎么查看cpu型号,华为RH2288H V2处理器性能测试_华为 FusionServer RH2288 V2_服务器评测与技术-中关村在线...

热门文章

  1. 希沃集控系统流媒体服务器未开启,智慧校园:希沃集控,掌控信息化管理
  2. 全志 a10 linux,全志A10处理器参数介绍
  3. JavaFX基本介绍
  4. matlab 调图像色温,Matlab常用白平衡算法.pdf
  5. 基于Origin的一种SCI论文中给散点等图添加标签的方法
  6. 微信app服务端php,微信APP支付服务端PHP完整代码
  7. phpcms教程:phpcms v9 筛选功能的图文教程
  8. 中国联通与用友签署合作框架协议 多领域展开全面合作
  9. 昨天只搞懂了一点关于模板的冬冬
  10. 头脑风暴生成中,思维导图Xmind ZEN 2020震撼出场!