0. 前言

  今天是10.24节,假装在考研过程中百忙中给自己放一个假,好吧只是骗自己的,继续写笔记罢了,读了好多文章和冈萨雷斯老师的书感觉彩色图像处理这一块都不是讲的很细,可能是理论太过于繁琐而实践的时候都已经有封装好的API了吧

1. 彩色空间

1.1 RGB空间

  这个是应该是人人都认识的色彩空间了,
在 RGB 模型中,每种颜色出现在红、绿、蓝的颜色光谱分量中。该模型基于笛卡儿坐标系
只不过在实际处理的时候我们都是灰度图合并起来罢了,一般都是三个分量即R、G、B分量,8bit图像值在0-255之间。
  事实上,在我们遥感传统所见到的真彩色图像也是种假彩色图像,它是R、G、B图像按照一定的比例混合起来合成一幅灰度图,而只不过这幅灰度图和人眼感受到的真实世界很像,所以我们称其为真彩色图像罢了。
即:
DN=0.2989∗R+0.5870∗G+0.1140∗BDN = 0.2989 ∗ R + 0.5870 ∗ G + 0.1140 ∗ BDN=0.2989∗R+0.5870∗G+0.1140∗B 如此罢了。突然想起了之前一位同学在处理遥感影像的时候发现影像太大没法用MATLAB读取,ENVI直接死机的时候问我怎么做这个真彩色图,后来我和她说用ENVI的band math写一个波段运算把3个分量按比例送进去就行了。我觉得这个"送"是真的很传神,毕竟我喜欢称彩色是一种空间吗,哈哈哈!

1.2 HSI空间

彩色模型是一种彩色感知空间,采用色度(Hue),饱和度(Satutation)和亮度(Intense)直观的描述一种颜色空间。彩色空间基于两个重要的事实:
其一,亮度分量与图像的彩色信息无关;
其二,色度和饱和度分量与人对颜色的感受方式紧密相连。这些特点使得HSI彩色空间成为一种非常重要的以彩色处理为目的颜色空间的选择

顺便记下英文吧,对考研有帮助的!

色调和饱和度在HSI颜色模型中,点是任意颜色点。那个与红轴的夹角表示色调,矢量的长度为饱和。这个所有这些平面上所有颜色的强度都是由平面在垂直强度轴上的位置给出的

上面两段话是引自一篇硕士论文以及冈萨雷斯老师的书。

呃…其实感觉说了和没说没啥区别,毕竟通常都有封装好的API,如果实在没API自己写几个判断也能转化过来。

1.3 RGB和HIS的转化

  虽然俺确信这个百分之百不会考,但是既然写了文章就写下吧。

1.3.1 从RGB到HSI

