Matlab中编写将彩色图像颜色传递给灰度图像的函数
标签:
matlab编程技巧it教育 |
分类: Matlab编程 |
颜色迁移是将一幅彩色图像的颜色方案传递到另外一幅灰度图像或彩色图像,使后者的图像内容还保持原来的,但颜色却和前者相似的自然感的彩色信息处理技术,在近年来得到了许多领域研究者的青睐。由于许多图像如旧照片、红外热图像、动画图像、一些科学检测图像、计算机生成图像等可能是灰度、单色调图像,为了通过增加颜色提高图像的可用性,符合人的视觉习惯,减少观察者的疲劳度,往往需要颜色迁移技术,下面是利用Matlab编写的一个函数,其可以将一个彩色图像的颜色传递给灰度图像,且具有较强的自然感。
这里的颜色迁移实际上是在lαβ颜色空间进行的,因而需要将彩色图像从RGB颜色空间转换到lαβ颜色空间,颜色迁移完后在进行逆变换。关于颜色空间转换可以参照以前的介绍的“Matlab中图像数据在RGB与lαβ颜色空间之间的转换”。
%%%----颜色迁移color transfer
function swgc=swatchcolortransfer(swg,swc,hwin,sizejit)
%swg——灰度图像矩阵
%swc——彩色图像矩阵(三页面24位真彩色图像)
%hwin——滤波窗口的大小
%sizejit——随机采样点数,一般根据彩色图像的大小取50、100、200等等
swg=double(swg);
swc=double(swc);
sizewin=2*hwin+1;
%彩色图像的颜色空间转换(from RGB space to lab)
labsw=rgblab(swc,0);
%求均值、方差
ms=zeros(3,2);
ms(1,1)=mean2(labsw(:,:,1));ms(1,2)=std2(labsw(:,:,1));
ms(2,1)=mean2(labsw(:,:,2));ms(2,2)=std2(labsw(:,:,2));
ms(3,1)=mean2(labsw(:,:,3));ms(3,2)=std2(labsw(:,:,3));
%数据校正
uc=mean2(labsw(:,:,1));
dc=std2(labsw(:,:,1));
ug=mean2(swg(:,:,1));
dg=std2(swg(:,:,1));
if dg~=0
end
%求颜色转移时的匹配矢量
ucv0=colfilt(labsw(:,:,1),[sizewin,sizewin],'sliding',@mean);
dcv0=colfilt(labsw(:,:,1),[sizewin,sizewin],'sliding',@std);
ugv0=colfilt(swg(:,:,1),[sizewin,sizewin],'sliding',@mean);
dgv0=colfilt(swg(:,:,1),[sizewin,sizewin],'sliding',@std);
[mc nc]=size(labsw(:,:,1));
[mg ng]=size(swg(:,:,1));
ucv=ucv0(1+hwin:mc-hwin,1+hwin:nc-hwin);
dcv=dcv0(1+hwin:mc-hwin,1+hwin:nc-hwin);
ugv=ugv0(1+hwin:mg-hwin,1+hwin:ng-hwin);
dgv=dgv0(1+hwin:mg-hwin,1+hwin:ng-hwin);
sw_u=ugv;
sw_d=dgv;
labsw=labsw(1+hwin:mc-hwin,1+hwin:nc-hwin,:);
swg=swg(1+hwin:mg-hwin,1+hwin:ng-hwin,:);
mc=mc-2*hwin;nc=nc-2*hwin;
mg=mg-2*hwin;ng=ng-2*hwin;
% 随机采集颜色像素集
seljitt=zeros(sizejit,5);
for i=1:sizejit
end
% 匹配与颜色转递
for ii=1:mg
end
% 颜色空间逆变换(from lab space to RGB)
swgc=rgblab(swg(1:mg,1:ng,:),1);
return swgc;
颜色迁移是比较费时间的,可以在上述程序上进一步修改优化出速度更快的程序。为了达到说明效果的目的,使用上述程序时采用的图像不要很大,如64×64,128×128,这样程序运行时间就不会太长。

加载中…