实验截图:
灰度值反转:
对数变换(进行对数变换不同量级的结果):
伽马变换(伽马变换量级为0.4和1.4时):
实验代码:
灰度值反转(1):
img1 = imread('shadow.PNG');%读取图片
img2=rgb2gray(img1);%转成灰度图
img = imadjust(img2, [0,1], [1, 0]);%反转灰度值
subplot(121);
imshow(img2)
title('原图');
subplot(122)
imshow(img)
title('反转后的图');
灰度值反转(2):
img1 = imread('erciyuan.jpg');%读取图片
img2=rgb2gray(img1);%转成灰度图
%img = imadjust(img2, [0,1], [1, 0]);%反转灰度值
img = 255- img2;
subplot(121);
imshow(img2)
title('原图');
subplot(122)
imshow(img)
title('反转后的图');
对数变换:
img1 = imread('shadow.PNG');
img2=img1;
img1 = mat2gray(img2);
v = 10;
g_1 = log2(1 + v*img1)/log2(v+1);
v = 30;
g_2 = log2(1 + v*img1)/log2(v+1);
v = 200;
g_3 = log2(1 + v*img1)/log2(v+1);
subplot(2,2,1);
imshow(img1,[]);
title('原图');
subplot(2,2,2);
imshow(g_1,[]);
title('对数变换量级为10时');
subplot(2,2,3);
imshow(g_2,[]);
title('对数变换量级为100时');
subplot(2,2,4);
imshow(g_3,[]);
title('对数变换量级为200时');
伽马变换:
img = imread('shadow.PNG');
img =mat2gray(img);
C = 1;
Gamma = 0.4;
img1 = C*(img.^Gamma);
Gamma = 1.4;
img2 = C*(img.^Gamma);
figure();
subplot(1,3,1);
imshow(img,[0 1]);
title('原图');
subplot(1,3,2);
imshow(img1,[0 1]);
title('伽马变换伽马量级为0.4时')
subplot(1,3,3);
imshow(img2,[0 1]);
title('伽马变换伽马量级为1.4时')
结果分析:
灰度值反转:
- 我们可以通过matlab自带的函数imadjust()来对图片进行灰度值反转的操作,J = imadjust(I, [low_in; high_in], [low_out; high_out],gamma)将灰度图像I中的灰度值映射成输出图像J中的新值,使得low_in和high_in之间的值映射成low_out和high_out之间的值。low_in,high_in,low_out,high_out的值必须在0到1之间。低于low_in的值和高于high_in的值被去除,也就是说,低于low_in的值映射成low_out,高于high_in的值映射成high_out。
- 所以要想进行灰度值的反转,只需我们将[0,1]映射为[1,0]即可,就可以实现我们想要的效果。
- 除此之外,我们也可以令255减去我们的图像,这样也能达到反转灰度值的效果,因为图像的灰度范围为0-255,令255减去原图像的灰度值,实际上就是进行反转,这是通过图像矩阵减法的方法来反转灰度值,实现起来会更加容易。
对数变换:
- 对数变换实现了图像灰度扩展和压缩的功能。它扩展低灰度值而压缩高灰度值,让图像的灰度分布更加符合人的视觉特征。
- 对数变换的公式如下:
- 其中c为常数,v越大,灰度提高越明显,这一点我们通过实验结果截图也可以看出,r为灰度归一化后的输入图像。
伽马变换:
- 伽马变换的效果和对数变化的效果类似。伽马变换的基本形式为:
- gamma值小于1,可以看到处理结果扩展了低灰度值;gamma值大于1,可以看到处理结果扩展了高灰度值;也就是说如果我们想要对一张偏暗的图片进行效果增强,我们就需要将gamma值调低来展现出更多细节。