本篇博客是在做数字信号与图像处理实验中的收获。
具体内容包括:根据给定的代码放入Matlab中分别进行两次运行测试——比较并观察运行后的实验结果与原图像的不同点——画出IJ的直方图,并比较二者差异。接下来会对每一步进行具体讲解。
题目:
①给定以下代码,观察实验结果,写出和原图像有什么不同之处
clear;
I = imread('tire.tif');
J = histeq(I);
imshow(I)
figure, imshow(J)
imhist(I,64)
figure; imhist(J,64)
②输入以下代码,再次比较I、J两幅图像的差别,写出其原因
I=imread('pout.tif');
J=histeq(I);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
③画出I、J的直方图,写出两者的差别
一、第一次代码
①将题目给定的代码放入Matlab运行测试
②代码运行后,直方图均衡化函数(histeq)会对图像进行处理,目的是增强图像的对比度,使图像的灰度值分布更加均匀。运行结果如下
③原图像与均衡化后的图像的区别
在原始图像中,图像的灰度值只集中在某些范围内,导致图像的对比度较低;但是通过直方图均衡化后,灰度值的分布变得更加均匀,图像的对比度有所增强,尤其在图像亮度较低或者较高的区域,均衡化处理可以使细节更加清晰,亮部和暗部的细节处理更加明显。
二、第二次代码
①将题目给定的代码放入Matlab运行测试
②同上,也是利用histeq函数对图像进行直方图均衡化,代码运行结果如下
③原图像与均衡化后的图像的区别
同样的,直方图均衡化算法通过调整灰度级的映射关系,使得像素的灰度值分布尽可能地拉伸到全范围,均衡化后图像对比度增强,原本暗淡的部分变亮,图像整体更加清晰。
三、二者直方图差异
原始图像的直方图较为集中,说明大部分像素的灰度值集中在某一小范围内,造成图像的对比度较低;而均衡化后的直方图会更加均匀,灰度值的范围在0到255,分布得更加广泛,所以图像的对比度增强,细节更加明显。
四、学习小结
1.遇到的问题及解决
①在最开始读取图像的时候,没有注意要将图像文件在电脑上的路径输入完整,导致无法读取图像,编译失败。在相对路径无法读取后换成了绝对路径,图像读取成功。例如I=imread('C:\Users\生瓜蛋子\Desktop\tire.tif');
②直方图均衡化部分,由于我测试中选择的图像是single类型,而Matlab默认处理类型是png/jpg,二者类型不相等导致无法进行均衡化,此时则需要通过I=uint8(I),将图像类型转化为uint8来确保图像类型匹配。
2.体会和收获
在测试中比较棘手的是图像的维度和数据类型的处理。最开始以为维度都是默认的,没有想到要先降维度转化为一致后才能进行匹配,在这上面费了很多心思,尤其是处理彩色图像时,需要特别注意转换成灰度图像。测试中有些图像经过直方图均衡化后效果并不显著,以为是函数的参数没有选择好,也折腾了很久,后来问了舍友才发现其他人处理后的图像变化也不大,其实是原图对比度已经很高了,所以处理后变化不会很大。
这个问题让我认识到,不同的图像增强方法适用于不同的应用场景,在不同情况下图像增强方法的选择很重要。直方图均衡化主要适用于全局对比度增强,而其他方法如自适应直方图均衡化、锐化、边缘增强等则适用于局部细节增强、噪声去除和图像清晰度的提高。针对上面原本对比度已经很高的图像,可以将直方图均衡化升级为自适应直方图均衡化,或者使用更加高级的卷积滤波等等。在实际应用中,可以根据具体需求选择合适的图像增强方法来提高图像质量。