数字图像处理基本操作及灰度调整实验报告
1.实验目的
2.实验原理
o2.1 数字图像处理概述
o2.2 图像的表示和描述
o2.3 图像灰度调整
3.实验环境和工具
4.实验步骤
o4.1 图像读取和显示
o4.2 图像灰度化
o4.3 灰度调整
o4.4 图像直方图均衡化
o4.5 对比度拉伸
5.实验结果与分析
6.实验总结
7.参考文献
实验目的
1.掌握数字图像处理的基本概念和原理。
2.学会使用Python编程语言进行图像处理。
3.理解并实现图像灰度调整的方法。
4.分析实验结果,讨论图像处理方法的优缺点。
实验原理
2.1 数字图像处理概述
数字图像处理(Digital Image Processing,DIP)是一门研究使用计算机对图像进行处理的技术。它的目的是改善图像的质量,使之更适合人类或计算机对图像进行观察和分析。数字图像处理涉及到图像采集、存储、传输、分析以及图像的恢复等方面。
2.2 图像的表示和描述
数字图像由图像元素(像素)组成,每个像素有一个对应的灰度值。灰度值表示像素的亮度,通常用8位二进制数表示,其范围为0~255。像素的灰度值越高,亮度越高。数字图像可以表示为一个矩阵,矩阵中的每个元素对应一个像素的灰度值。彩图像通常采用RGB颜模型,每个像素包含三个分量,分别对应红、绿和蓝通道的亮度。
2.3 图像灰度调整
图像灰度调整是指调整图像像素的灰度值,以改善图像的质量。常用的图像灰度调整方法有:
1.线性灰度变换:通过线性映射关系改变图像灰度值,可以实现图像亮度的调整和对比度的拉伸。
2.直方图均衡化:通过调整图像的灰度直方图,使其均匀分布,可以提高图像的对比度。
实验环境和工具
操作系统:Windows 10
编程语言:Python 3.8
图像处理库:OpenCV 4.5.2
集成开发环境:Visual Studio Code
实验步骤
4.1 图像读取和显示
首先,我们需要使用OpenCV库读取和显示图像。以下是读取和显示图像的Python代码:
import cv2
# 读取图像
image = cv2.imread("input.jpg")
# 显示图像
cv2.imshow("Original Image", image)
# 等待用户按键,按下任意键关闭窗口
cv2.waitKey(0)直方图均衡化的基本原理
# 销毁所有窗口
cv2.destroyAllWindows()
4.2 图像灰度化
为了便于后续的灰度调整操作,我们需要将彩图像转换为灰度图像。以下是图像灰度化的Python代码:
# 将彩图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示灰度图像
cv2.imshow("Gray Image", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.3 灰度调整
接下来,我们将对图像进行灰度调整。首先,实现线性灰度变换。以下是线性灰度变换的Python代码:
import numpy as np
# 线性灰度变换
def linear_gray_transformation(image, a, b):
    new_image = np.copy(image)
    new_image = a * new_image + b
    new_image = np.clip(new_image, 0, 255)
    return new_image.astype(np.uint8)
# 对灰度图像进行线性灰度变换
adjusted_image = linear_gray_transformation(gray_image, 1.2, -30)
# 显示调整后的图像
cv2.imshow("Adjusted Image", adjusted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.4 图像直方图均衡化
直方图均衡化是一种能够提高图像对比度的方法。以下是图像直方图均衡化的Python代码:
# 直方图均衡化
equalized_image = cv2.equalizeHist(gray_image)
# 显示均衡化后的图像
cv2.imshow("Equalized Image", equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.5 对比度拉伸
对比度拉伸是一种调整图像对比度的方法,它将原始图像的灰度值范围拉伸到一个新的范围。以下是图像对比度拉伸的Python代码:
# 对比度拉伸
def contrast_stretching(image, lower_percentile=1, upper_percentile=99):
    lower = np.percentile(image, lower_percentile)
    upper = np.percentile(image, upper_percentile)
    return linear_gray_transformation(image, 255 / (upper - lower), -lower * 255 / (upper - lower))
# 对灰度图像进行对比度拉伸
stretched_image = contrast_stretching(gray_image)
# 显示拉伸后的图像
cv2.imshow("Stretched Image", stretched_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
实验结果与分析
1.图像读取和显示:通过实验,我们成功地使用OpenCV库读取并显示了一幅图像。
2.图像灰度化:将彩图像转换为灰度图像,为后续的灰度调整操作提供了基础。
3.灰度调整:线性灰度变换可以实现图像亮度的调整和对比度的拉伸。通过调整参数a和b,我们可以实现不同程度的灰度调整。
4.图像直方图均衡化:直方图均衡化能够有效地提高图像的对比度,使图像的灰度值更加均匀分布。
5.对比度拉伸:对比度拉伸可以实现图像对比度的调整,通过调整参数lowerpercentile和upperpercentile,我们可以实现不同程度的对比度拉伸。
通过本次实验,我们掌握了数字图像处理的基本概念和原理,学会了使用Python编程语言进行图像处理,理解并实现了图像灰度调整的方法。
实验总结
本实验报告详细介绍了数字图像处理基本操作