【算法学习】【图像增强】【Retinex】White Patch Retinex 程序解读
%para=0代表原始方法,para=1代表改进后的方法
function out = WhitePatchRetinex(in,para)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
%%%%copyright: ofalling %%%%
if( nargin < 2 )
para = 0;
end
out = zeros(size(in)); %out定义一个和输入图像同等大小的零矩阵
inDouble = double(in); %将图像转换为double型
L = [0 0 0]; %定义一个行向量,用于存放光源的三个通道的值
if ( para == 0 ) %para=0,表示采用原始方法
for i = 1:3
L(i) = max(max(in(:,:,i))); %分别获取三个通道中的最大值
out(:,:,i) = inDouble(:,:,i)/L(i);%获取输出图像
end
elseif ( para == 1 ) % more robust algorithm
np = 0.1 * size(in,1)*size(in,2); %获取总像素个数的10%
for i = 1:3
H = imhist(in(:,:,i)); %每个通道的直方图
j = 256;
sum = 0;
while( (sum < np)&(j > 1) ) %只要像素点个数没有统计完,并且j>1
j = j-1;
sum = sum + H(j); %累加直方图值
end
L(i) = j;
out(:,:,i) = inDouble(:,:,i)/L(i);%输出图
end
end
end
接着前面的一篇介绍White Patch Retinex算法的介绍,自己试着运行了一下程序,由于自己电脑所带的版本为Matlab2010,该版本还没有White Patch Retinex算法,所以需要自己新建该函数(File->New->Function),函数的代码如上所示,封装完之后,采用如下方式调用该函数出现下面的错误:
将程序代码部分执行发现:
out=zeros(size('D:\123.jpg'))
输出为:
out =0 0 0 0 0 0 0 0 0 0
所以采用这种输入方式是不正确的:需要用imread函数读取图像后赋值给一个变量再显示。
调用程序:
A=imread('D:\123.png');
A1= WhitePatchRetinex(A,0);
A2=WhitePatchRetinex(A,1);
B1=imread('D:\124.png');
B2=WhitePatchRetinex(B1,0);
B3=WhitePatchRetinex(B1,1);
subplot(231),imshow(B1);
title('input1');
subplot(232),imshow(B2);
title('White Patch Retinex');
subplot(233),imshow(B3);
title('Modified White Patch Retinex');subplot(234),imshow(A);
title('input2');
subplot(235),imshow(A1);
title('White Patch Retinex');
subplot(236),imshow(A2);
title('Modified White Patch Retinex');
运行效果图:
【算法学习】【图像增强】【Retinex】White Patch Retinex 程序解读相关推荐
- Color Constancy 色彩恒常性(1)White Patch Retinex
[原创]Color Constancy 色彩恒常性(1)White Patch Retinex Color Constancy主要是通过 Marc Ebner 的一本专著" Color Co ...
- 关于MPU6050学习的一些总结之三MPU6050程序解读
关于MPU6050学习的一些总结之三MPU6050程序解读 前言 MPU6050.h 初始化函数 获取数据 数据处理(计算零偏) 结语 前言 经过两天的整理终于可以尝试解读MPU6050程序了,话不多 ...
- 七桥问题c语言程序数据结构,数据结构与算法学习——图论
什么是图? 在计算机程序设计中,图结构也是一种非常常见的数据结构 但是图论其实是一个非常大的话题 图结构是一种与树结构有些相似的数据结构 图论是数学的一个分支,并且在数学概念上,树是图的一种 它以图为 ...
- 算法学习之路和程序员(技术)学习必读书籍
原文链接:http://lucida.me/blog/on-learning-algorithms/ 转 算法学习之路和程序员(技术)学习必读书籍 2015年05月26日 09:46:56 阅读数:1 ...
- python图像增强算法_retinex图像增强算法的研究
图像增强方面我共研究了Retinex.暗通道去雾.ACE等算法.其实,它们都是共通的.甚至可以说,Retinex和暗通道去雾就是同一个算法的两个不同视角,而ACE算法又是将Retinex和灰度世界等白 ...
- YOLO系列算法学习
YOLO系列算法学习 YOLOV1算法 预测阶段(前向推断) yolo基准模型和tiny模型结构 基准模型 为什么是7x7x30的输出? 流程可视化 预测阶段后处理-NMS非极大值抑制 两个bboxs ...
- 拿下斯坦福和剑桥双offer,00后的算法学习之路
董文馨,00后,精通英语,西班牙语.斯坦福大学计算机系和剑桥大学双Offer,秋季将进入斯坦福大学学习. 10岁开始在国外上学:12岁学Scratch: 13岁学HTML & CSS: 14岁 ...
- 原创 | 初学者友好!最全算法学习资源汇总(附链接)
在计算机发展飞速的今天,也许有人会问,"今天计算机这么快,算法还重要吗?"其实永远不会有太快的计算机,因为我们总会想出新的应用.虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快 ...
- python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...
- 机器学习(八)Apriori算法学习
Apriori算法学习 原文地址:http://blog.csdn.net/hjimce/article/details/45438507 作者:hjimce 本文主要是我学习<机器学习实战&g ...
最新文章
- Python之Fabric
- Sublime Text 2报“Decode error - output not utf-8”错误的解决办法
- vue-自主研发非父子关系组件之间通信的问题
- android gps 锁屏更新坐标_MIUI内测版更新日志解析,以及动画解说!
- 新型前端开发工程师的三个境界 后端开发工程师如何快速转前端
- [故障解决]Mysql爆出ERROR 1044 (42000)的错误怎么办?
- UVA 213 Message Decoding
- spring学习笔记06-spring整合junit(出现的问题,解决的思路)
- 刷leetcode第五题-最长回文字符串
- 性能测试Jmeter吞吐量控制器使用总结
- 手机虚拟摄像头_新游 | 打破次元壁障,《猪猪侠AR虚拟使命》现实约战,一切尽在创酷互动!...
- 降采样_嫦娥五号,欢迎回家!我国首次地外天体采样返回任务圆满完成
- Access链接表的使用
- javascript如何设置名字输入不合法
- redis报错: redis.exceptions.ResponseError: value is not an integer or out of range
- kx驱动中的DSP设置
- 2022.02.17学习总结(最小生成树)
- IDE SATA SCSI iSCSI等存储硬盘对比与分析
- 身份证中出生年月的提取
- 2022朝花夕拾-持续快速成长
热门文章
- 移动短信回执怎么开通_微信短视频直播怎么做?
- 幻塔html5,《幻塔》捏脸系统怎么玩 捏脸系统玩法分享
- php不兼容_怎么解决php不兼容问题
- 重置系统_WIN10系统如何创建密码重置盘
- 下列哪个滤波器是非线性的_上海海事数字信号处理2006试卷A参考答案
- mysql 不同服务器数据库表同步_mysql 不同服务器数据库表同步
- gifrecord可以卸载吗_频繁安装卸载 App,手机真能受得了吗?!
- 什么是端到端的训练或学习?
- [python][os]分离文件目录,文件名以及文件后缀
- 删除python读取的txt每一行尾部的\n