彩色图像与灰度图像融合后处理 (一):饱和度调整
程序员文章站
2022-03-22 20:49:28
...
简单的通道替换之后,图像的细节明显得到增强,但是图像的色彩却有些失真。这里通过调节图像的饱和度,使融合后的图像色彩尽量与原RGB图接近。
图像的饱和度调整有很多方法,最简单的就是判断每个象素的R、G、B值是否大于或小于128,大于加上调整值,小于则减去调整值;也可将象素RGB转换为HSV或者HSL,然后调整其S部分,从而达到线性调整图象饱和度的目的。这几种方法效果均不太好,简单的就不说了,利用HSV和HSL调整饱和度,其调节范围很窄,饱和度没达到,难看的色斑却出现了。而Photoshop的饱和度调整调节范围大多了,效果也好多了。
RGB图像:
MONO图像:
一、算法
这里从网上查找了一种,根据RGB图R、G、B三通道的值之间对色彩进行补偿的算法,比较接近photoshop的效果。
%%%% Increment, 饱和度调整增量(-100,100)
Increment=-20/100;
rgbMax=max(R(i,j),max(G(i,j),B(i,j)));
rgbMin=min(R(i,j),min(G(i,j),B(i,j)));
Delta=(rgbMax-rgbMin)/255;
value=(rgbMax + rgbMin)/255;
L=value/2;
if(L<0.5)
S=Delta/value;
else
S =Delta/(2 - value);
end
if (Increment>=0) //如果饱和度增量大于0,
if((Increment+S)>=1)
alpha=S;
else
alpha=1-Increment;
end
alpha=1/alpha-1;
R_new(i,j) = R(i,j) +(R(i,j) - L * 255) * alpha;
G_new(i,j) = G(i,j) + (G(i,j) - L * 255) *alpha;
B_new(i,j) = B(i,j) + (B(i,j) - L * 255) *alpha;
else // 饱和度增量小于0
alpha=Increment;
R_new(i,j) = L*255 + (R(i,j) - L * 255) *(1+alpha);
G_new(i,j) = L*255 +(G(i,j) - L * 255) * (1+alpha);
B_new(i,j) = L*255 +(B(i,j) - L * 255) * (1+alpha);
end
二、仿真结果
上图中,左边是将RGB图的Y通道替换成Mono的Y通道之后的图,右边是对左图进行饱和度调整之后的图像。程序中饱和度的调整范围与photoshop一致,是-100~+100,上图的效果是饱和度设置为+45的效果。
上一篇: Angular组件怎么进行通信?父子组件通信的2种方法
下一篇: php怎么在浏览器运行