请问各位厉害的朋友们,在用matlab进行图像彩色化的时候,怎么分不同区域上不同颜色呢?
我用的是最简单的reinhard算法,但是我做出来整张图片只有一种颜色。
我用的:
试了一下,可能是你源图的问题,在其他图上面有效果,但用你的源图,确实只有一种颜色,建议更换源图试一下
代码可以提供给你参考一下
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:颜色迁移
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-05-04
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear all
clc
tic
%% 参考图像
ref=imread('src1.bmp');
figure(1);subplot(131);imshow(ref);title('参考图');
cform= makecform('srgb2lab');
reflab = applycform(ref,cform);
[m,n,k]=size(reflab);
l = reflab(:,:,1);
a = reflab(:,:,2);
b = reflab(:,:,3);
%求三个通道的均值
l=double(l);
a=double(a);
b=double(b);
lm1=mean(mean(l));
am1=mean(mean(a));
bm1=mean(mean(b));
%求标准方差
sigm1=std2(l);
sigm2=std2(a);
sigm3=std2(b);
%% 源图像
sou=imread('dst1.bmp');
figure(1);subplot(132);imshow(sou);title('目标图');
cform= makecform('srgb2lab');
soulab = applycform(sou,cform);
l2 = soulab(:,:,1);
a2 = soulab(:,:,2);
b2 = soulab(:,:,3);
%求三个通道的均值
l2=double(l2);
a2=double(a2);
b2=double(b2);
lm2=mean(mean(l2));
am2=mean(mean(a2));
bm2=mean(mean(b2));
%求标准方差
sigm11=std2(l2);
sigm22=std2(a2);
sigm33=std2(b2);
%% 颜色迁移目标图像
l3=zeros(m,n);
a3=zeros(m,n);
b3=zeros(m,n);
for i=1:m
for j=1:n
l3(i,j)=(l2(i,j)-lm2)*sigm1/sigm11+lm1;
a3(i,j)=(a2(i,j)-am2)*sigm2/sigm22+am1;
b3(i,j)=(b2(i,j)-bm2)*sigm3/sigm33+bm1;
end
end
Lab_scale=uint8(cat(3,l3,a3,b3));
cform=makecform('lab2srgb');
rgb_scale=applycform(Lab_scale,cform);
figure(1);subplot(133);imshow(rgb_scale);title('迁移后的图');
imwrite(rgb_scale,'迁移后.bmp');
toc
Matlab实现伪彩色处理:灰度图像转换为彩色图像
https://blog.csdn.net/qq_42276781/article/details/121500544