# 基于色彩恒常（ color constancy）特性的Frankle-McCann Retinex图像增强。

******************************************************************************************************************************************************************************

******************************************************************************************************************************************************************************

```function Test()
clear all
m=size(rgb,1);
n=size(rgb,2);
rr=zeros(m,n);
gg=zeros(m,n);
bb=zeros(m,n);
for i=1:m
for j=1:n
rr(i,j)=logm(double(rgb(i,j,1))+eps);
gg(i,j)=logm(double(rgb(i,j,2))+eps);
bb(i,j)=logm(double(rgb(i,j,3))+eps);
end
end
rr=rr/max(max(rr(:)));
gg=gg/max(max(gg(:)));
bb=bb/max(max(bb(:)));
rrr= retinex_frankle_mccann(rr, 4);
ggg= retinex_frankle_mccann(gg, 4);
bbb= retinex_frankle_mccann(bb, 4);
for i=1:m
for j=1:n
rrr(i,j)=round(exp(rrr(i,j)*5.54));
ggg(i,j)=round(exp(ggg(i,j)*5.54));
bbb(i,j)=round(exp(bbb(i,j)*5.54));
end
end
rgb=cat(3,uint8(rrr),uint8(ggg),uint8(bbb));
rgb=max(min(rgb,255),0);
imshow(rgb);
end

function [ Retinex ] = retinex_frankle_mccann( L, nIterations )
global RR IP OP NP Maximum
RR = L;
Maximum = max(L(:));                                 % maximum color value in the image
[nrows, ncols] = size(L);
shift = 2^(fix(log2(min(nrows, ncols)))-1);          % initial shift
OP = Maximum*ones(nrows, ncols);                     % initialize Old Product
while (abs(shift) >= 1)
for i = 1:nIterations
CompareWith(0, shift);                         % horizontal step
CompareWith(shift, 0);                         % vertical step
end
shift = -shift/2;                                 % update the shift
end
Retinex = NP;
end

function CompareWith(s_row, s_col)
global RR IP OP NP Maximum
IP = OP;
if (s_row + s_col > 0)
IP((s_row+1):end, (s_col+1):end) = OP(1:(end-s_row), 1:(end-s_col)) + ...
RR((s_row+1):end, (s_col+1):end) - RR(1:(end-s_row), 1:(end-s_col));
else
IP(1:(end+s_row), 1:(end+s_col)) = OP((1-s_row):end, (1-s_col):end) + ...
RR(1:(end+s_row),1:(end+s_col)) - RR((1-s_row):end, (1-s_col):end);
end
IP(IP > Maximum) = Maximum;                          % The Reset operation
NP = (IP + OP)/2;                                    % average with the previous Old Product
OP = NP;                                             % get ready for the next comparison
end```

***************************作者： laviewpbt 时间： 2013.4.18 联系QQ: 33184777 转载请保留本行信息*************************

0 条评论

• ### 将图像转换为JPG或GIF字节流。

其实这个东西真的没有什么可谈的，完全都是一堆API函数的调用，不过呢，隔那么一段时间就有人在那里问，而且一般也得不到正确的答案，因此，我还是画蛇添足...

• ### o(1)复杂度之双边滤波算法的原理、流程、实现及效果。

一、引言     双边滤波在图像处理领域中有着广泛的应用，比如去噪、去马赛克、光流估计等等，最近，比较流行的Non-Local算法也可以看成是双边滤波的一种...

• ### VB6.0用GDI+保存图像为BMP\JPG\PNG\GIF格式终结版。

鉴于之前在http://blog.csdn.net/laviewpbt/article/details/756547发布的代码很匆忙，也存在不少错误，现发布比较...

• ### 一个命令帮你实现磁盘空间占用分析

ncdu是Unix系统上的磁盘分析工具。名称和du相似，但是ncdu可视化增强的交互式用户界面，操作类类似top,指令 1.09之后的版本可以将文件列表导出为J...

• ### 一个命令帮你实现磁盘空间占用分析

ncdu是Unix系统上的磁盘分析工具。名称和du相似，但是ncdu可视化增强的交互式用户界面，操作类类似top,指令 1.09之后的版本可以将文件列表导出为J...

• ### Python人脸合成，秒变胡歌王俊凯

如今，随着技术的不断进步，“变脸”技术不再是四川喜剧的“独门武功”。运用机器学习的方法，我们同样可以实现人脸“融合”。当然这里说的人脸融合指的是将两个人的人脸照...

• ### 用Python玩人脸合成，你也能有一张明星脸（附代码）

如今，随着技术的不断进步，“变脸”技术不再是四川喜剧的“独门武功”。运用机器学习的方法，我们同样可以实现人脸“融合”。当然这里说的人脸融合指的是将两个人的人脸照...