图像处理作业ch3.1

Posted by Yoking on March 28, 2020

图像处理第二章作业

题目

  • 请仿真实现一种灰度变换增强图像
  • 请仿真实现一幅图像的直方图

实验代码、结果及其分析

1.灰度变换增强

代码

clear;
X = imread('image1.jpg');
X = rgb2gray(X);
subplot(3,3,1);
imshow(uint8(X)); % X是uint8格式数值
title('原图')
X0 = im2double(X); % 转为0-1之间的double数值
X1 = 1.8 * log(X0 + 1); % 参数c=1.8
X1(X1 > 1) = 1;
subplot(3,3,2);
imshow(X1);
title('对数变换')
X2 = 1 * X0 + 0.5; % 参数为a=1,b=0.5
subplot(3,3,3)
imshow(X2);
title('线性变换1-提高亮度')
X3 = 1 * X0 - 0.5;% 参数为a=1,b=-0.5
X3(X3 > 1) = 1;
X3(X3 < 0) = 0;
subplot(3,3,4)
imshow(X3);
title('线性变换2-降低亮度')
X4 = 1.5 * X0;% 参数为a=1.5,b=0
X4(X4 > 1) = 1;
X4(X4 < 0) = 0;
subplot(3,3,5)
imshow(X4);
title('线性变换3-提高对比度')
X5 = 0.5 * X0;% 参数为a=0.5,b=0
X5(X5 > 1) = 1;
X5(X5 < 0) = 0;
subplot(3,3,6)
imshow(X5);
title('线性变换4-降低对比度')
X6 = -1 * X0 + 1;% 参数为a=-1,b=1
subplot(3,3,7)
imshow(X6);
title('线性变换5-反相')
X7 = 1 * X0 .^ (0.5);% 参数为0.5,次方的时候要记得加.
subplot(3,3,8)
imshow(X7)
title('指数变换1-高灰度减弱,低灰度增强')
X8 = 1 * X0 .^ (1.5); % 参数为1.5
subplot(3,3,9)
imshow(X8)
title('指数变换2-高灰度增强,低灰度减弱')

结果

transform.jpg

分析

这个实验中对线性变换、对数变换、指数变换的几种情况做了仿真。可以看到对数变换对图片的处理是会令高灰度减弱,低灰度增强,与指数变换的幂参数小于1时效果是一致的;而相反当指数变换的幂参数大于1时,会令图片的高灰度增强,低灰度减弱。然后我们来看线性变换的四种情况,我们先来了解一下对比度和亮度的概念,对比度指的是灰度值的方差,亮度则是指灰度值在0-255区间内的绝对大小。所以线性变换中的a倍数参数可以改变对比度,而b参数则可以改变亮度。所以在a变大时可以使对比度增强,b变大时可以使亮度增强,反之则都是减弱。而反相效果通俗理解就是在二值图中让黑白互换,所以可以通过线性变换中令a=-1,b=255,做一个相当于让灰度值对称互换的操作,从而达到反相效果。

2.手写直方图函数

代码

clear;
X = imread('image1.jpg');
X = rgb2gray(X);
myhist = [];
for i=0:255
    myhist = [myhist;length(find(X == i))];
end
[m,n] = size(X);
total = m * n;
myhist = myhist ./ total;
figure(1);
stem(myhist,'Marker','none'); 
xlim([0,255]);% 去除stem图中的圆圈,并修改x轴范围,使对比更直观
title('myhist')
figure(2);
[counts,binLocations]=imhist(X);
counts = counts / total; % 对matlab提供的imhist函数画出来的图像进行归一化
stem(binLocations,counts,'Marker','none'); 
xlim([0,255]);% 去除stem图中的圆圈,并修改x轴范围,使对比更直观
title('imhist')

结果

myhist.jpg

imhist.jpg

分析

代码实现了自己编写的直方图和使用matlab自带的imhist函数产生的直方图进行对比,实现思路其实就是遍历每一个灰度值,用find函数找到对应灰度值的位置,返回一个行向量,获取这个行向量的长度就是对应灰度值的像素个数,最后存在另一个行向量中,再除以总像素数量进行归一化,绘制图像即为灰度直方图,为了便于对比,这里还将imhist产生的图像进行了一点修饰化,另两个图在格式上更便于对比。

总结和感想

这次实验自己手写了灰度变换的函数和绘制灰度直方图的函数,对这两个概念都有了进一步了解,尤其是对比度和亮度两个概念,虽然在日常图片处理常见,但是通过亲自动手处理更加能明白其对于图片的含义。