如何对hsi图像进行clahe算法

直方图是图像色彩统计特征的抽象表述。基于直方图可以实现很多有趣的算法。例如,图像增强中利用直方图来调整图像的、有人利用直方图来进行大规模无损数据隐藏、还有人利用梯度直方图HOG来构建图像特征进而实现目标检测。本节我们就来讨论重要的直方图均衡化算法,说它重要是因为以此为基础后续又衍生出了许多实用而有趣的算法。Histogram equalization如果一幅图像的像素灰度值在一个过于有限的范围内聚集,那么图像的效果即会很糟糕,直接观感就是对比度很弱。下图来自维基百科,第一幅图的直方图分布非常不均衡。如果把直方图均匀地延展到整个分布域内,则图像的效果显得好了很多。Matlab中提供了现成的函数“histeq()”来实现图像的直方图均衡。但为了演示说明算法的原理,下面我将在Matlab中自行编码实现图像的直方图均衡。通过代码来演示这个算法显然更加直观,更加易懂。当然,其实我还不得不感叹,如果仅仅是作为图像算法研究之用,Matlab确实非常好用。首先读入图像,并将其转化为灰度图。然后提取图像的长和宽。image = imread('Unequalized_Hawkes_Bay_NZ.jpg');
Img = rgb2gray(image);
[height,width]=size(image);然后绘制一下原始图像的直方图。[counts1, x] = imhist(Img,256);
counts2 = counts1/height/
stem(x, counts2);统计每个灰度的像素值累计数目。NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:height
for j = 1: width
%对应灰度值像素点数量增加一
%因为NumPixel的下标是从1开始,但是图像像素的取值范围是0~255,所以用NumPixel(Img(i,j) + 1)
NumPixel(Img(i,j) + 1) = NumPixel(Img(i,j) + 1) + 1;
end然后将频数值算为频率ProbPixel = zeros(1,256);
for i = 1:256
ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end再用函数cumsum来计算cdf,并将频率(取值范围是0.0~1.0)映射到0~255的无符号整数。CumuPixel = cumsum(ProbPixel);
CumuPixel = uint8(255 .* CumuPixel + 0.5);直方图均衡。赋值语句右端,Img(i,j)被用来作为CumuPixel的索引。比如Img(i,j) = 120,则从CumuPixel中取出第120个值作为Img(i,j) 的新像素值。for i = 1:height
for j = 1: width
Img(i,j) = CumuPixel(Img(i,j));
end最后显示新图像的直方图。imshow(Img);
[counts1, x] = imhist(Img,256);
counts2 = counts1/height/
stem(x, counts2);当然,上述讨论的是灰度图像的直方图均衡。对于彩色图像而言,你可能会想到分别对R、G、B三个分量来做处理,这也确实是一种方法。但有些时候,这样做很有可能导致结果图像色彩失真。因此有人建议将RGB转换为HSV之后,对V分量进行直方图均衡处理以保存图像色彩不失真。下面我们来做一些对比实验。待处理图像是标准的图像处理测试用图couple图,如下所示。首先,我们分别处理R、G、B三个分量,为了简便我们直接使用matlab中的函数histeq()。a = imread('couple.tiff');
R = a(:,:,1);
G = a(:,:,2);
B = a(:,:,3);
R = histeq(R, 256);
G = histeq(G, 256);
B = histeq(B, 256);
a(:,:,1) = R;
a(:,:,2) = G;
a(:,:,3) = B;
imshow(a)下面的代码使用了另外一种方式,即将色彩空间转换到HSV后,对V通道进行处理。由于代码基本与前面介绍的一致,这里我们不再做过多解释了。Img = imread('couple.tiff');
hsvImg = rgb2hsv(Img);
V=hsvImg(:,:,3);
[height,width]=size(V);
V = uint8(V*255);
NumPixel = zeros(1,256);
for i = 1:height
for j = 1: width
NumPixel(V(i,j) + 1) = NumPixel(V(i,j) + 1) + 1;
ProbPixel = zeros(1,256);
for i = 1:256
ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
CumuPixel = cumsum(ProbPixel);
CumuPixel = uint8(255 .* CumuPixel + 0.5);
for i = 1:height
for j = 1: width
V(i,j) = CumuPixel(V(i,j));
V = im2double(V);
hsvImg(:,:,3) = V;
outputImg = hsv2rgb(hsvImg);
imshow(outputImg);
最后,来对比一下不同方法对彩色图像的处理效果。下面的左图是采用R、G、B三分量分别处理得到的结果。右图是对HSV空间下V通道处理之结果。显然,右图的效果更理想,而左图则出现了一定的色彩失真。事实上,对彩色图像进行直方图均衡是图像处理研究领域一个看似简单,但是一直有人在研究的话题。我们所说的对HSV空间中V分量进行处理的方法也是比较基本的策略。很多相关的研究都提出了更进一步的、适应性更强的彩色图像直方图均衡化算法。有兴趣的读者可以参阅相关文献以了解更多。分别处理R、G、B三个分量之结果&&& & & & & & & & & & & & & & & & & & && && 转换到HSV空间后处理V分量这是本系列文章的第一篇,在下一篇文章中我们将要讨论CLAHE算法,也就是限制对比度的自适应直方图均衡算法。如果你是图像处理的同道中人,欢迎加入图像处理学习群()。更多有趣有用的图像处理算法还可以参考我的《数字图像处理原理与实践(Matlab版)》clahe 自适应直方图均衡算法,因为是从局部入手,所以图像增强效果显著。 Graph program 图形
238万源代码下载-
&文件名称: clahe
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 6 KB
&&上传时间:
&&下载次数: 1
&&提 供 者:
&详细说明:自适应直方图均衡算法,因为是从局部入手,所以图像增强效果显著。-This programme introduces an algorithm of adaptive histogram equipoise.And the effect of the enhancement is obvious because it begins from the part of the image
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&clahe.cpp&&clahe.h&&zzsk.txt
&[]:纯粹是垃圾
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 自适应的直方图均衡化,可以用在window 32 和 window 64 上
&[] - 基于单尺度、多尺度、原始的Retinex算法,matlab实现,非常值得研究!在光照增强中有着非常好的应用!工具类服务
编辑部专用服务
作者专用服务
基于双线性插值的CLAHE算法研究与实现
针对现有的低能见度图像增强的AHE算法(自适应直方图均衡)和CLAHE算法(限制对比度的自适应直方图均衡化)存在复杂度高及效率低的问题,提出了基于双线性插值的CLAHE算法.利用双线性插值方法降低CLAHE算法的时间复杂度,并在TMS320C6748开发板上对其进行优化.实验结果表明,该算法无论是增强效果还是处理速率都明显优于原CLAHE算法.
LIU Qiaoling
作者单位:
成都大学电子信息工程学院,四川成都,610106
年,卷(期):
在线出版日期:
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社基于直方图的图像增强算法(HE、CLAHE、Retinex)之(一)
直方图是图像色彩统计特征的抽象表述。基于直方图可以实现很多有趣的算法。例如,图像增强中利用直方图来调整图像的对比度、有人利用直方图来进行大规模无损数据隐藏、还有人利用梯度直方图HOG来构建图像特征进而实现目标检测。本节我们就来讨论重要的直方图均衡化算法,说它重要是因为以此为基础后续又衍生出了许多实用而有趣的算法。Histogram equalization如果一幅图像的像素灰度值在一个过于有限的范围内聚集,那么图像的程序效果即会很糟糕,直接观感就是对比度很弱。下图来自维基百科,第一幅图的直方图分布非常不均衡。如果把直方图均匀地延展到整个分布域内,则图像的效果显得好了很多。Matlab中提供了现成的函数“histeq()”来实现图像的直方图均衡。但为了演示说明算法的原理,下面我将在Matlab中自行编码实现图像的直方图均衡。通过代码来演示这个算法显然更加直观,更加易懂。当然,其实我还不得不感叹,如果仅仅是作为图像算法研究之用,Matlab确实非常好用。首先读入图像,并将其转化为灰度图。然后提取图像的长和宽。image = imread('Unequalized_Hawkes_Bay_NZ.jpg');Img = rgb2gray(image);[height,width]=size(image);然后绘制一下原始图像的直方图。[counts1, x] = imhist(Img,256);counts2 = counts1/height/stem(x, counts2);统计每个灰度的像素值累计数目。NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级for i = 1:heightfor j = 1: width%对应灰度值像素点数量增加一%因为NumPixel的下标是从1开始,但是图像像素的取值范围是0~255,所以用NumPixel(Img(i,j) + 1)NumPixel(Img(i,j) + 1) = NumPixel(Img(i,j) + 1) + 1;endend然后将频数值算为频率ProbPixel = zeros(1,256);for i = 1:256ProbPixel(i) = NumPixel(i) / (height * width * 1.0);end再用函数cumsum来计算cdf,并将频率(取值范围是0.0~1.0)映射到0~255的无符号整数。CumuPixel = cumsum(ProbPixel);CumuPixel = uint8(255 .* CumuPixel + 0.5);直方图均衡。赋值语句右端,Img(i,j)被用来作为CumuPixel的索引。比如Img(i,j) = 120,则从CumuPixel中取出第120个值作为Img(i,j) 的新像素值。for i = 1:heightfor j = 1: widthImg(i,j) = CumuPixel(Img(i,j));endend最后显示新图像的直方图。imshow(Img);[counts1, x] = imhist(Img,256);counts2 = counts1/height/stem(x, counts2);当然,上述讨论的是灰度图像的直方图均衡。对于彩色图像而言,你可能会想到分别对R、G、B三个分量来做处理,这也确实是一种方法。但有些时候,这样做很有可能导致结果图像色彩失真。因此有人建议将RGB空间转换为HSV之后,对V分量进行直方图均衡处理以保存图像色彩不失真。下面我们来做一些对比实验。待处理图像是标准的图像处理测试用图couple图,如下所示。首先,我们分别处理R、G、B三个分量,为了简便我们直接使用matlab中的函数histeq()。a = imread('couple.tiff');R = a(:,:,1);G = a(:,:,2);B = a(:,:,3);R = histeq(R, 256);G = histeq(G, 256);B = histeq(B, 256);a(:,:,1) = R;a(:,:,2) = G;a(:,:,3) = B;imshow(a)下面的代码使用了另外一种方式,即将色彩空间转换到HSV后,对V通道进行处理。由于代码基本与前面介绍的一致,这里我们不再做过多解释了。Img = imread('couple.tiff');hsvImg = rgb2hsv(Img);V=hsvImg(:,:,3);[height,width]=size(V);V = uint8(V*255);NumPixel = zeros(1,256);for i = 1:heightfor j = 1: widthNumPixel(V(i,j) + 1) = NumPixel(V(i,j) + 1) + 1;endendProbPixel = zeros(1,256);for i = 1:256ProbPixel(i) = NumPixel(i) / (height * width * 1.0);endCumuPixel = cumsum(ProbPixel);CumuPixel = uint8(255 .* CumuPixel + 0.5);for i = 1:heightfor j = 1: widthV(i,j) = CumuPixel(V(i,j));endend V = im2double(V);hsvImg(:,:,3) = V;outputImg = hsv2rgb(hsvImg);imshow(outputImg);最后,来对比一下不同方法对彩色图像的处理效果。下面的左图是采用R、G、B三分量分别处理得到的结果。右图是对HSV空间下V通道处理之结果。显然,右图的效果更理想,而左图则出现了一定的色彩失真。事实上,对彩色图像进行直方图均衡是图像处理研究领域一个看似简单,但是一直有人在研究的话题。我们所说的对HSV空间中V分量进行处理的方法也是比较基本的策略。很多相关的研究文章都提出了更进一步的、适应性更强的彩色图像直方图均衡化算法。有兴趣的读者可以参阅相关文献以了解更多。分别处理R、G、B三个分量之结果
转换到HSV空间后处理V分量这是本系列文章的第一篇,在下一篇文章中我们将要讨论CLAHE算法,也就是限制对比度的自适应直方图均衡算法。如果你是图像处理的同道中人,欢迎加入图像处理学习群()。更多有趣有用的图像处理算法还可以参考我的《数字图像处理原理与实践(Matlab版)》
最新教程周点击榜
微信扫一扫}

我要回帖

更多关于 opencv clahe 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信