基于Welsh算法的灰度图像彩色化的研究.docx
《基于Welsh算法的灰度图像彩色化的研究.docx》由会员分享,可在线阅读,更多相关《基于Welsh算法的灰度图像彩色化的研究.docx(13页珍藏版)》请在冰豆网上搜索。
基于Welsh算法的灰度图像彩色化的研究
基于Welsh算法的灰度图像彩色化的研究
杨亚南王磊孙田雨
(燕山大学理学院信息与计算科学专业河北秦皇岛)
摘要Welsh算法在将灰度图像彩色化的过程中取得了较好的效果,是却存在着像素匹配过程中循环过多、速度过慢、彩色化后的图像存在噪声的问题。
分析Welsh算法的不足之处,采取在彩色图像中间隔取点的办法,减少循环次数。
同时针对彩色化后的图像中存在噪声的问题,使用指导性滤波对迁移后的图像进行优化,去掉噪声的干扰。
通过实验表明,经过指导性滤波处理的图
像可以产生出更好的效果,使图像的效果更清晰和自然。
关键词Welsh算法彩色化间隔取点指导性滤波
0引言
灰度图像的彩色化是将一幅彩色图像的颜色特征传递给一幅灰度图像,从而使灰度目标图像具有与源彩色图像相似的颜色。
Ruderman等[1]在1998年提出了ιαβ颜色空间。
其中ι表示非彩色的亮度通道,α表示彩色的黄蓝(yellow-blueoppo-nent)通道,β表示红绿(red-greenopponent)通道。
与其他颜色体系不同,ιαβ空间更适合人类视觉感知系统。
对自然场景,通道间的相关性会降到最小,解决了传统RGB颜色空间中R(红)、G(绿)、B(蓝)三个颜色通道相关性太强[2,3],在不同通道进行运算时容易出现通道交叉的问题。
ιαβ颜色空间更适合对颜色信息进行迁移。
在2001年,Reinhard[4]在ιαβ颜色空间的基础上,提出了彩色和彩色图像之间的迁移算法,取得了较好的效果,但是该算法不适合灰度图像之间的迁移。
Reinhard的算法在灰度图像彩色化的过程中会使结果图颜色失真,造成不真实的感觉。
在2002年的时候,Welsh[5]等人提出了将灰度图像彩色化的算法,取得了较好的效果。
1Welsh算法
目前在灰度图像彩色化的过程中主要采用的是Welsh算法,Welsh算法的具体过程如下:
(a)将彩色参考图像和目标灰度图像都变换到抗相关性的ιαβ空间;
(b)对彩色参考图像进行亮度的重映射。
因为为了将彩色参考图像的色彩传输给目标图像,目标图像的每个像素必须在彩色参考图像中找一个像素来匹配,考虑到彩色参考图像和目标图像亮度的整体差异,必须对彩色参考图像进行亮度的重映射,使它的直方图与目标灰度图像的亮度直方图相匹配;
(c)计算彩色参考图像的每一个点的亮度值和5×5领域内的方差值;
(d)对于灰度图像的每个像素,计算该像素PTi的亮度值▽L和5×5领域内的方差值▽D,并与彩色参考图像的特征点相比较,找到与PT的0.5×▽L+0.5×▽D最相近的一点(假设为PSj),则PSj就是与灰度图像的当前点PTi匹配的点;
(e)将彩色参考图像PSj的αβ值传输给目标灰度图像的PTi点,同时保留PTi点ι通道的亮度值;
(f)逐点扫描目标灰度图像,对每个像素都采用(d)、(e)步骤,找到与其匹配的彩色图像中的点,并传输颜色。
2对Welsh算法的改进
由于Welsh算法的主要问题就是在彩色图像中搜索与灰度图像最匹配的αβ空间的像素值。
例如彩色图像的大小是100×100,灰度图像的大小是100×100,那么找到与这张灰度图像最匹配的αβ空间的值需要循环108。
目前的改进主要是提高Welsh算法的搜索速度,主要是以下两个方面。
第一:
在文献[8]中,将图像像素邻域相关特性引入到匹配像素的搜索过程中。
搜索匹配像素时,先在当前像素的邻域范围内进行搜索,只在邻域搜索失效时才进行全图范围的搜索,由于像素邻域相关特性,大部分像素可以在邻域搜索
中找到匹配像素,只有极少像素需要进行全图搜索,从而较大地降低了搜索代价。
但是由于图像是连续的,对于一张图像的边缘处,这样的方法并不合适。
第二:
在文献[9]中,在彩色图像中随机抽取200个像素点,对于灰度图像中的每一个像素点都在这200个随机抽取的像素点中寻找最匹配的像素值。
这样虽然可以大幅度提高搜索的速度,但是由于是随机取点,造成了彩色图像的像素值不一定与灰度图像最适合,造成了颜色迁移的失真。
同时对于一副很大的图片,只抽取200个点并不能保证涵盖所有的彩色像素的值。
本文是在彩色图像的每行每列中,每隔十个像素点抽取一个,这样能最大限度的保证抽取出来的彩色图像的点能够包含整个图像,最大限度地减少了迁移过程中的颜色的失真,特别是对边界处有很好的效果,同时减少了匹配过程中的循环次数。
例如上面提到的彩色图像的大小是100×100,灰度图像的大小是100×100,通过相隔10个像素点取值的搜索策略,完成整个循环匹配只需要106,使得运行速度比Welsh的循环次数减少了100倍。
程序代码:
gray2rgb.m文件
%%RGB转换为Lab空间并进行彩色迁移
clc;clear;
A=imread('207.jpg');%取样图
[mnl]=size(A);
[L,a,b]=RGB2Lab(A);%空间转换
AA(:
:
1)=L;
AA(:
:
2)=a;
AA(:
:
3)=b;
ls=0;
k=0;%计数器
kk=0;%控制每隔10取值
fori=3:
m-2;
forj=3:
n-2;
if(mod(kk,10)==0)
k=k+1;
ls(1,k)=L(i,j);%亮度
sizeA=numel(AA(i-2:
i+2,j-2:
j+2,:
));
ls(2,k)=std(reshape(AA(i-2:
i+2,j-2:
j+2,:
),1,sizeA));%方差
ls(3,k)=i;
ls(4,k)=j;
end
kk=kk+1;
end
end
display('彩色图取样完毕');
size(ls)
B=imread('207_副本.jpg');
figure;imshow(B);title('原图');
[mnl]=size(B);
[L,a,b]=RGB2Lab(B);
BB(:
:
1)=L;
BB(:
:
2)=a;
BB(:
:
3)=b;
k=1;
display('开始计算灰色图像');
fori=1:
m;
forj=1:
n;
ls2(1,k)=L(i,j);
ibegin=i-2;
iend=i+2;
jbegin=j-2;
jend=j+2;
if(i<=2)
ibegin=1;
else
ibegin=i-2;
end
if(i>=m-2)
iend=m;
else
iend=m-2;
end
if(j<=2)
jbegin=1;
else
jbegin=j-2;
end
if(j>=n-2)
jend=n;
else
jend=n-2;
end
sizeB=numel(BB(ibegin:
iend,jbegin:
jend,:
));
ls2(2,k)=std(reshape(BB(ibegin:
iend,jbegin:
jend,:
),1,sizeB));%计算方差
ls2(3,k)=i;
ls2(4,k)=j;
k=k+1;
end
end
display('开始对比');
sumLs=(ls(1,:
)*0.5)+ls(2,:
)*1;%计算公式亮度+方差
sumLs2=(ls2(1,:
)*0.5)+ls2(2,:
)*1;%灰色图的所有像素点
fori=1:
length(sumLs2)
tmp=abs(sumLs-sumLs2(i));%求绝对值
index=find(tmp==min(tmp));%取最接近的索引
%BB(ls2(3,i),ls2(4,i),1)=AA(ls(3,index),ls(4,index),1);%亮度不变
BB(ls2(3,i),ls2(4,i),2)=AA(ls(3,index),ls(4,index),2);%a赋值
BB(ls2(3,i),ls2(4,i),3)=AA(ls(3,index),ls(4,index),3);%b赋值
end
[r,g,b]=Lab2RGB(BB);
figure;
clearB;
B(:
:
1)=r;
B(:
:
2)=g;
B(:
:
3)=b;
imshow(B);title('上色图');
imwrite(B,'aa.jpg');
figure;
imshow(A);title('彩色图');
3指导性滤波
使用Welsh算法进行灰度图像彩色化之后,图像上存在着
噪声。
文献[6]中使用了双边滤波(Bilateralfilter)对图像进行
了优化。
双边滤波是一种非线性的滤波方法,是结合图像的空
间邻近度和像素值相似度的一种折衷处理,达到保边去噪的目
的,具有简单、非迭代的特点。
但是双边滤波器对于高频细节的
处理效果并不明显,对于彩色图像里的高频噪声,双边滤波器不
能够干净的滤掉,只对于低频信息有较好的滤波效果。
本文采
用的是指导性滤波(Guidingfilter)[7]对经过Welsh算法处理后
的迁移结果图像进行处理。
同时为了提高指导性滤波的处理速
度,使用盒子滤波。
与双边滤波相比,指导性滤波可以更好地保
留图像中的梯度,对图像的边缘有着更好的效果。
而且指导性
滤波的时间复杂度是O(N),由窗口半径r决定。
指导性滤波的
定义由式
(1)、式
(2)和式(4)表示。
公式
(1)
其中,Ii是输入图像I的像素值,μk和σ2
k分别为输入图像像素的
平均值和方差,ε为正规划参数,本文取值为0.01,|w|为图像
在wk区域内像素的数量。
公式
(2)
其中,pk为图像p在wk区域内的像素平均值。
公式(3)
其中,qi是经过指导性滤波处理后的最终结果图,在盒子滤波
中内核半径r取值为2。
经过了指导性滤波的处理,使处理后的
图像更加平滑,除去了噪声的干扰。
程序代码:
guidedfilter.m
%%guide滤波函数
functionq=guidedfilter(I,p,r,eps)%包滤波器,主要功能是在给定的滑动窗口大小下,对每个窗口内的像素值进行相加求和
[hei,wid]=size(I);%读取输入图像的尺寸其中hei为高wid为宽
N=boxfilter(ones(hei,wid),r);%thesizeofeachlocalpatch;N=(2r+1)^2exceptforboundarypixels.ones产生一个hei*wid的值全为1的矩阵
mean_I=boxfilter(I,r)./N;
mean_p=boxfilter(p,r)./N;
mean_Ip=boxfilter(I.*p,r)./N;
cov_Ip=mean_Ip-mean_I.*mean_p;%thisisthecovarianceof(I,p)ineachlocalpatch.公式5中的分子
mean_II=boxfilter(I.*I,r)./N;
var_I=mean_II-mean_I.*mean_I;%公式5中的分母第一项
a=cov_Ip./(var_I+eps);%Eqn.(5)inthepaper;
b=mean_p-a.*mean_I;%Eqn.(6)inthepaper;
mean_a=boxfilter(a,r)./N;
mean_b=boxfilter(b,r)./N;
q=mean_a.*I+mean_b;%Eqn.(8)inthepaper;
end
boxfilter.m文件
%%盒子滤波函数
functionimDst=boxfilter(imSrc,r)
[hei,wid]=size(imSrc);%读取尺寸
imDst=zeros(size(imSrc));%预留空间
imCum=cumsum(imSrc,1);%计算这个数组各行的累加值把第一行加到第二行然后把第二行加到第三行依次累加后面的1表示按行累加2表示按列累加
imDst(1:
r+1,:
)=imCum(1+r:
2*r+1,:
);%把imCum的第1+r到2*r+1行赋值给imDst的1:
r+1行对于全为1的源输入图像而言这里的值就是1+r~2*r+1
imDst(r+2:
hei-r,:
)=imCum(2*r+2:
hei,:
)-imCum(1:
hei-2*r-1,:
);%对于全为1的输入图像而言,这里的值就是全为2*r+1
imDst(hei-r+1:
hei,:
)=repmat(imCum(hei,:
),[r,1])-imCum(hei-2*r:
hei-r-1,:
);%将矩阵imCum(hei,:
)变成[r,1]维
%repmat函数将imCum的第hei行这组数据变成r行
%1列的数组,其中数组的每个元素都由hei行组成。
比如说这里的结果就是把一行imCum(hei,:
)变成r行个imCum(hei,:
)。
%这里利用最后一行的值减去前面的值赋给imDst
imCum=cumsum(imDst,2);%这里在将imDst的矩阵按列累加
%继续按列赋值
imDst(:
1:
r+1)=imCum(:
1+r:
2*r+1);
imDst(:
r+2:
wid-r)=imCum(:
2*r+2:
wid)-imCum(:
1:
wid-2*r-1);
imDst(:
wid-r+1:
wid)=repmat(imCum(:
wid),[1,r])-imCum(:
wid-2*r:
wid-r-1);%
end
5实验结果与分析
本文是在操作系统为Windows8,CPU为Intel酷睿i7,系统
内存为8GB的普通计算机上实现的。
使用的软件是Matlab2012a。
选取的图像来源于互联网的图片。
图1是258×168的BMP图像,图2是
258×168的BMP图像,图3是使用Welsh改进后的算法结果
图,图4是使用指导性滤波处理后的结果图。
图5是318×316
的jpg图像,图6是620×376的jpg图像,图7是使用Welsh改
进后的算法结果图,图8是使用指导性滤波处理后的结果图。
各图由于印刷的原因只能黑白显示。
原始图像
图1灰色图像图2上色后的图像72.3
图3Welsh滤波图像52.65图4welsh滤波增强图像76.8
图5采用RGB空间的色彩迁移图6原始图像
图6灰色图像图7上色后的图像114
图8Welsh滤波图像79图9welsh滤波增强图像121
图10原始图像做对比用
5.1主观评价标准
在文献[10]中,灰度图像彩色化的效果主要由颜色对比
度、舒服感觉和自然感三个方面进行评价。
对比图3和图4,可
以发现图3中天空和白云的部分存在着噪声,图4中经过指导
性滤波的处理之后,这两部分变得更加的柔和和自然,去掉了图
3中的噪声干扰。
图7和图8主要是在背景方面上的差别,图7
在背景中存在着细节粗糙的缺点,图8经过指导性滤波的处理,
背景效果更加的柔和。
5.2客观评价标准
图像的客观评价方法是用数学的方法来衡量一幅图像的质
量,而清晰度是最重要的一种评价方式[10]。
清晰度反映了图像
质量的改进,同时还反映出图像中微小细节反差和纹理变换特
征。
图像清晰度的值越大,说明图像的效果越好。
在彩色图像
中,清晰度的计算公式为:
ΔP
x(i,j)=
Δr
2
x(i,j)+Δg
2
x(i,j)+Δb
2
x(i,j
槡
)(5)
ΔP
y(i,j)=
Δr
2
y(i,j)+Δg
2
y(i,j)+Δb
2
y(i,j
槡
)(6)
其中,Δrx(i,j),Δgx(i,j),Δbx(i,j);Δry(i,j),Δgy(i,j),Δby(i,j)
分别为R,G,B三个页面沿x和y方向的差分。
程序代码:
Difference.m文件
%%计算图像清晰度
functiond=Difference(X)
R=X(:
:
1);
G=X(:
:
2);
B=X(:
:
3);
dx=sqrt(sum(sum(diff(R).^2+diff(G).^2+diff(B).^2)));
dy=sqrt(sum(sum(diff(R').^2+diff(G').^2+diff(B').^2)));
d=dx+dy;
end
表1为改进的Welsh算法和使用指导性滤波之后的清晰度
对比表。
差分结果越大,表明影像越清晰,反差越好。
经过指导
性滤波的处理之后,图4与图3,图8与图7相比,清晰度有了提
高,证明了指导性滤波在去掉图像噪声,使图像清晰化的过程中
有较好的效果。
表1滤过和增强后的清晰度对比
图像序号
清晰度
图3
56.25
图4
76.8
6算法改进
1.采用Lab空间代替RGB空间的原因
例如图5,xxxx
2.标准差代替方差
在本文的welsh算法中,计算提取彩色图像的像素点时,采用每隔10像素提取一点的方法加快运算速度,但是这种策略对色彩均匀分布的图像效果比较好,但是如果色彩分布不均匀,就会造成整个图片色彩迁移后失真。
经过对5X5邻域内的亮度和方差进行对比,发现亮度和方差差了一个数量级,而求最接近的公式系数为1:
1,所以就造成了方差的影响远远大于亮度,上色后的图像亮度会出现忽明忽暗的现象,即不连续的亮度,所以考虑采用5x5邻域内的标准差代替方差,经过计算,亮度和标准差位于同一量级,且设置比例为1:
2后,可以同时均衡两者,对上色后的图像的亮度连续性有很大的提升。
3.针对guide滤波的增强
Guide滤波是对图像的边界模糊优化,目的是为了消除掉噪声使得图像看起来更加自然,但是实际的使用效果并不理想,可以根据图34看出,使用了guide滤波的彩色图像看起来比较模糊,与之对应的清晰度有所下降。
所以,我们进行了滤波对比度增强,具体公式为(I-q)*1.2+q,原理是利用原始彩色图像和经过滤波后的图像的差值进行放大,并加入到原图像上,达到增强对比度的效果,具体见图5,可以看出它的效果比较显著,清晰度较单独的滤波有所提高。