图像处理 真彩色增强

图像处理与识别真彩色增强

一、真彩色增强原理

在图像的自动分析中,彩色是一种能简化目标提取和分类的重要参量。在彩色图像处理中,选择合适的彩色模型是很重要的。电视摄像机和彩色扫描仪都是根据RGB模型工作的。为在屏幕上显示彩色图一定要借用RGB模型,但HSI模型在许多处理中有其独特的优点。
HSI模型反应了人的视觉系统观察彩色的方式,使用非常接近于人对彩色感知的方式来定义彩色。对于图像处理来说,这种模型的优势在于将颜色信息和灰度信息分开了。色调(Hue)分量是描述一种纯色的颜色属性(如红色,绿色,黄色),饱和度(Saturation)分量是一种纯色被白光稀释的程度的度量,也可以理解为颜色的浓淡程度(如深红色,淡绿色),亮度(Instensity)分量描述颜色的亮暗程度。这个模型的建立基于以下两个重要事实:
(1) I分量与图像的色彩信息无关
(2) H和S分量与人感受颜色的方式紧密相连
先讨论一组R、G、B分量图和一组H、S、I分量图在表示中的异同。一副真彩色RGB图可用24位表示,R、G、B各8位,即每个像素在R、G、B分量图中各取256个值。将R、G、B都归一化到[0,1]范围,相邻值间的差是1/255。一副真彩色RGB图也可用H、S、I各8位的三个分量提表示。这里不同的色调(H)图中的像素值是用角度作单位的,当用8位表示时,256个值分布在[0,360]之间,所以相邻值的差是n(360/255)。其中n=0,1,…,255。
如果将RGB图转化为HSI图,亮度分量就和色度分量分开了,灰度图的增强方法就可以使用了。

二、基础知识

1、RGB到HSI转换

RGB 向HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。基本要求是将RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用角向量表示色调,如图1所示。
图像处理 真彩色增强
RGB转换至HSI:
色调:图像处理 真彩色增强 ,其中,图像处理 真彩色增强
饱和度:图像处理 真彩色增强
亮度: 图像处理 真彩色增强
证明:
HSI模型采用三棱锥还是圆锥或者圆柱都没有影响,因为它们之间可以直接相互映射,所以三者是等价的。这里用三角形来证明。
假设RGB值已经归一化。归一化方法为:
图像处理 真彩色增强
即求出各个基色的强度所占的比例。注意到r,g,b实际上代表了各个三原色的强度占总体的比例,所以显然满足如下条件:
图像处理 真彩色增强
图像处理 真彩色增强

图像处理 真彩色增强

另外仔细观察上图中的正三棱锥上的面PBPGPR,该平面上的任意一点都代表了R值G值B值满足比例条件的色点。比如该平面上的点(0.5,0.2,0.3)代表的所R:G:B=0.5:0.2:0.3的点。

2、HSI到RGB转换

在[0,1]内给出HSI值,现在要在相同的值域找到RGB值,可利用H值公式。在原始色分割中有3个相隔120度的扇形,从H乘以360开始,这时色调值返回原来的[0,360]的范围。
RG扇形(0<H<120):当H位于这一扇形区时,RGB分量由下式给出:
图像处理 真彩色增强
GB扇区(120<H<240):如果给定的H值在这一扇区,首先从H中减去120,即:H=H-120。RGB分量为:
图像处理 真彩色增强
BR扇区(240<H<360):最后,如果H在这一扇区,从H中减去240:H=H-240。RGB分量为:
图像处理 真彩色增强
其证明过程即为由RGB图像转换为HSI图像的逆过程。

3、灰度变换增强的方法

灰度变换法可分为:线性、分段线性和非线性变换。
(1)线性灰度变换
原理:当图像由于成像时曝光不足或过度,由于成像设备的非线性或图像记录设备动态范围太窄等因素,都会产生对比度不足的弊病,使图像中的细节分辨不清。这时如将图像灰度线性扩展,常能显著改善图像的主观质量。假设原图像f(x,y)的灰度范围是[a,b],希望变换后图像的灰度范围扩展到[c,d],则可采用如下的线性变换来实现:
图像处理 真彩色增强
其中Mj表示f(x,y)的最大值。该线性灰度变换函数是个一维线性函数

在灰度的线性变换中,当a>1时,输出图像的对比度将增大;当a<1时,输出图像的对比度将减小;当a=1且b≠0时,所进行的操作仅使 所有像素的灰度值上移或下移,其效果是使整个图像更暗或更亮;如果a<0,则暗区域将变亮,亮区域将变暗。
(2)分段线性灰度变换
为了突出感兴趣的目标或者灰度区间,相对抑制那些不感兴趣的灰度区域,可采用分段线性法。常用的是三段线性变换。分段线性变换称为图像直方图的拉伸,它与完全线性变换类似,其不同之处在于其变换函数是分段的。其变换函数表达式如下:
图像处理 真彩色增强
灰度拉伸可以更加灵活地控制输出灰度直方图的分布,它可以有选择地拉伸某段灰度区间以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致图像偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同样如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜率<1)物体灰度区间来改善图像质量。
(3)对数函数灰度变换
当用某些非线性函数作为图像的映射函数时,可实现图像灰度的非线性变换,如利用对数函数、指数函数等可实现对数变换和指数变换。对数变换主要用于将图像的低灰度值部分扩展,将其高灰度值部分压缩,以达到强调图像低灰度部分的目的。变换方法由下式给出:

