自动色阶、自动对比度算法实现

引言

自动色阶算法用于图像增强,去雾等,其思想去掉像素值最高的比例,去掉像素值最低的一些比例,然后在将图像的其余像素值进行线性映射或者伽马校正至[0, 255]区间。如下图,在图像处理中是不是很熟悉?!

本文主要参考人在旅途的博客,采用matlab语言实现,算法不在详细叙述,在此代码留做备注。

代码

autolevel:

function imDst = autolevel(varargin)
[I,lowCut,highCut] =parse_inputs(varargin{:});
[hei,wid,~] = size(I);

PixelAmount = wid * hei;
if size(I,3)==3

   [HistRed,~]  = imhist(I(:,:,1));
   [HistGreen,~] = imhist(I(:,:,2));
   [HistBlue,~] = imhist(I(:,:,3));

   CumRed = cumsum(HistRed);
   CumGreen = cumsum(HistGreen);
   CumBlue = cumsum(HistBlue);

   minR =find(CumRed>=PixelAmount*lowCut,1,‘first‘);
   minG = find(CumGreen>=PixelAmount*lowCut,1,‘first‘);
   minB =find(CumBlue>=PixelAmount*lowCut,1,‘first‘);

   maxR =find(CumRed>=PixelAmount*(1-highCut),1,‘first‘);
   maxG =find(CumGreen>=PixelAmount*(1-highCut),1,‘first‘);
   maxB = find(CumBlue>=PixelAmount*(1-highCut),1,‘first‘);

   RedMap = linearmap(minR,maxR);
   GreenMap = linearmap(minG,maxG);
   BlueMap = linearmap(minB,maxB);

   imDst = zeros(hei,wid,3,‘uint8‘);
   imDst(:,:,1) = RedMap (I(:,:,1)+1);
   imDst(:,:,2) = GreenMap(I(:,:,2)+1);
   imDst(:,:,3) = BlueMap(I(:,:,3)+1);

else
   HistGray = imhist(I(:,:));
   CumGray = cumsum(HistRed);
   minGray =find(CumGray>=PixelAmount*lowCut,1,‘first‘);
   maxGray =find(CumGray>=PixelAmount*(1-highCut),1,‘first‘);
   GrayMap = linearmap(minGray,maxGray);

   imDst = zeros(hei,wid,‘uint8‘);
   imDst(:,:) = GrayMap (I(:,:)+1);
end

%--------------------------------------------------------------------
function map = linearmap(low,high)
map = [0:1:255];
for i=0:255
   if(i<low)
       map(i+1) = 0;
   elseif (i>high)
       map(i+1) = 255;
   else
       map(i+1) =uint8((i-low)/(high-low)*255);
   end
end

%-------------------------------------------------------------------
function [I,lowCut,highCut] = parse_inputs(varargin)
narginchk(1,3)
I = varargin{1};
validateattributes(I,{‘double‘,‘logical‘,‘uint8‘,‘uint16‘,‘int16‘,‘single‘},{},...
             mfilename,‘Image‘,1);

if nargin == 1
   lowCut = 0.005;
   highCut = 0.005;
elseif nargin == 3
   lowCut = varargin{2};
   highCut = varargin{3};
else
   error(message(‘images:im2double:invalidIndexedImage‘,‘single, or logical.‘));
end

测试驱动代码:

I = imread(‘bikes1.jpg‘);
Out = autolevel(I,0.005,0.005);
imshow([I Out])

结果

一键去雾

低照度图像增强、水下图像增强

评价

自动色阶用来做去雾,还是比较稳定的,特别是对于雾分布均匀,效果很好;缺点也比较明显,不能自适应雾的分布,且通道分离计算,有些时候会带来一些颜色失真现象。现在也有很多种其他增强方法,例如暗通道去雾,优化对比度去雾,基于Color-Lines的去雾,但是这些算法还不是很稳定,当先验知识失效时,处理失真比较严重。顺便一提的是,美图秀秀的一键去雾即是采用此方法。

另外,自动对比度算法与自动色阶及其类似,可以参考更多内容,在此不再详述。

更多阅读

