%灰度的对数变换,可以增强一幅图像中较暗部分的细节,用于扩展被压缩的高值图像中的较暗像素。
%对数变换公式:t=clog(1+s) , c为常数
%c为尺度比例常数,s为源灰度值,t为变换后的目标灰度值。
%log函数会对输入图像矩阵s中的每个元素进行操作,但仅能处理double类型的矩阵。
%而从图像文件中得到的图像矩阵大多是uint8类型的,故需先进行double数据类型转换。
f = imread('BoatsColor.bmp')
G=mat2gray(log(1+double(f)))
% matlab中数值一般采用double型(64位)存储和运算,数据类型转换。
%mat2gray对图像灰度进行归一化处理,所谓”归一化”就是使矩阵的每个元素的值都在0和1之间,其中0表示黑色,1表示白色。
figure
subplot(121),imshow(f,[])
xlabel('原始图像')
subplot(122),imshow(G,[]) % 自动调整数据的范围以便于显示
xlabel('对数变换后图像')
运行效果图如下:
%%灰度的Gamma变换,调整灰度图像亮度——imadjust函数
%对图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵
%J=imadjust(I)%对图像I进行灰度调整
%J=imadjust( I,[low_in;high_in],[low_out;high_out],gamma)
%[low_in;high_in]为原图像中要变换的灰度范围,[low_out;high_out]为变换后的灰度范围
%gamma参数为映射的方式,默认值为1,即线性映射。当gamma不等于1时为非线性映射
%Gamma变换,根据r的不同取值,选择性的增强低灰度区域的对比度,或者高灰度区域的对比度
%Gamma<1,更亮;Gamma<1,更暗;Gamma=1,线性;
I=imread('boats.bmp')
A=imadjust(I)%默认灰度调节
J=imadjust(I,[0 1],[1 0],1)%灰度反转,亮部变暗,暗部变亮
subplot(131),imshow(I),xlabel('原始图像')
subplot(132),imshow(A),xlabel('默认调节图像')
subplot(133),imshow(J),xlabel('灰度反转图像')
运行效果如下:
%imadjust()对彩色图像进行增强
I=imread('BoatsColor.bmp');
J=imadjust(I,[0.2 0.3 0;0.6 0.7 1],[]); %imadjust()对RGB图像进行处理
figure
subplot(121),imshow(uint8(I)),xlabel('原始图像')
subplot(122),imshow(uint8(J)),xlabel('亮度增强后图像')
运行效果如下:
%使用函数stretchlim()和函数imadjust()进行图像增强
%stretchlim()函数可自动计算灰度图像的最佳输入区间,使灰度图像更加清晰
I=imread('boats.bmp')
A=stretchlim(I)%获取灰度图像的最佳输入区间
J=imadjust(I,A,[]) %调整灰度范围
figure
subplot(121),imshow(I),xlabel('原始图像')
subplot(122);imshow(J),xlabel('灰度调整后图像')
运行效果如下:
%函数imcomplement()进可灰度图像的反转变换。
%即将灰度值为0的像素值转换为255,将灰度值为255的像素值转换为0,将灰度值为x的像素值转换为255-x。
%通过灰度反转,可增强暗色背景下,白色或灰色细节信息。
I=imread('BoatsColor.bmp')
J=imcomplement(I) %实现灰度反转
figure
subplot(121),imshow(I),xlabel('原始图像')
subplot(122),imshow(J),xlabel('灰度反转后图像')
运行效果如下: