matlab自动色阶,自动色阶算法实现
自动色阶算法用于图像增强,去雾等,其思想去掉像素值最高的比例,去掉像素值最低的一些比例,然后在将图像的其余像素值进行线性映射或者伽马校正至[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自动色阶,自动色阶算法实现相关推荐
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- matlab在电力行业中的仿真技术-MATLAB基于EKF算法估计电动汽车蓄电池的SOC
前言 关于本文的代码请参加,有兴趣的小伙伴可自行订阅. matlab电力系统仿真-MATLAB基于EKF算法估计电动汽车蓄电池的SOC 电动汽车(EV)是未来汽车的一大发展方向.动力锂电池组是电动汽车 ...
- ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性
ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 目录 输出结果 实现代码 输出结果 更新-- 实现代码 %RF:RF实现根据乳腺肿瘤特征 ...
- 光谱分类算法 matlab,Matlab K-means聚类算法对多光谱遥感图像进行分类(一)
Matlab K-means聚类算法对多光谱遥感图像进行分类 作者: 白艺亭 测试了下matlab自带kmeans函数,作者编写函数,以及ENVI下的Kmeans方法,对比其效果,代码及结果图展示见下 ...
- 基于MATLAB的Dijkstra算法实现及案例分析
摘要:为研究两地点之间距离(或耗时)最短路线规划,采用MATLAB编程的方法来实现,并利用Floyd算法记录距离(或耗时)最短路线.在不考虑各种影响因素的情况下,以随机小样本数据为例进行演示,求得由起 ...
- 单纯形表的matlab输出,自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据...
自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据 function [dcxb,x,fval,exitflag,flag]=simplex(f,A,b,Aeq,beq) %本程序相关说明 ...
- matlab切割肿瘤算法,ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性...
ML之RF:基于Matlab利用RF算法实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 目录 输出结果 实现代码 输出结果 更新-- 实现代码 %RF:RF实现根据乳腺肿瘤特征 ...
- matlab 流星雨,dijkstra算法及其matlab实现
http://blog.sina.com.cn/lyqmath 简介 dijkstra算法(迪杰斯特拉算法)是一种经典的优化算法.以其应用的广泛性与简便性,值得我们去研究. Dijkstra算法是典型 ...
- 花了1晚上diy的matlab解数独算法,很好理解!
花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...
- matlab 图像白平衡算法,Matlab常用白平衡算法
<Matlab常用白平衡算法>由会员分享,可在线阅读,更多相关<Matlab常用白平衡算法(21页珍藏版)>请在人人文库网上搜索. 1.1 灰色世界法灰色世界法(grey wo ...
最新文章
- 【Java Web开发指南】有状态会话Bean(SLSB) 和无状态会话Bean(SFSB)的区别
- 大型网站技术架构 读书笔记
- 【开源推荐】进阶实战,从一款音乐播放器开始
- python DataFrame join()
- centos6.3 nginx php,CentOS 6.3下nginx、php-fpm、drupal快速部署
- 开源中国android代码是什么,开源中国 OsChina Android 客户端源码分析(1)启动界面 app_start...
- 主板网卡灯关机后还亮_achair的电脑桌面2019 第2集 (机箱风道,Intel无线网卡……)...
- 洛谷 P4009 汽车加油行驶问题 题解
- 换手机的等等!什么时候能用上1000元级5G手机?中国移动公布时间表
- hadoop组件中的hive安装
- 制作bin文件.c解读
- 20年研发管理经验谈(二)
- 地球经纬度java语言表示_java根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)-Go语言中文社区...
- IE浏览器发送两次相同请求第二次读取第一次缓存问题
- android实现跑马灯效果,Android新手开发之旅-实现跑马灯效果
- 看似美好,实则无奈,水果业上限如此?
- ftrack与Adobe家三剑客!
- 字体设计:五种常用的字体修改方法,让你的文字更好看
- clear:both在HTML页面中的用法
- 用计算机绘制采油曲线,绘制采油曲线.ppt
热门文章
- 计算机行业高级职称考试大纲,【2017年整理】高级通信工程师职称考试--终端与业务考试大纲.doc...
- linux搭建文件服务器
- C语言实现“人工智障”三子棋
- mysql web 报表工具_.net的web报表设计工具
- 将Excel表格导入ArcGis并转为栅格数据
- 财务管理能力模型(转载)
- 仅用两周上线「寻规」“工程规范AI搜索引擎”,只因百度飞桨搭台
- Hybris培训团购课程开团啦!
- 微软IE团队不干了,火狐8吃不到蛋糕了
- 1月14日安卓实现跑马灯文字效果