【算法学习】【图像增强】【Retinex】White Patch Retinex 程序解读

本文介绍并实践了WhitePatchRetinex算法及其改进版,通过Matlab代码实现图像增强,展示了两种方法的实现过程及效果对比。
%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');

运行效果图:





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌三角猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值