一、实验名称
图像的灰度变换与直方图修正
二、实验目的
1.熟悉MATLAB软件的使用。
2.掌握灰度变换、直方图修正的原理及数学运算。
3.于MATLAB环境下编程实现对图片的灰度变换和直方图修正。
三、实验内容
1.对于给定图片,在MATLAB软件下编程实现对图片的不同程度的灰度变换。
2.对于给定图片,在MATLAB软件下编程实现对图片的不同程度的直方图修正。
四、实验仪器与设备
Win10 64位电脑
MATLAB2017a
五、实验原理
灰度变换
线性变换:fa>1时,输出图像的对比度将增大;fa<1时,输出图像对比度将减小。Fa=1且fb非零时,所有像素的灰度值上移或者下移,使得整个图像更暗或者更亮。Fa<0,暗区变亮,亮区变暗。
对数变换:可以增强一副图像中较暗部分的细节,用来拓展被压缩的高值图像中的较暗像素。
指数变换:可以增强一副图像中较亮部分的细节。
取反:亮变暗,暗变亮。
直方图均衡化
步骤
1、 计算出每个灰度级的概率
2、计算出灰度累加概率
3、累加概率乘以length-1再取整
4、更新灰度级
具体解法:
利用循环,算出累积概率,灰度级为0时,累积概率为0.02,灰度级为1时,为0.02+0.05=0.07 。。。。。
再分别乘以7,取整,
得到最后的灰度
直方图SML、GML映射
步骤
1.分别计算出原图直方图、规定直方图的累加概率
2.分别用GML、SML映射
3.获取更新后的数据
具体解题
分别利用循环计算出原图和规定图的累积概率,
SML映射规则下,先看原图累积直方图中的0.1,然后在规定直方图累积找最靠近的那个值,是0.3,所以灰度级由0变成1,依次类推
GML映射规则下,先看规定累积直方图中的0.3,然后在原图累积直方图中找到最靠近的那个,是0.3,对应的灰度是2,所以2,2以前的灰度值都变成1,依次类推
六、实验过程及代码
灰度变换
1)线性变换
t=imread('t1.jpg')
t1=im2double(t)
figure(1)
subplot(2,2,1),imshow(t1),title('原图')
figure(2),subplot(2,2,1),imhist(t1),title('原图')
fa=1.25,fb=0
t2=fa.*t1+fb/255
figure(1)
subplot(2,2,2),imshow(t2),title('fa=1.25 fb=0')
figure(2),subplot(2,2,2),imhist(t2),title('fa=1.25 fb=0')
fa=0.5,fb=0
t2=fa.*t1+fb/255
figure(1)
subplot(2,2,3),imshow(t2),title('fa=0.5 fb=0')
figure(2),subplot(2,2,3),imhist(t2),title('fa=0.5 fb=0')
fa=-1,fb=255
t2=fa.*t1+fb/255
figure(1)
subplot(2,2,4),imshow(t2),title('fa=-1 fb=255')
figure(2),subplot(2,2,4),imhist(t2),title('fa=-1,fb=255')
2)对数变换
t=imread('t1.jpg')
t1=double(rgb2gray(t))
t2=log(1+t1)/0.033
t3=log(1+t1)/0.092
t2=uint8(t2)
t3=uint8(t3)
subplot(2,3,1),imshow(t),title('原图')
subplot(2,3,4),imhist(t),title('原图')
subplot(2,3,2),imshow(t2),title('r=0.033')
subplot(2,3,5),imhist(t2),title('r=0.032')
subplot(2,3,3),imshow(t3),title('r=0.092')