http://www.cnblogs.com/Imageshop/archive/2011/11/13/2247614.html

http://blog.csdn.net/bluecol/article/details/45422653

转载请保留以下信息

作者 更新日期 联系方式
风吹夏天 2015年5月8日 [email protected]
时间: 2024-08-11 15:20:10

自动色阶、自动对比度算法实现的相关文章

Photoshop图像处理算法—自动对比度和自动色调(自动色阶)

1.原理部分 2.程序部分(matlab)  自动色调 clc;clear;close all; img=imread('IMG_0950_cut.jpg'); Image=double(img)/255; figure(1); imshow(Image); %% R=Image(:,:,1); G=Image(:,:,2); B=Image(:,:,3); percent=0.001; %% Image_out(:,:,1)=Auto_Tune(R, percent); Image_out(:

图像滤镜艺术---ZPhotoEngine超级算法库

一直以来,都有个想法,想要做一个属于自己的图像算法库,这个想法,在经过了几个月的努力之后,终于诞生了,这就是ZPhotoEngine算法库. 这个算法库目前包含两个模块:基础图像算法模块+滤镜模块,使用C语言实现,现在免费分享给大家,可以适用于PC/Android/Ios三大平台. 1,基础图像算法模块 这个模块,本人以Photoshop基础算法为原形,模拟出了PS大部分的基础算法. 为什么选择Photoshop算法?这个也是我的算法库一个优势,目前开源算法库多如牦牛,但是,能和PS媲美的,少之

PhotoShop 图像处理 算法 汇总

不定期更新 ...... 直接点标题即可链接到原文. 图层混合算法: PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡) PS图层混合算法之二(线性加深,线性减淡,变亮,变暗) PS图层混合算法之三(滤色, 叠加, 柔光, 强光) PS图层混合算法之四(亮光, 点光, 线性光, 实色混合) PS图层混合算法之五(饱和度,色相,颜色,亮度) PS图层混合算法之六(差值,溶解, 排除) 图像调整算法: 色彩转换--RGB & HSV 色彩转换--RGB & HSL 色彩转换--RG

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果

本文完全转载:http://www.cnblogs.com/Imageshop/p/3281703.html,再次仅当学习交流使用.. <Single Image Haze Removal Using Dark Channel Prior>一文中图像去雾算法的原理.实现.效果(速度可实时) 本文算法合作联系QQ: 33184777, 非诚勿扰 邮件地址:   [email protected] 最新的效果见 :http://video.sina.com.cn/v/b/124538950-125

高级图像去雾算法的快速实现(转载)

原文:http://blog.csdn.net/laviewpbt/article/details/11555877 最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道<Single Image Haze Removal Using Dark Channel Prior>这篇文章,该文是2009年CVPR最佳论文.作者何凯明博士,2007年清华大学毕业

关于Retinex图像增强算法的一些新学习。

最近再次看了一下IPOL网站,有一篇最近发表的文章,名字就是Multiscale Retinex,感觉自己对这个已经基本了解了,但还是进去看了看,也有一些收获,于是抽空把他们稍微整理了下,原始文章及其配套代码详见:http://www.ipol.im/pub/art/2014/107/. 之前在我的 带色彩恢复的多尺度视网膜增强算法(MSRCR)的原理.实现及应用 一文中已经较为详细的描述了Multiscale Retinex的基本原理和应用,这里就不再做过多的说明.为表述方便,还是贴出其基本的

暗通道优先的图像去雾算法(上)

?? 11.1  暗通道优先的图像去雾算法 图像增强与图像修复二者之间有一定交叉,尽管它们一个强调客观标准,一个强调主观标准,但毕竟最终的结果都改善了图像的质量.图像去雾就是这两种技术彼此交叉领域中最典型的代表.如果将雾霾看作是一种噪声,那么去除雾霾的标准显然是非常客观的,也就是要将图像恢复至没有雾霾下所获取的情况.但是如果将在雾霾环境下拍摄的照片就看作是一种图像本来的面貌,那么去雾显然就是人们为了改善主观视觉质量而对图像所进行的一种增强.早期图像去雾的研究并没有得到应有的重视,很多人认为它的实

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h