H={θ,B≤G360−θ,B>GH= \begin{cases} \theta, & B \le G \\ 360 - \theta, & B>G \end{cases}H={θ,360−θ,​B≤GB>G​其中
θ=arccos⁡12[(R−G)+(R−B)][(R−G)2+(R−B)(G−B)]1/2\theta = \arccos { \frac{ \dfrac{1}{2} [ (R-G)+ (R- B)] }{ [(R-G)^2 + (R-B)(G-B)]^{1/2}} }θ=arccos[(R−G)2+(R−B)(G−B)]1/221​[(R−G)+(R−B)]​
饱和度(S)由下列公式给出
S=1−3(R+G+B)[min⁡(R,G,B)]S = 1 - \frac{3}{(R+G+B)}[\min(R,G,B)]S=1−(R+G+B)3​[min(R,G,B)]
强度(I)由下列公式给出
I=13(R+G+B)I = \dfrac{1}{3} (R+G+B)I=31​(R+G+B)

1.3.2 从HSI到RGB

   在[0,1][0,1][0,1]内给出HSI值,现在我们想要在相同的值域找到对应的RGB值。可用的公式取决于H的值。在原色分隔中有3个相隔120∘120^{\circ}120∘扇形区间。我们从H乘以360∘360^{\circ}360∘开始,这时的色调值调回到范围[0∘,360∘][0^{\circ},360^{\circ}][0∘,360∘]

RG扇区(0∘≤H≤120∘)(0^{\circ} \le H \le 120^{\circ})(0∘≤H≤120∘):当HHH的值在该扇区中时,RGB分量由以下公式给出。
B=I(1−S)B = I(1-S)B=I(1−S)R=I[1+Scos⁡Hcos⁡(60∘−H)]R = I[1 + \frac{S\cos H}{\cos(60^{\circ} -H)}]R=I[1+cos(60∘−H)ScosH​] G=3I−(R+B)G = 3I - (R+B)G=3I−(R+B)

GB扇区(120∘≤H≤240∘)(120^{\circ} \le H \le 240^{\circ})(120∘≤H≤240∘):当HHH的值在该扇区中时,RGB分量由以下公式给出,则从HHH中减去120∘120^{\circ}120∘,即
H=H−120∘H = H - 120^{\circ}H=H−120∘R=I(1−S)R = I(1-S)R=I(1−S)G=I[1+Scos⁡Hcos⁡(60∘−H)]G = I[1 + \frac{S\cos H}{\cos(60^{\circ} -H)}]G=I[1+cos(60∘−H)ScosH​]B=3I−(R+G)B = 3I - (R+G) B=3I−(R+G)

BR扇区(240∘≤H≤360∘)(240^{\circ} \le H \le 360^{\circ})(240∘≤H≤360∘):当HHH的值在该扇区中时,RGB分量由以下公式给出,则从HHH中减去240∘240^{\circ}240∘,即
H=H−240∘H = H - 240^{\circ}H=H−240∘G=I(1−S)G = I(1-S)G=I(1−S)B=I[1+Scos⁡Hcos⁡(60∘−H)]B = I[1 + \frac{S\cos H}{\cos(60^{\circ} -H)}]B=I[1+cos(60∘−H)ScosH​]R=3I−(G+B)R = 3I - (G+B) R=3I−(G+B)

其实可以看到就是一个过圆环走规律的过程,缺谁我那么一个分量值就是 I∗(1−S)I*(1-S)I∗(1−S)然后按照RGB的顺序接下面的公式就行了。
我还特地设了个颜色好看一些~~记住结论算了,不记应该也没啥关系。

2. HSI空间进行直方图均衡化

  因为考题里有这道题,查了半天,发现讲的实在少的可怜,还好找到了一篇硕士论文还有pitas在1996年发表的paper,于是也自己动手实践了一下,理解了。

问题:什么是HSI颜色模型,如何在HSI颜色空间保持图像色度(H)不变的情况下,对彩色图像做直方图均衡化处理

  实际上,对彩色图像做直方图均衡化有好多种思路,
  第一种人们都会想到的思路就是对直接抽取R、G、B的分量分别做一个直方图均衡化,然后就我的北登就可怜了,看下面的图

可以看到这种方法会导致彩色色调的改变,所以事实上,这种方法并不是很推荐,但是运行起来的效率会非常的高。

Although the R G B space provides a straightforwardway to display color images, it is not always the best choice for processing and analysis. One of its disadvantages is its inability to handle the perceptual properties of colors, such as intensity, hue, or saturation. The H S I color space has primaries H (hue), S (saturation), and I (intensity) and corresponds directly to the perceptual attributes of colors

贴一段pitas的原话吧,这是他指出的在RGB空间直接做直方图均衡化的显著问题(自己翻译吧~-~)。
  第二种方法是pitas在1996年提出的,将图像先送入HSI空间我仅仅对S和I分量进行直方图处理或者仅仅对其做变化,事实上,我按pitas的方法做了一次有点小问题,毕竟每幅图不一样。
  HSI的值都是介于0-1之间的,然后pista提出了对 III 和 SSS 做处理的方法。

  就是下面三个公式

fI(I)={12I2哈哈哈哈for 0≤I≤0.512(1−I)2哈哈哈for 0.5≤I≤1f_I(I) = \begin{cases}12I^2 \phantom{哈哈哈哈} & \text{for} \ 0 \le I \le 0.5 \\ 12(1-I)^2 \phantom{哈哈哈} & \text{for} \ 0.5 \le I \le 1 \end{cases}fI​(I)={12I2哈哈哈哈12(1−I)2哈哈哈​for 0≤I≤0.5for 0.5≤I≤1​

这个是单独对 III 进行处理的公式,根据范围来处理就可。
fs(S)=6S−6S2哈哈哈哈哈for 0≤S≤1f_s(S) = 6S - 6S^2 \phantom{哈哈哈哈哈} \text{for} \ 0 \le S \le 1 fs​(S)=6S−6S2哈哈哈哈哈for 0≤S≤1这个是单独对 SSS 进行处理的公式,根据范围来处理就可。

fIS(I,S)={6S哈哈for S≤2I,I∈[0,12]0for S>2I,∈[0,12]6Sfor S≤2(1−I),I∈[12,1]0for S>2(1−I),I∈[12,1]f_{IS}(I,S) = \begin{cases} 6S \phantom{哈哈} &\text{for} \ S \le2I, I \in[0,\frac{1}{2}] \\ 0 & \text{for} \ S \gt 2I, \in[0,\frac{1}{2}] \\ 6S & \text{for} \ S \le 2(1-I),I \in[\frac{1}{2},1] \\ 0 & \text{for} \ S \gt 2(1-I),I\in[\frac{1}{2},1] \end{cases}fIS​(I,S)=⎩⎪⎪⎪⎨⎪⎪⎪⎧​6S哈哈06S0​for S≤2I,I∈[0,21​]for S>2I,∈[0,21​]for S≤2(1−I),I∈[21​,1]for S>2(1−I),I∈[21​,1]​这里是对 I,SI,SI,S 进行联合处理的公式,也是根据范围来赋值处理就可。

  我觉得这个系数应该用4才对,这样能保证你的I在0-1之间,当然我也用过了12这个系数(想想是这样的),结果看下面:

  第5副图是用4做的系数,第6副图用的是12做的系数,同时第六幅图还对S分量也做了处理,感觉就是有点问题,但是不知道哪里有问题,毕竟马克思教我们要具体问题具体分析吗 ^ - ^

  就是可怜我的北登被整成这样了,第三第四幅图是我用MATLAB的histeq和adathisteq对I分量做了直方图均衡化的结果。
  做完后再把原图从HSI空间转回到RGB空间显示,但是效果不好,可能是图的问题吧,也可能像pitas在原文说的这种方法会出现原来图像不存在的I分量,即过饱和的I,导致转回RGB空间的时候出现异常。

3. 代码

%coding = UTF8
%测试直方图均衡化的方法
%2020-10-23
%version1.0
%by neverland!%读取图像im = imread('hh.jpg');
%在rgb通道作直方图均衡化r = im(:,:,1);g = im(:,:,2);b = im(:,:,3);r_ = histeq(r);g_ = histeq(g);b_ = histeq(b);im_ = cat(3,r_,g_,b_);
%在hsi通道作直方图均衡化im1 = rgb2hsv(im);H = im1(:,:,1);S = im1(:,:,2);I = im1(:,:,3);
%复制变量I_ = I;I_2 = I;S_ = S;
%对S变量进行处理index3 = (S<1 & S>0);S_(index3) = 6*S(index3) - S(index3).^2;
%利用MATLAB自带的直方图均衡化I_ = adapthisteq(I);I_1 = histeq(I);
%利用pitas的理论index1 = I<0.5;index2 = I>0.5;I_2(index1) = 12*I(index1).^2;I_2(index2) = 12*(1-I(index2)).^2;
%第一幅图histeqim1_ = cat(3,H,S,I_);   im1_ = hsv2rgb(im1_);
%第二幅图用的是adathisteqim2 = cat(3,H,S,I_1);im2_ = hsv2rgb(im2);
%第三幅图用1996年的理论im3 = cat(3,H,S,I_2);im3_ = hsv2rgb(im3);%再处理一次;im4 = cat(3,H,S_,I_2);im4_ = hsv2rgb(im4);
%分开显示下subplot(2,3,1);imshow(im);title('原始图像','FontSize',20);subplot(2,3,2);imshow(im_);title('RGB空间内作直方图均衡化','fontsize',20);subplot(2,3,3);imshow(im1_);title('HSI空间内作直方图均衡化','fontsize',20);subplot(2,3,4);imshow(im2_);title('HSI空间内作直方图均衡化','fontsize',20);subplot(2,3,5);imshow(im3_);title('HSI空间内作直方图均衡化','fontsize',20);subplot(2,3,6);imshow(im4_);title('HSI空间内作直方图均衡化','fontsize',20);

  其实adathisteq是对对比度受限的图做直方图均衡化的方法,
  而histeq是不加限制的做均衡化,当然是你人为选择方法的,而且我也不知道直接对I分量做直方图均衡化合不合理,网上blog好少,文献没读清楚,后续再改进吧。

4. 参考文献

[1].任洁. 彩色图像增强算法的研究与实现[D]. 武汉理工大学, 2013.
[2].Pitas I , Kiniklis P . Multichannel techniques in color image enhancement and modeling[J]. IEEE Transactions on Image Processing, 1996, 5(1):168-171.
[3].阮秋琦. 数字图像处理学[M]. 电子工业出版社, 2007.

最后,我将在另外一个账号写博客,有兴趣的可以关注。

数字图像处理笔记(八)彩色图像和彩色图像直方图均衡化相关推荐

  1. 数字图像处理实验之对比度拉伸、直方图均衡化和规定化

    [实验内容]:  一.运用Matlab对Lena进行对比度拉伸增强(利用 imadjust  )  二.运用Matlab对图像进行直方图均衡化和规定化 Matlab版本:R2015a 一.运用Matl ...

  2. 数字图像处理笔记2-nbsp;边沿检…

    原文地址:数字图像处理笔记2- 边沿检测与提取,轮廓跟踪(转)作者:小草帽 7.1 边沿检测 我们给出一个模板 和一幅图象 .不难发现原图中左边暗,右边亮,中间存在着一条明显的边界.进行模板操作后的结 ...

  3. 数字图像处理笔记-02(图像空域增强技术及联合运用)

    数字图像处理笔记-02(图像空域增强技术及联合运用) (一) 图像增强 1.1 基本概念 由于图像在传输或者处理过程中会引入噪声或使图像变模糊,从而降低了图像质量,甚至淹没了特 征,给分析带来了困难. ...

  4. 数字图像处理笔记(一)——图像存储空间,分辨率,图像内插

    数字图像处理笔记(一)--图像存储空间,分辨率,图像内插 本系列笔记是笔者在学习冈萨雷斯<数字图像处理>第三版时做的总结,日后看的时候方便点,如果有幸得到大家的讨论,喜上眉梢. 本节参考书 ...

  5. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波9 - 直方图处理 - 直方图匹配(规定化)灰度图像,彩色图像都适用

    直方图匹配(规定化) 连续灰度 s=T(r)=(L−1)∫0rpr(w)dw(3.17)s = T(r) = (L-1) \int_{0}^{r} p_r(w) \text{d} w \tag{3.1 ...

  6. 《数字图像处理(第三版)》 第三章 数字图像处理 笔记3 (直方图处理 - 直方图均衡)

    第 3 章 灰度变换与空间滤波 3.3 直方图处理   直方图是多种空间域处理技术的基础.   灰度级范围为 [0, L-1] 的数字图像的直方图是离散函数 h(rk)=nkh(r_k) = n_k ...

  7. DIP数字图像处理笔记

    数字图像处理--南信大 范春年老师 期末复习笔记 matlab语法 期中考试总结 邻域 图像增强 概念 直方图的图像增强 点处理 直方图均衡化histogram equalization 意义 效果 ...

  8. 数字图像处理笔记(一)基础内容

    基础内容 数字图像是什么,和模拟图像又有什么区别 数字图像处理 数字图像处理研究内容 数字图像处理有哪些方法 计算机图形学和数字图像处理的区别 常用的数字图像处理开发工具 数字图像 图像的数学表达 数 ...

  9. 【图像处理】数字图像处理笔记

    文章目录 直方图处理 滤波器 图像复原 形态学图像处理 灰度形态学--多使用平坦结构元(SE)[数字图像处理P428 图像分割 1.canny边缘检测[数字图像处理P463] 图像的表征 特征描述子 ...

  10. 数字图像处理笔记一 - 图像采集(空间分辨率和幅度分辨率)

    本文主要内容来自与<数字图像处理第二版中文版(冈萨雷斯)>第二章, 图像采集小节. 一.数字图像的表示 一幅图像可以被定义为一个二维函数f(x,y),其中(x,y)是空间(平面)坐标,在任 ...

最新文章

  1. python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))
  2. 架构师之路 — API 经济 — RESTful API
  3. android服务的原理,Android学习笔记:IntentService
  4. 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
  5. Ubuntu 下安装Beyond Compare 安装解决方案
  6. Flutter之运行提示Could not update files on device: Connection closed before full header was received
  7. python sqlalchemy core
  8. 图解CSS中padding、margin、border的区别及使用
  9. LeetCode 96.不同的二叉搜索树(卡特兰数)
  10. 多线程实时数据采集MFC VISUAL C++ /C++
  11. 计算机专用英语词汇1695个词汇表
  12. 淘客帝国4.0免费版网页模板修改及n…
  13. JAVAFX输入法的实现
  14. Let's encrypt 通配域名(二级, 三级)
  15. lisp编程 滑动轴承的auto_「autolisp」Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序 - seo实验室...
  16. 国内开源镜像网站列表
  17. 无敌破坏王2口碑爆棚,从街游到手游你最爱哪款游戏呢?
  18. php携程 线程,php 如何获取这个携程页面的数据
  19. 基于ssm的志愿者招募网站设计与实现-计算机毕业设计源码+LW文档
  20. wordpress网站防止被别人iframe框架调用的九种方法

热门文章

  1. 虚拟内存之TLB加速地址翻译
  2. CSP-2022 游寄
  3. php rabbitmq延迟队列实现
  4. 多维数据库概述之一---多维数据库的选择
  5. word文档单独删除或修改首页或某一页的页眉页脚及其下划线
  6. CAD对话框不见后要如何调出
  7. ismart软件英语期末测试,iSmart APP
  8. could not find function 函数名
  9. mt6573 环境配置
  10. 中标麒麟V7系统开启日志服务器收集日志