这个水彩画效果是在写另外一篇算法的过程中无意实现的,当然肯定有些问题,不能适用于所有的图片,但是很多效果还不错,在此记录下,以后弄到这方面再补充。
WaterColor.m
%for k=1:50%对某文件夹中所有文件
% imageName=strcat('image_jpg\',num2str(k),'.jpg');
% imageNameWater=strcat('temp\',num2str(k),'-watercolor.jpg');
A=imread(imageName);%读入原图,命名为A
[h,w,~]=size(A);
%B1=rgb2gray(A);
B=rgb2hsv(A);
I=B;
J=B;
for i=2:w-1 %中间区域改变亮度值
for j=2:h-1
max=B(j-1,i-1,3);
for m=i-1:i+1
for n=j-1:j+1
if(B(n,m,3)>max)
max=B(n,m,3);
end
end
end
I(j,i,:)=max;
end
end
for j=1:w %四条边改变亮度值
I(1,j,:)=I(2,j,:);
I(h,j,:)=I(h-1,j,:);
end
for i=1:h
I(i,1,:)=I(i,2,:);
I(i,w,:)=I(i,w-1,:);
end
%figure,imshow(A),xlabel('原始图像');
%figure,imshow(B1),xlabel('原始图像的灰度图Iv');
%figure,imshow(I),xlabel('亮通道I');
wb=B;
for i=1:w %计算wb和新图像J的亮通道
for j=1:h
J(j,i,:)=(power(I(j,i,3),0.3)*55+200)/255;
if(B(j,i,3)<=0.3||B(j,i,2)<=0.3)
wb(j,i,:)=exp(B(j,i,3)-0.3+B(j,i,2)-0.3);
else
wb(j,i,:)=1;
end
end
end
%figure,imshow(wb),xlabel('黑暗权重wb');
%figure,imshow(J),xlabel('J的亮通道');
a=B;
for i=1:w %计算相对曝光a
for j=1:h
a(j,i,:)=wb(j,i,3)*(J(j,i,3)/I(j,i,3));
end
end
%figure,imshow(a),xlabel('相对曝光a');
J1=B;
for i=1:w
for j=1:h
J1(j,i,3)=a(j,i,3)*double(B1(j,i,1))/255;
end
end
WaterColor=hsv2rgb(J1);
%imwrite(WaterColor,imageNameWater);%保存图像
imshow(WaterColor),xlabel('水彩画');