这里的对数变换,底数为v+1,实际计算的时候,需要用换底公式。底数越大,对低灰度部分的强调就越强,对高灰度部分的压缩也就越强。相反的,如果想强调高灰度部分,则用反对数函数就可以了。

三、真彩色增强方法

图像处理 真彩色增强

1、对HSI图像亮度增强

(1)将RGB图转化为HSI图;
(2)利用对灰度图增强的方法增强其中的I分量;
(3)再将结果转化为用RGB图来显示。

2、对HSI图像饱和度增强

(1)将RGB图转化为HSI图;
(2)增强其中的S分量;
(3)再将结果转化为用RGB图来显示。

3、对HSI图像饱和度与亮度增强

(1)将RGB图转化为HSI图;
(2)增强其中的I与S分量;
(3)再将结果转化为用RGB图来显示。

4、直接对RGB图像增强

(1)将RGB图像分解为R、G、B三分量图;
(2)分别对R、G、B三基色进行直方图修改;
(3)增强后再合成RGB图像。

四、程序设计

1、对HSI图像线性变换增强亮度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
I =I*1.4; 
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb) 
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像') 
subplot(223);imshow(rgb_new)  
title('线性变换增强亮度后的rgb图像') 
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')

2、对HSI图像分段线性变换增强亮度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
if I<50
    I=I*1.1;
end
if 50<=I<=200;
    I=I*1.4;
end
if I>=200;
    I=I*1.1;
end 
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)  
title('分段线性变换增强亮度后的rgb图像') 

3、对HSI图像线性变换增强对比度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
S =S*2.0; 
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb) 
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像') 
subplot(223);imshow(rgb_new)  
title('仅增强饱和度后的rgb图像')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')

4、对HSI图像对数变换增强对比度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50
    S=S*1.5;
end
if 50<=S<=200;
    S=S*2.0;
end
if S>=200;
    S=S*1.5;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)  
title('分段线性变换增强饱和度后的rgb图像')  

5、对HSI图像线性变换增强饱和度与亮度

var foo = ‘bar’;

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
S =S*2.0;
I=I*1.4;
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure; 
subplot(221);imshow(rgb) 
title('原始rgb图像')
subplot(222);imshow(hsi)
title('hsi图像') 
subplot(223);imshow(rgb_new)  
title('增强饱和度')
subplot(224);imshow(hsi_new)
title('增强后的hsi图像')

6、对HSI图像分段线性变换增强饱和度与亮度

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
hsi = rgbtohsi(rgb); 
H = hsi(:,:,1); 
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50
    S=S*1.5;
end
if 50<=S<=200;
    S=S*2.0;
end
if S>=200;
    S=S*1.5;
end
if I<50
    I=I*1.1;
end
if 50<=I<=200;
    I=I*1.4;
end
if I>=200;
    I=I*1.1;
end
hsi_new = cat(3,H,S,I);
rgb_new = hsitorgb(hsi_new); 
rgb_new = min(rgb_new,1);
figure;
subplot(221);imshow(rgb_new)  
title('分段线性变换增强亮度及饱和度后的rgb图像') 

7、对RGB图像直接线性变换进行彩色增强

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p); 
r(:,:,3)=zeros(o,p);
r=r*1.4;
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p); 
g(:,:,3)=zeros(o,p);
g=g*1.4;
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p); 
b(:,:,1)=zeros(o,p);
b=b*1.4;
rgb_new(:,:,1)=r(:,:,1); 
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(121);imshow(rgb);title('原始rgb图像');  
%subplot(231);imshow(r);title('红色分量图像');
%subplot(232);imshow(g);title('绿色分量图像');
%subplot(233);imshow(b);title('蓝色分量图像');
subplot(122);imshow(rgb_new);title('增强后rgb图像'); 

8、对RGB图像直接分段线性变换进行彩色增强

clear;clc;
rgb  = imread('C:\Users\lixuanye\Desktop\txcl\test1.jpg');  
[o p q]=size(rgb);
r(:,:,1)=rgb(:,:,1);
r(:,:,2)=zeros(o,p); 
r(:,:,3)=zeros(o,p);
r=imadjust(r,[0.2 0.8],[0,1]);
g(:,:,2)=rgb(:,:,2);
g(:,:,1)=zeros(o,p); 
g(:,:,3)=zeros(o,p);
g=imadjust(g,[0.2 0.8],[0,1]);
b(:,:,3)=rgb(:,:,3);
b(:,:,2)=zeros(o,p); 
b(:,:,1)=zeros(o,p);
b=imadjust(b,[0.2 0.8],[0,1]);
rgb_new(:,:,1)=r(:,:,1); 
rgb_new(:,:,2)=g(:,:,2);
rgb_new(:,:,3)=b(:,:,3);
figure;
subplot(221);imshow(rgb_new);title('分段线性变换增强后rgb图像'); 

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: 图像处理 真彩色增强

带尺寸的图片: 图像处理 真彩色增强

居中的图片: 图像处理 真彩色增强

居中并且带尺寸的图片: 图像处理 真彩色增强

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目 Value
电脑 $1600
手机 $12
导管 $1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列 第二列 第三列
第一列文本居中 第二列文本居右 第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPE ASCII HTML
Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
Quotes "Isn't this fun?" “Isn’t this fun?”
Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to-HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ(z)=0tz1etdt&ThinSpace;. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