对数压缩和对数变换

对数压缩和对数变换

  • 一、对数压缩
    • 1、对数压缩公式
    • 2、对数压缩系数的计算
    • 3、不同的底数压缩效果
  • 二、对数变换
    • 1、对数变换公式
    • 2、对数变换系数的计算
    • 3、不同底数压缩效果
  • 附录:相关代码(Matlab)

在数字图像处理技术中, 对数压缩和对象变换的原理均为对数公式
对数压缩主要用于图像的动态范围压缩,使用对数变换技术。对数变换主要用于图像的增强。二者原理一致,在公式上有一定的差异。
人眼对亮度的响应具有对数性质,在平均亮度大的区域,人眼对灰度不敏感,在平均亮度低的区域,人眼对灰度误差更敏感。
对数变换使得图像的低灰度区域扩展,高灰度区域压缩。

一、对数压缩

对数压缩的目的,是使用对数变换技术,将获得的图像信号显示在显示设备上。
以图像为例,传感器所获得的信号,其亮度动态范围非常大,数量级可达十几或更高,但是显示设备能够表达的亮度范围很小,最常见的就是0-255。
如果想要在显示设备中正确显示我们所采集的图像信号,直接显示原始数据是不行的,结果极有可能是全黑或者全白。需要使用动态范围压缩技术将信号的动态范围压缩到显示器的显示范围。
对数压缩是动态范围压缩算法的一种全局映射算法。

1、对数压缩公式

y=a*log(x+1)+b
log底数自选,a、b表示对数压缩系数,x表述输入数据,y表示输出数据。

2、对数压缩系数的计算

系数的计算,需要确定压缩前的范围[Xmin,Xmax]以及压缩后的范围[Ymin,Ymax]。对于1中的公式,系数计算如下:
对数压缩和对数变换_第1张图片

3、不同的底数压缩效果

对数压缩和对数变换_第2张图片
这里将0-1000的范围压缩到0-255,底数有2、e、10,从图形中可以看出,对数压缩,其底数对结果影响很小,不同的底数,在很大的压缩范围下,效果一致。
图形显示,对数压缩,将0-1000一个大范围的亮度压缩到了显示器能够显示的0-255,同时,低亮度值区域,在0-255上被拉伸,高亮度值区域,在0-255上被压缩。

二、对数变换

对数变换,一般指图像增强技术。对数变换的目的在于增强图像低灰度区域的对比度,丰富暗区域的细节,同时,高灰度区域的对比度会被压制,细节减少。

1、对数变换公式

y=c * log(v+1)(1+v * x)
其中,c表示对数变换系数,v+1表示对数的底数,x表示输入信号,y表示输出信号。

2、对数变换系数的计算

对数变换用于图像增强,其变换前后,通常数据的动态范围保持不变。
假设变换前的动态范围为[Xmin,Xmax],变换后同样为[Ymin,Ymax],一般范围为[0,1]或[0,255],变换后仍为[0,1]或[0,255]。
对数压缩和对数变换_第3张图片

3、不同底数压缩效果

对数压缩和对数变换_第4张图片
在图形中,将0-255变换到0-255,对数变换使得原始图像在低灰度区域被拉伸,高灰度区域被压缩。
图形中可以看出,底数越大,低灰度区域拉伸的越明显。

附录:相关代码(Matlab)

% 生成一些x轴上的坐标点
x = linspace(0, 255, 255);

% 计算每个x轴上的坐标点对应的y轴上的值
%对数变换
%将0-255变换到0-255
% 公式:y=c*log(v+1)(1+v*x)
ymax=255;
y1 = (ymax/(log2(1+255)))*log2(x+1);
y2 = (ymax/(log(255*(exp(1)-1)+1)))*log(x*(exp(1)-1)+1);
y3 = (ymax/(log10(255*9+1)))*log10(9*x+1);
y4=x;

% 绘制对数变换曲线
figure(1);
plot(x, y1, 'r-', x, y2, 'g--', x, y3, 'b:',x,y4,"k");
title('对数变换');
xlabel('x');
ylabel('y');
legend('log2(x)', 'log(x)', 'log10(x)','y=x');


%对数压缩
%将0-1000映射到0-ymax
% 公式:y=a*log(v)(x+1)+b v表示对数的底数
ymax=255;
x1 = linspace(0, 1000, 1000);
y11 = (ymax/log2(1001))*log2(x1+1);
% figure(3);
% plot(x1, y11);
y12 = (ymax/log(1001))*log(x1+1);
y13 = (ymax/log10(1001))*log10(x1+1);
y14 = (ymax/1000)*x1;
%绘制对数压缩曲线
figure(2);
plot(x1, y11, 'r-', x1, y12, 'g--', x1, y13, 'b:',x1,y14,"k");
title('对数压缩');
xlabel('x');
ylabel('y');
legend('log2(x)', 'log(x)', 'log10(x)','y=x');






你可能感兴趣的:(图像算法,计算机视觉,图像处理,人工智能,对数压缩,动态范围压缩,对数变换,图像增强)