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

本文主要参考人在旅途的博客,采用matlab语言实现,算法不在详细叙述,在此代码留做备注。http://www.cnblogs.com/Imageshop/archive/2011/11/13/2247614.html。

以下是程序代码:

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));

imDst(:,:,2) = GreenMap(I(:,:,2));

imDst(:,:,3) = BlueMap(I(:,:,3));

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(:,:,1) = GrayMap (I(:,:));

end

%--------------------------------------------------------------------

function map = linearmap(low,high)

map = [0:1:255];

for i=0:255

if(i

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的去雾,但是这些算法还不是很稳定,当先验知识失效时,处理失真比较严重。顺便一提的是,美图秀秀的一键去雾即是采用此方法。

matlab自动色阶,自动色阶算法实现相关推荐

  1. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  2. matlab在电力行业中的仿真技术-MATLAB基于EKF算法估计电动汽车蓄电池的SOC

    前言 关于本文的代码请参加,有兴趣的小伙伴可自行订阅. matlab电力系统仿真-MATLAB基于EKF算法估计电动汽车蓄电池的SOC 电动汽车(EV)是未来汽车的一大发展方向.动力锂电池组是电动汽车 ...

  3. ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性

    ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 目录 输出结果 实现代码 输出结果 更新-- 实现代码 %RF:RF实现根据乳腺肿瘤特征 ...

  4. 光谱分类算法 matlab,Matlab K-means聚类算法对多光谱遥感图像进行分类(一)

    Matlab K-means聚类算法对多光谱遥感图像进行分类 作者: 白艺亭 测试了下matlab自带kmeans函数,作者编写函数,以及ENVI下的Kmeans方法,对比其效果,代码及结果图展示见下 ...

  5. 基于MATLAB的Dijkstra算法实现及案例分析

    摘要:为研究两地点之间距离(或耗时)最短路线规划,采用MATLAB编程的方法来实现,并利用Floyd算法记录距离(或耗时)最短路线.在不考虑各种影响因素的情况下,以随机小样本数据为例进行演示,求得由起 ...

  6. 单纯形表的matlab输出,自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据...

    自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据 function [dcxb,x,fval,exitflag,flag]=simplex(f,A,b,Aeq,beq) %本程序相关说明 ...

  7. matlab切割肿瘤算法,ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性...

    ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 目录 输出结果 实现代码 输出结果 更新-- 实现代码 %RF:RF实现根据乳腺肿瘤特征 ...

  8. matlab 流星雨,dijkstra算法及其matlab实现

    http://blog.sina.com.cn/lyqmath 简介 dijkstra算法(迪杰斯特拉算法)是一种经典的优化算法.以其应用的广泛性与简便性,值得我们去研究. Dijkstra算法是典型 ...

  9. 花了1晚上diy的matlab解数独算法,很好理解!

    花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...

  10. matlab 图像白平衡算法,Matlab常用白平衡算法

    <Matlab常用白平衡算法>由会员分享,可在线阅读,更多相关<Matlab常用白平衡算法(21页珍藏版)>请在人人文库网上搜索. 1.1 灰色世界法灰色世界法(grey wo ...

最新文章

  1. 【Java Web开发指南】有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别
  2. 大型网站技术架构 读书笔记
  3. 【开源推荐】进阶实战,从一款音乐播放器开始
  4. python DataFrame join()
  5. centos6.3 nginx php,CentOS 6.3下nginx、php-fpm、drupal快速部署
  6. 开源中国android代码是什么,开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start...
  7. 主板网卡灯关机后还亮_achair的电脑桌面2019 第2集 (机箱风道,Intel无线网卡……)...
  8. 洛谷 P4009 汽车加油行驶问题 题解
  9. 换手机的等等!什么时候能用上1000元级5G手机?中国移动公布时间表
  10. hadoop组件中的hive安装
  11. 制作bin文件.c解读
  12. 20年研发管理经验谈(二)
  13. 地球经纬度java语言表示_java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)-Go语言中文社区...
  14. IE浏览器发送两次相同请求第二次读取第一次缓存问题
  15. android实现跑马灯效果,Android新手开发之旅-实现跑马灯效果
  16. 看似美好,实则无奈,水果业上限如此?
  17. ftrack与Adobe家三剑客!
  18. 字体设计:五种常用的字体修改方法,让你的文字更好看
  19. clear:both在HTML页面中的用法
  20. 用计算机绘制采油曲线,绘制采油曲线.ppt

热门文章

  1. 计算机行业高级职称考试大纲,【2017年整理】高级通信工程师职称考试--终端与业务考试大纲.doc...
  2. linux搭建文件服务器
  3. C语言实现“人工智障”三子棋
  4. mysql web 报表工具_.net的web报表设计工具
  5. 将Excel表格导入ArcGis并转为栅格数据
  6. 财务管理能力模型(转载)
  7. 仅用两周上线「寻规」“工程规范AI搜索引擎”,只因百度飞桨搭台
  8. Hybris培训团购课程开团啦!
  9. 微软IE团队不干了,火狐8吃不到蛋糕了
  10. 1月14日安卓实现跑马灯文字效果