灰度变换——对数变换
程序员文章站
2022-05-30 09:21:50
...
分类:对数变换属于灰度变换中的非线性变换。
作用:
1.对数变换实现了图像灰度扩展和压缩的功能。可以从对数曲线看出,它扩展低灰度值而压缩高灰度值。
2.用于显示傅里叶变换的频谱图。在进行傅立叶变换时,得到的频谱的动态范围较大,频谱值的范围通常为[0,10^6],甚至更高。这样范围的值,显示器是无法完整的显示如此大范围的灰度值的,因而许多灰度细节会被丢失掉。而将得到的频谱值进行对数变换,可以将其动态范围变换到一个合适区间,这样就能够显示更多的细节。
matlab实现:
可以直接通过定义图像矩阵得到,也可以逐像素点经对数函数得到新的响应。
代码:
clear
%对数变换
I=imread('1.jpg');
I=rgb2gray(I);
I=im2double(I);
[m,n]=size(I);
T=1.1*log(I+1.1);
K=zeros(m,n);
for i=1:m
for j=1:n
K(i,j)=log(I(i,j)+1);
end
end
subplot(331)
imshow(I);
subplot(332)
imshow(T,[]);
subplot(333)
imshow(K,[]);
%频域
F1=abs(fftshift(fft2(I)));
% F2=abs(fftshift(fft2(T)));
F2=log(F1+1);
F3=abs(fftshift(fft2(K)));
subplot(334)
imshow(F1,[]);
subplot(335)
imshow(F2,[]);
subplot(336)
imshow(F3,[]);
%直方图
[counts,x]=imhist(I,32);
counts=counts/m/n;
subplot(337)
stem(x,counts);
[counts,x]=imhist(T,32);
counts=counts/m/n;
subplot(338)
stem(x,counts);
[counts,x]=imhist(K,32);
counts=counts/m/n;
subplot(339)
stem(x,counts);
可以看到,
1.经过对数变换,第二列相对第一列原图,灰度更为集中在中间灰度范围:原因是低灰度更亮,高灰度变暗。这也可以从直方图看到。
2.第二列傅里叶变换的频谱图是对原图傅里叶频谱图的对数变换,可以看到,经过对数变换,能够显示更多的图像信息。