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

交流探讨,微信关注公众号:十三的梦

一、真彩色增强原理

在图像的自动分析中,彩色是一种能简化目标提取和分类的重要参量。在彩色图像处理中,选择合适的彩色模型是很重要的。电视摄像机和彩色扫描仪都是根据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('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('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
if I<50I=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('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('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50S=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('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('test1.jpg');
hsi = rgbtohsi(rgb);
H = hsi(:,:,1);
S = hsi(:,:,2);
I = hsi(:,:,3);
if S<50S=S*1.5;
end
if 50<=S<=200;S=S*2.0;
end
if S>=200;S=S*1.5;
end
if I<50I=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('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('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图像');

微信扫码或搜索关注十三的梦↓↓↓ ↓↓↓探讨更多有趣话题哦

图像处理 真彩色增强相关推荐

  1. matlab图像处理命令(二)

    转自:http://blog.163.com/crazyzcs@126/blog/static/1297420502010229104452729/ (非原处) 图像增强 1. 直方图均衡化的 Mat ...

  2. 数字图像处理应用matlab,数字图像处理与应用(MATLAB版)

    第 1章 绪论 1n 1.1 图像的概念 1n 1.2 图像的分类 2n 1.3 图像的表示 2n 1.3.1 图像信号的表示 2n 1.3.2 数字图像的表示 3n 1.3.3 颜色模型 4n 1. ...

  3. 国科大数字图像处理(复习与整理)

    图像处理复习笔记: 1.证明一个系统是线性系统 2.证明函数卷积的傅里叶变换等于函数傅氏变换后的乘积 3.采样定理与混叠 4.直方图均衡化 第一节课知识点 第二节课知识点 第三节课知识点 第四节课知识 ...

  4. matlab图像处理常用函数大全

    显示索引图像和灰度图像 >> [X,map]=imread('trees.tif'); >> gmap=rgb2gray(map); >> figure,imsho ...

  5. 数字图像处理之第三章

    第三章 图像增强 1.图像增强的方法有很多种,按增强的目的和效果来划分,图像增强的方法大致可以分为灰度级修正.图像平滑.图像锐化.图像增晰和色彩增晰等. 2.灰度级修正(主要用来提高图像对比度,提高人 ...

  6. 数字图像处理学习记录

    目录 第一章:导论 第二章:数字图像处理基础 第三章:图像变换 第四章:图像增强 ​ 第五章:图像复原与重建 第六章:图像编码与压缩(无内容) 第七章:图像分割 第一章:导论 图像(按图像空间坐标和亮 ...

  7. 数字图像处理05--彩色增强

    数字图像处理 1. 简述并举例说明彩色增强技术的分类 伪彩色增强 由于人类对颜色的识别能力远强于灰度识别,需要将灰度图像按照线性映射成不同的彩色提高人对图像的识别能力,并提高图片的可视度 亮度切割 基 ...

  8. c++gdal如何在大图像中截取小图像并获取其图像信息_OpenCV 图像处理大纲

    图像的取样和量化 取样就是取像素点,量化把灰度值量化到256个灰度级 数字图像的表示 图像定义为二位函数f(x, y),x,y是空间坐标f(x, y)是点的幅值 数字图像的质量 灰度级:表明像素明暗程 ...

  9. matlab中wenergy函数,MATLAB 7.0图形图像处理

    第1章 MATLAB 7.O基础 1.1 MATLAB语言介绍 1.1.1 MATLAB产品系列与特点 1.1.2 MATLAB 7.0的新特点 1.2 MATLAB编程环境 1.2.1 初识MATL ...

最新文章

  1. GitHub实战系列~1.环境部署+创建第一个文件 2015-12-9
  2. AI实战:从入门到精通系列——用感知器实现情感分类(一)
  3. 力扣452 用最少的箭引爆气球(个人感悟向,非完整代码)
  4. 用Linux命令行实现删除和复制指定类型的文件
  5. 顺丰不顺、京东动荡,都是物流基因惹的祸?
  6. 广东哪个服务器稳定,稳定服务器地址广东
  7. [转]caffe-ssd中 net.forward()返回值
  8. 【数据科学系统学习】机器学习算法 # 西瓜书学习记录 [8] 支持向量机(二)...
  9. ssh无密码登录设置方法以及出现问题 ECDSA host key 和IP地址对应的key不同的解决...
  10. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义
  11. js下载activex
  12. 基于Bilibili热门视频Top100弹幕的数据爬取与分析(报告版)
  13. chromecast协议_如何将Chromecast用作快速信息仪表板
  14. 怎么用计算机计算化学,计算化学
  15. 【给量化行情插上翅膀】天翼云电脑上实践纯Python通过LMDB加速股票行情读写速度
  16. 如何给电脑硬盘分区?
  17. Python编写无界面版打字练习程序
  18. 题解 CF174A 【Problem About Equation】
  19. 银河麒麟系统设置变更
  20. 从线性到非线性模型-线性回归,岭回归,Lasso回归,局部加权线性回

热门文章

  1. 幸福就是把爱留给爱你的人
  2. python autohotkey_AutoHotkey和Quicker各有什么优势和弊端?
  3. 这家日本餐厅第一!2022年度亚洲50最佳餐厅榜单出炉,上海、深圳、香港均有上榜...
  4. 堆排HeapSort
  5. 求知讲堂Java视频-基础整理-算术赋值比较逻辑位运算符-基础整理
  6. ntpd服务,ntpdate时间同步
  7. Opencv之图像滤波:2.均值滤波(cv2.blur)
  8. 获取 Nuget 版本号
  9. 如何学电机(初期之感性认知)
  10. c语言动物游戏,课堂必备关于小动物的手指游戏